sproutcore 1.6.0.rc.2-x86-mingw32 → 1.6.0.1-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +12 -0
- data/VERSION.yml +1 -1
- data/bin/sc-docs +6 -1
- data/lib/buildtasks/target.rake +1 -1
- data/lib/frameworks/sproutcore/Buildfile +5 -1
- data/lib/frameworks/sproutcore/CHANGELOG.md +175 -1
- data/lib/frameworks/sproutcore/apps/test_controls/controllers/select.js +12 -0
- data/lib/frameworks/sproutcore/apps/test_controls/resources/select_page.js +19 -5
- data/lib/frameworks/sproutcore/frameworks/ajax/system/request.js +28 -31
- data/lib/frameworks/sproutcore/frameworks/ajax/system/response.js +9 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/controller.js +21 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/responder_context.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/template_helpers/checkbox_support.js +6 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/template_helpers/text_field_support.js +26 -8
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/keyboard.js +2 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/pane.js +12 -5
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/template.js +25 -9
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/locale.js +157 -5
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/render_context.js +7 -6
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/root_responder.js +9 -3
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/sparse_array.js +8 -8
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/string.js +104 -4
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/theme.js +3 -56
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/utils.js +4 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/object/content_destroyed.js +59 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/string.js +41 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/template_helpers/text_field_support.js +10 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/panes/template.js +16 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template/handlebars.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/clippingFrame.js +11 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/didAppendToDocument.js +18 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/insertBefore.js +10 -6
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/keyboard.js +18 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template_collection.js +9 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +9 -4
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/keyboard.js +15 -3
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/manipulation.js +14 -8
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/theming.js +8 -18
- data/lib/frameworks/sproutcore/frameworks/datastore/data_sources/fixtures.js +12 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/mixins/relationship_support.js +296 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/models/child_record.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +330 -326
- data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +22 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +614 -614
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/data_sources/data_source.js +14 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record.js +3 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array_complex.js +2 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_complex.js +2 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/core_methods.js +20 -13
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +61 -46
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChangesFromNestedStore.js +30 -30
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitChangesFromNestedStore.js +24 -24
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/connectDataSource.js +31 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/pushRelationships.js +1177 -0
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/localized/system/datetime.js +4 -63
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/border.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/scrollable.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/alert.js +7 -8
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/menu.js +18 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/panel.js +9 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drag_data_source.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drop_target.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/button.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/checkbox.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/collection.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/disclosure.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/image_button.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/master_detail.js +3 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/menu.js +12 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/panel.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/picker.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/progress.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/radio.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/radio_group.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segment.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segmented.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/slider.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/toolbar.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/well.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/workspace.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/resources/segmented.css +1 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +33 -22
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/methods.js +20 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +10 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/date_field/methods.js +34 -7
- data/lib/frameworks/sproutcore/frameworks/desktop/views/button.js +14 -15
- data/lib/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +40 -14
- data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +699 -700
- data/lib/frameworks/sproutcore/frameworks/desktop/views/list_item.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/views/master_detail.js +11 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +16 -6
- data/lib/frameworks/sproutcore/frameworks/desktop/views/progress.js +0 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/views/radio.js +49 -7
- data/lib/frameworks/sproutcore/frameworks/desktop/views/select_button.js +9 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/select_field.js +6 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/views/slider.js +4 -26
- data/lib/frameworks/sproutcore/frameworks/desktop/views/web.js +20 -19
- data/lib/frameworks/sproutcore/frameworks/experimental/Buildfile +2 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/designers/view_designer.js +249 -249
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/mixins/edit_mode.js +13 -5
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/mixins/emptiness.js +53 -37
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/render_delegates/form.js +2 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/render_delegates/form_row.js +3 -11
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/mixins/edit_mode.js +53 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/mixins/emptiness.js +114 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form.js +174 -6
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_row.js +86 -6
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/views/form.js +80 -110
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/views/form_row.js +96 -97
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/README.md +2 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/models/record.js +20 -36
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/ext/menu.js +121 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/ext/menu_item.js +90 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/mixins/select_view_menu.js +139 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/render_delegates/select_button.js +14 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/ext/menu_resizing.js +25 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/mixins/select_view_menu/bindings.js +43 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/mixins/select_view_menu/check_selected.js +32 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/views/popup_button/menu_setup.js +40 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/views/popup_button/show_menu.js +45 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/views/select/menu_width.js +49 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/views/select/selected_item.js +191 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/views/popup_button.js +264 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/views/select.js +450 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/mixins/split_child.js +14 -6
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/mixins/split_thumb.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/render_delegates/split.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/render_delegates/split_divider.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/views/split.js +9 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/views/thumb.js +3 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_resize.js +7 -17
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/content_value_support.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/flowed_layout.js +35 -8
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editable.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editor.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editor_delegate.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inner_frame.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/canvas_image.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/helpers/sizing.js +2 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/image.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/label.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/render_delegate.js +6 -6
- data/lib/frameworks/sproutcore/frameworks/foundation/resources/images/favicon.ico +0 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/resources/text_field.css +0 -5
- data/lib/frameworks/sproutcore/frameworks/foundation/system/exception_handler.js +4 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/system/math.js +2 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/system/module.js +13 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/string_measurement.js +6 -9
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/flowed_layout/tests.js +912 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/methods.js +36 -7
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +58 -4
- data/lib/frameworks/sproutcore/frameworks/foundation/validators/validator.js +1 -3
- data/lib/frameworks/sproutcore/frameworks/foundation/views/field.js +0 -15
- data/lib/frameworks/sproutcore/frameworks/foundation/views/label.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +25 -14
- data/lib/frameworks/sproutcore/frameworks/handlebars/handlebars.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/core.js +15 -9
- data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/flatten.js +24 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/ext/array.js +2 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/ext/function.js +5 -5
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/array.js +19 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/copyable.js +3 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/freezable.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/system/binding.js +14 -14
- data/lib/frameworks/sproutcore/frameworks/runtime/system/error.js +3 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/system/logger.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/system/range_observer.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/runtime/system/set.js +15 -16
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/itemType.js +6 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/enhance.js +30 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/create.js +17 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/system/state.js +9 -2
- data/lib/frameworks/sproutcore/frameworks/statechart/system/statechart.js +3 -1
- data/lib/frameworks/sproutcore/frameworks/testing/resources/runner.css +0 -1
- data/lib/frameworks/sproutcore/frameworks/yuireset/resources/base.css +80 -0
- data/lib/frameworks/sproutcore/frameworks/yuireset/resources/core.css +0 -4
- data/lib/frameworks/sproutcore/lib/index.rhtml +2 -1
- data/lib/frameworks/sproutcore/themes/ace/resources/collection/normal/list.css +3 -3
- data/lib/frameworks/sproutcore/themes/ace/resources/collection/normal/list_item.css +2 -2
- data/lib/frameworks/sproutcore/themes/ace/resources/form/form.css +9 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/menu/menu.css +3 -1
- data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/picker.js +1 -1
- data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/workspace.js +1 -1
- data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/button.js +1 -1
- data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/panel.js +1 -1
- data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/progress.js +2 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/slider.js +1 -1
- data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/well.js +1 -1
- data/lib/sproutcore/builders/base.rb +5 -1
- data/lib/sproutcore/builders/handlebars.rb +12 -1
- data/lib/sproutcore/models/target.rb +1 -9
- data/lib/sproutcore/rack/proxy.rb +238 -92
- data/lib/sproutcore/tools/docs.rb +1 -7
- data/spec/fixtures/builder_tests/apps/handlebars_test/Buildfile +1 -0
- data/spec/fixtures/builder_tests/apps/handlebars_test/{template.handlebars → templates/template.handlebars} +2 -0
- data/spec/lib/builders/handlebars_spec.rb +10 -4
- data/sproutcore.gemspec +3 -1
- metadata +73 -44
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/english.lproj/default_styles.css +0 -5
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/english.lproj/strings.js +0 -15
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_checkbox_field.js +0 -17
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_field.js +0 -17
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_label.js +0 -17
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_radio_field.js +0 -17
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_text_field.js +0 -17
data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/models/record.js
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
|
14
14
|
// ..........................................................
|
15
15
|
// Properties
|
16
|
-
//
|
16
|
+
//
|
17
17
|
|
18
18
|
/**
|
19
19
|
If YES, then searches for records of this type will return
|
@@ -38,7 +38,7 @@
|
|
38
38
|
|
39
39
|
// ..........................................................
|
40
40
|
// Propagation Support
|
41
|
-
//
|
41
|
+
//
|
42
42
|
|
43
43
|
/**
|
44
44
|
Like the original SC.Record.storeKeyFor,
|
@@ -49,23 +49,35 @@
|
|
49
49
|
*/
|
50
50
|
storeKeyFor: function(id) {
|
51
51
|
var storeKeys = this.storeKeysById(),
|
52
|
-
ret = storeKeys[id]
|
52
|
+
ret = storeKeys[id],
|
53
|
+
superclass = this.superclass;
|
53
54
|
|
54
55
|
if (!ret) {
|
55
|
-
|
56
|
-
|
56
|
+
// If this is a polymorphic record, send the key generation recursively up to its polymorphic
|
57
|
+
// superclasses. This allows the key, which may exist or may be generated, to then propagate
|
58
|
+
// back down so that it exists at each level.
|
59
|
+
if (this.isPolymorphic && superclass.isPolymorphic && superclass !== SC.Record) {
|
60
|
+
ret = superclass.storeKeyFor(id);
|
61
|
+
} else {
|
62
|
+
ret = SC.Store.generateStoreKey();
|
63
|
+
SC.Store.idsByStoreKey[ret] = id;
|
64
|
+
}
|
65
|
+
|
66
|
+
// Update the RecordType for the key on each recursion return, so that it ends as the lowest class
|
57
67
|
SC.Store.recordTypesByStoreKey[ret] = this;
|
68
|
+
|
69
|
+
// Each Record must keep track of its own storeKeys so that a find at any level on the same ID
|
70
|
+
// doesn't generate new storeKeys. Plus it will be faster than always running back up to the
|
71
|
+
// superclass method to retrieve the key.
|
58
72
|
storeKeys[id] = ret;
|
59
|
-
this._propagateIdForStoreKey(id, ret);
|
60
73
|
}
|
61
74
|
|
62
75
|
return ret ;
|
63
76
|
},
|
64
77
|
|
65
|
-
|
66
78
|
// ..........................................................
|
67
79
|
// Internal Support
|
68
|
-
//
|
80
|
+
//
|
69
81
|
|
70
82
|
extend: function() {
|
71
83
|
var ret = oldExtend.apply(this, arguments);
|
@@ -76,34 +88,6 @@
|
|
76
88
|
}
|
77
89
|
|
78
90
|
return ret;
|
79
|
-
},
|
80
|
-
|
81
|
-
/** @private */
|
82
|
-
_propagateIdForStoreKey: function(id, storeKey) {
|
83
|
-
var superclass = this.superclass;
|
84
|
-
if (this.isPolymorphic) {
|
85
|
-
while (superclass.isPolymorphic && superclass !== SC.Record) {
|
86
|
-
superclass._storeKeyForId(storeKey, id);
|
87
|
-
superclass = superclass.superclass;
|
88
|
-
}
|
89
|
-
}
|
90
|
-
},
|
91
|
-
|
92
|
-
/** @private */
|
93
|
-
_storeKeyForId: function(storeKey, id) {
|
94
|
-
var storeKeys;
|
95
|
-
if (!this.isPolymorphic) return;
|
96
|
-
|
97
|
-
/*
|
98
|
-
TODO [CC] SC.Store.recordTypesByStoreKey will be broken
|
99
|
-
*/
|
100
|
-
|
101
|
-
storeKeys = this.storeKeysById();
|
102
|
-
if (storeKeys[id]) {
|
103
|
-
throw "A store key (%@) already existing for %@ on %@".fmt(storeKey, id, this);
|
104
|
-
}
|
105
|
-
|
106
|
-
storeKeys[id] = storeKey;
|
107
91
|
}
|
108
92
|
|
109
93
|
});
|
@@ -0,0 +1,121 @@
|
|
1
|
+
// ==========================================================================
|
2
|
+
// Project: SproutCore - JavaScript Application Framework
|
3
|
+
// Copyright: ©2006-2010 Sprout Systems, Inc. and contributors.
|
4
|
+
// Portions ©2008-2010 Apple Inc. All rights reserved.
|
5
|
+
// License: Licensed under MIT license (see license.js)
|
6
|
+
// ==========================================================================
|
7
|
+
|
8
|
+
/**
|
9
|
+
@class
|
10
|
+
Enhances SC.MenuPane to add support for automatic resizing.
|
11
|
+
*/
|
12
|
+
SC.MenuPane = SC.MenuPane; // for docs
|
13
|
+
|
14
|
+
SC.MenuPane.reopen(
|
15
|
+
/** @scope SC.MenuPane.prototype */ {
|
16
|
+
|
17
|
+
/**
|
18
|
+
If YES, the menu should automatically resize its width to fit its items.
|
19
|
+
|
20
|
+
This will swap out the default SC.MenuItemView. If you are using a custom
|
21
|
+
exampleView, you will need to mix SC.AutoResize into your exampleView
|
22
|
+
and set shouldAutoResize to NO (the actual resizing will be handled
|
23
|
+
by SC.MenuPane).
|
24
|
+
|
25
|
+
This property must be set before instantiation; any changes after instantiation
|
26
|
+
will not function properly.
|
27
|
+
|
28
|
+
@property
|
29
|
+
@type {Boolean}
|
30
|
+
@default YES
|
31
|
+
*/
|
32
|
+
shouldAutoResize: YES,
|
33
|
+
|
34
|
+
/**
|
35
|
+
The minimum width for this menu if it is to be automatically resized.
|
36
|
+
|
37
|
+
If no value is specified, it will be determined from the controlSize.
|
38
|
+
|
39
|
+
@property {Number}
|
40
|
+
@default minimumMenuWidth from render delegate, or 0.
|
41
|
+
*/
|
42
|
+
minimumMenuWidth: SC.propertyFromRenderDelegate('minimumMenuWidth', 0),
|
43
|
+
|
44
|
+
/**
|
45
|
+
The amount to add to any calculated width.
|
46
|
+
|
47
|
+
If no value is specified, it will be determined from the controlSize.
|
48
|
+
|
49
|
+
@property {Number}
|
50
|
+
@default menuWidthPadding from render delegate, or 0
|
51
|
+
*/
|
52
|
+
menuWidthPadding: SC.propertyFromRenderDelegate('menuWidthPadding', 0),
|
53
|
+
|
54
|
+
/**
|
55
|
+
@private
|
56
|
+
In addition to the normal init, we need to schedule an automatic resize.
|
57
|
+
*/
|
58
|
+
init: function(orig) {
|
59
|
+
orig();
|
60
|
+
|
61
|
+
if (this.get('shouldAutoResize')) {
|
62
|
+
this.invokeOnce('_updateMenuWidth');
|
63
|
+
}
|
64
|
+
}.enhance(),
|
65
|
+
|
66
|
+
/**
|
67
|
+
The array of child menu item views that compose the menu.
|
68
|
+
|
69
|
+
This computed property parses @displayItems@ and constructs an SC.MenuItemView (or whatever class you have set as the @exampleView@) for every item.
|
70
|
+
|
71
|
+
@property
|
72
|
+
@type Array
|
73
|
+
@readOnly
|
74
|
+
@private
|
75
|
+
*/
|
76
|
+
createMenuItemViews: function(orig) {
|
77
|
+
// EXTENDED to set shouldMeasureSize to its initial value and to
|
78
|
+
// observe the measured size.
|
79
|
+
var views = orig();
|
80
|
+
|
81
|
+
var idx, len = views.length, view;
|
82
|
+
if (this.get('shouldAutoResize')) {
|
83
|
+
for (idx = 0; idx < len; idx++) {
|
84
|
+
view = views[idx];
|
85
|
+
|
86
|
+
// set up resizing if we want
|
87
|
+
view.set('shouldMeasureSize', YES);
|
88
|
+
view.addObserver('measuredSize', this, this._menuItemMeasuredSizeDidChange);
|
89
|
+
}
|
90
|
+
}
|
91
|
+
|
92
|
+
return views;
|
93
|
+
}.enhance(),
|
94
|
+
|
95
|
+
_menuItemViewsDidChange: function() {
|
96
|
+
if (this.get('shouldAutoResize')) this.invokeOnce('_updateMenuWidth');
|
97
|
+
}.observes('menuItemViews'),
|
98
|
+
|
99
|
+
_menuItemMeasuredSizeDidChange: function(menuItem) {
|
100
|
+
this.invokeOnce('_updateMenuWidth');
|
101
|
+
},
|
102
|
+
|
103
|
+
_menuMinimumMenuWidthDidChange: function() {
|
104
|
+
this.invokeOnce('_updateMenuWidth');
|
105
|
+
}.observes('minimumMenuWidth'),
|
106
|
+
|
107
|
+
_updateMenuWidth: function() {
|
108
|
+
var menuItemViews = this.get('menuItemViews');
|
109
|
+
if (!menuItemViews) return;
|
110
|
+
|
111
|
+
var len = menuItemViews.length, idx, view,
|
112
|
+
width = this.get('minimumMenuWidth');
|
113
|
+
|
114
|
+
for (idx = 0; idx < len; idx++) {
|
115
|
+
view = menuItemViews[idx];
|
116
|
+
width = Math.max(width, view.get('measuredSize').width + this.get('menuWidthPadding'));
|
117
|
+
}
|
118
|
+
|
119
|
+
this.adjust('width', width);
|
120
|
+
}
|
121
|
+
});
|
data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/ext/menu_item.js
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
// ==========================================================================
|
2
|
+
// Project: SproutCore - JavaScript Application Framework
|
3
|
+
// Copyright: ©2006-2010 Sprout Systems, Inc. and contributors.
|
4
|
+
// Portions ©2008-2010 Apple Inc. All rights reserved.
|
5
|
+
// License: Licensed under MIT license (see license.js)
|
6
|
+
// ==========================================================================
|
7
|
+
|
8
|
+
/**
|
9
|
+
@class
|
10
|
+
Enhances SC.MenuItemView to support auto resize.
|
11
|
+
*/
|
12
|
+
SC.MenuItemView = SC.MenuItemView; // for docs
|
13
|
+
|
14
|
+
SC.MenuItemView.reopen(SC.AutoResize);
|
15
|
+
SC.MenuItemView.reopen(
|
16
|
+
/** @scope SC.MenuItemView.prototype */{
|
17
|
+
|
18
|
+
//
|
19
|
+
// For automatic resizing, if enabled (to be enabled by parent menu)
|
20
|
+
//
|
21
|
+
/**
|
22
|
+
The item view is capable of automatic resizing.
|
23
|
+
|
24
|
+
@private
|
25
|
+
@property
|
26
|
+
@type {Boolean}
|
27
|
+
*/
|
28
|
+
supportsAutoResize: YES,
|
29
|
+
|
30
|
+
/**
|
31
|
+
The menu item should NOT change its own width and height.
|
32
|
+
|
33
|
+
@private
|
34
|
+
@property
|
35
|
+
@type {Boolean}
|
36
|
+
*/
|
37
|
+
shouldAutoResize: NO,
|
38
|
+
|
39
|
+
/**
|
40
|
+
If YES, the menu item will measure its width and height so that the menu
|
41
|
+
can automatically resize itself. This is usually set by the parent menu.
|
42
|
+
|
43
|
+
@property
|
44
|
+
@type {Boolean}
|
45
|
+
@default NO
|
46
|
+
*/
|
47
|
+
shouldMeasureSize: NO,
|
48
|
+
|
49
|
+
// NOTE: this property could come from the theme at some point, but MenuItemView
|
50
|
+
// would have to be migrated to render delegates first. MenuPane adds the
|
51
|
+
// necessary padding for now.
|
52
|
+
autoResizePadding: 0,
|
53
|
+
|
54
|
+
/** @private */
|
55
|
+
autoResizeText: function() {
|
56
|
+
return this.get('title');
|
57
|
+
}.property('title'),
|
58
|
+
|
59
|
+
/** @private */
|
60
|
+
autoResizeLayer: function() {
|
61
|
+
return this.$('.value')[0];
|
62
|
+
}.property('layer').cacheable(),
|
63
|
+
|
64
|
+
/**
|
65
|
+
* @private
|
66
|
+
* When we render, we recreate all of the DOM, including the element that gets measured.
|
67
|
+
* This is a problem because our autoResizeLayer changes. So, we must invalidate that
|
68
|
+
* layer whenever we re-render.
|
69
|
+
*
|
70
|
+
* We need to move menu item rendering into a render delegate. When this happens, there
|
71
|
+
* are a few ways we could do it:
|
72
|
+
*
|
73
|
+
* - Give render delegate method to find clientWidth and return it:
|
74
|
+
* getMenuItemTitleWidth(dataSource, $)
|
75
|
+
*
|
76
|
+
* - Make render delegate provide the autoResizeLayer:
|
77
|
+
* In this case, the autoResizeLayer might be a computed property that we invalidate
|
78
|
+
* on didUpdateLayer, and that calls a method like getAutoResizeLayer. Alternatively,
|
79
|
+
* if render delegate properties are added, we could make this one of those, but it
|
80
|
+
* would need some way to access the DOM. Maybe data sources can have $ properties or
|
81
|
+
* methods? Maybe a jQuery property/method?
|
82
|
+
*/
|
83
|
+
didUpdateLayer: function() {
|
84
|
+
this.notifyPropertyChange('autoResizeLayer');
|
85
|
+
this.scheduleMeasurement();
|
86
|
+
}.enhance()
|
87
|
+
|
88
|
+
}) ;
|
89
|
+
|
90
|
+
|
@@ -0,0 +1,139 @@
|
|
1
|
+
// Copyright: ©2006-2010 Sprout Systems, Inc. and contributors.
|
2
|
+
// Portions ©2008-2010 Apple Inc. All rights reserved.
|
3
|
+
// License: Licensed under MIT license (see license.js)
|
4
|
+
// ==========================================================================
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Binds a menu view to an owning SC.SelectView, and checks selected items.
|
8
|
+
*
|
9
|
+
* @mixin
|
10
|
+
*
|
11
|
+
*/
|
12
|
+
SC.SelectViewMenu = {
|
13
|
+
/**
|
14
|
+
The SelectView to bind to.
|
15
|
+
|
16
|
+
@property
|
17
|
+
@type {SC.SelectView}
|
18
|
+
@default null
|
19
|
+
*/
|
20
|
+
selectView: null,
|
21
|
+
|
22
|
+
//
|
23
|
+
// CODE TO MAKE ITEMS BE CHECKED WHEN SELECTED:
|
24
|
+
//
|
25
|
+
|
26
|
+
/**
|
27
|
+
The current value of the SelectView.
|
28
|
+
|
29
|
+
@property
|
30
|
+
@default null
|
31
|
+
*/
|
32
|
+
value: null,
|
33
|
+
valueBinding: '.selectView.value',
|
34
|
+
|
35
|
+
|
36
|
+
/**
|
37
|
+
@private
|
38
|
+
Invalidates menu items' isChecked property when the selectView's value changes.
|
39
|
+
*/
|
40
|
+
valueDidChange: function() {
|
41
|
+
var items = this.get('menuItemViews'), idx, len = items.length, item;
|
42
|
+
for (idx = 0; idx < len; idx++) {
|
43
|
+
// if the item currently is checked, or if it _should_ be checked, we need to
|
44
|
+
// invalidate the isChecked property.
|
45
|
+
item = items[idx];
|
46
|
+
if (item._lastIsChecked) {
|
47
|
+
item.notifyPropertyChange('isChecked');
|
48
|
+
}
|
49
|
+
|
50
|
+
if (item.get('isChecked')) {
|
51
|
+
item.notifyPropertyChange('isChecked');
|
52
|
+
}
|
53
|
+
}
|
54
|
+
}.observes('value'),
|
55
|
+
|
56
|
+
/**
|
57
|
+
An overridden MenuItemView to create for each menu item that makes itself checked if
|
58
|
+
it is selected.
|
59
|
+
|
60
|
+
@property
|
61
|
+
@type {SC.MenuItemView}
|
62
|
+
@default SC.MenuItemView subclass
|
63
|
+
*/
|
64
|
+
exampleView: SC.MenuItemView.extend({
|
65
|
+
isChecked: function() {
|
66
|
+
// _lastIsChecked is used by the SelectViewMenu mixin above to determine whether
|
67
|
+
// the isChecked property needs to be invalidated.
|
68
|
+
this._lastIsChecked = this.getContentProperty('itemValueKey') === this.getPath('parentMenu.rootMenu.value');
|
69
|
+
return this._lastIsChecked;
|
70
|
+
}.property(),
|
71
|
+
|
72
|
+
displayProperties: ['isChecked']
|
73
|
+
}),
|
74
|
+
|
75
|
+
//
|
76
|
+
// CODE TO BIND TO SELECTVIEW PROPERTIES
|
77
|
+
//
|
78
|
+
|
79
|
+
/** @private */
|
80
|
+
_svm_bindToProperties: [
|
81
|
+
'items',
|
82
|
+
'itemTitleKey', 'itemIsEnabledKey', 'itemValueKey', 'itemIconKey',
|
83
|
+
'itemHeightKey', 'itemSubMenuKey', 'itemSeparatorKey', 'itemTargetKey',
|
84
|
+
'itemActionKey', 'itemCheckboxKey', 'itemShortCutKey',
|
85
|
+
'itemKeyEquivalentKey', 'itemDisableMenuFlashKey', 'minimumMenuWidth',
|
86
|
+
|
87
|
+
'preferType', 'preferMatrix'
|
88
|
+
],
|
89
|
+
|
90
|
+
/** @private */
|
91
|
+
_svm_setupBindings: function() {
|
92
|
+
var bindTo = this.get('selectView');
|
93
|
+
if (!bindTo) {
|
94
|
+
return;
|
95
|
+
}
|
96
|
+
|
97
|
+
var props = this._svm_bindToProperties, idx, len = props.length, key;
|
98
|
+
|
99
|
+
for (idx = 0; idx < len; idx++) {
|
100
|
+
key = props[idx];
|
101
|
+
this[key + 'Binding'] = this.bind(key, bindTo, key);
|
102
|
+
}
|
103
|
+
|
104
|
+
this._svm_isBoundTo = bindTo;
|
105
|
+
},
|
106
|
+
|
107
|
+
/** @private */
|
108
|
+
_svm_clearBindings: function() {
|
109
|
+
var boundTo = this._svm_isBoundTo;
|
110
|
+
if (!boundTo) {
|
111
|
+
return;
|
112
|
+
}
|
113
|
+
|
114
|
+
var props = this._svm_bindToProperties, idx, len = props.length, key;
|
115
|
+
|
116
|
+
for (idx = 0; idx < len; idx++) {
|
117
|
+
key = props[idx];
|
118
|
+
this[key + 'Binding'].disconnect();
|
119
|
+
}
|
120
|
+
},
|
121
|
+
|
122
|
+
/** @private */
|
123
|
+
_svm_selectViewDidChange: function() {
|
124
|
+
this._svm_clearBindings();
|
125
|
+
this._svm_setupBindings();
|
126
|
+
}.observes('selectView'),
|
127
|
+
|
128
|
+
/** @private */
|
129
|
+
initMixin: function() {
|
130
|
+
this._svm_setupBindings();
|
131
|
+
},
|
132
|
+
|
133
|
+
/** @private */
|
134
|
+
destroyMixin: function() {
|
135
|
+
this._svm_clearBindings();
|
136
|
+
}
|
137
|
+
};
|
138
|
+
|
139
|
+
|