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
@@ -344,9 +344,18 @@ SC.RootResponder = SC.Object.extend(
|
|
344
344
|
(removing sc-blur). Also notify panes.
|
345
345
|
*/
|
346
346
|
focus: function() {
|
347
|
+
|
347
348
|
if (!this.get('hasFocus')) {
|
348
349
|
SC.$('body').addClass('sc-focus').removeClass('sc-blur');
|
349
350
|
|
351
|
+
// If the app is getting focus again set the first responder to the first
|
352
|
+
// valid firstResponder view in the view's tree
|
353
|
+
if(!SC.TABBING_ONLY_INSIDE_DOCUMENT){
|
354
|
+
var mainPane = this.get('mainPane'),
|
355
|
+
nextValidKeyView = mainPane ? mainPane.get('nextValidKeyView') : null;
|
356
|
+
if (nextValidKeyView) mainPane.makeFirstResponder(nextValidKeyView);
|
357
|
+
}
|
358
|
+
|
350
359
|
SC.run(function() {
|
351
360
|
this.set('hasFocus', YES);
|
352
361
|
}, this);
|
@@ -689,7 +698,6 @@ SC.RootResponder = SC.Object.extend(
|
|
689
698
|
|
690
699
|
// do some initial set
|
691
700
|
this.set('currentWindowSize', this.computeWindowSize()) ;
|
692
|
-
this.focus(); // assume the window is focused when you load.
|
693
701
|
|
694
702
|
if (SC.browser.mobileSafari) {
|
695
703
|
|
@@ -1717,8 +1725,6 @@ SC.RootResponder = SC.Object.extend(
|
|
1717
1725
|
return YES;
|
1718
1726
|
}
|
1719
1727
|
|
1720
|
-
if(!SC.browser.msie) window.focus();
|
1721
|
-
|
1722
1728
|
// First, save the click count. The click count resets if the mouse down
|
1723
1729
|
// event occurs more than 250 ms later than the mouse up event or more
|
1724
1730
|
// than 8 pixels away from the mouse down event.
|
@@ -102,7 +102,7 @@ SC.SparseArray = SC.Object.extend(SC.Observable, SC.Enumerable, SC.Array,
|
|
102
102
|
added as range requests are completed.
|
103
103
|
*/
|
104
104
|
requestedRangeIndex: null,
|
105
|
-
|
105
|
+
|
106
106
|
/**
|
107
107
|
Make sure to create the index array during init so that it is not shared
|
108
108
|
between all instances.
|
@@ -110,13 +110,13 @@ SC.SparseArray = SC.Object.extend(SC.Observable, SC.Enumerable, SC.Array,
|
|
110
110
|
init: function() {
|
111
111
|
sc_super();
|
112
112
|
this.requestedRangeIndex = [];
|
113
|
-
|
113
|
+
|
114
114
|
this._TMP_PROVIDE_ARRAY = [];
|
115
115
|
this._TMP_PROVIDE_RANGE = { length: 1 };
|
116
116
|
this._TMP_RANGE = {};
|
117
117
|
},
|
118
|
-
|
119
|
-
/**
|
118
|
+
|
119
|
+
/**
|
120
120
|
Returns the object at the specified index. If the value for the index
|
121
121
|
is currently undefined, invokes the didRequestIndex() method to notify
|
122
122
|
the delegate.
|
@@ -124,9 +124,9 @@ SC.SparseArray = SC.Object.extend(SC.Observable, SC.Enumerable, SC.Array,
|
|
124
124
|
The omitMaterializing flag ensures that the object will not be materialized,
|
125
125
|
but it simply checks for the presence of an object at the specified index
|
126
126
|
and will return YES (or undefined if not found). This is useful in the case
|
127
|
-
of SparseArrays, where you might NOT want to request the index to be loaded,
|
127
|
+
of SparseArrays, where you might NOT want to request the index to be loaded,
|
128
128
|
but simply need a shallow check to see if the position has been filled.
|
129
|
-
|
129
|
+
|
130
130
|
@param {Number} idx the index to get
|
131
131
|
@param {Boolean} omitMaterializing
|
132
132
|
@return {Object} the object
|
@@ -251,7 +251,7 @@ SC.SparseArray = SC.Object.extend(SC.Observable, SC.Enumerable, SC.Array,
|
|
251
251
|
|
252
252
|
@param {Range} range the range to apply to
|
253
253
|
@param {Array} array the array of objects to insert
|
254
|
-
@returns {SC.SparseArray}
|
254
|
+
@returns {SC.SparseArray} receiver
|
255
255
|
*/
|
256
256
|
provideObjectsInRange: function(range, array) {
|
257
257
|
var content = this._sa_content ;
|
@@ -300,7 +300,7 @@ SC.SparseArray = SC.Object.extend(SC.Observable, SC.Enumerable, SC.Array,
|
|
300
300
|
var start = range.start, loc = Math.min(start + range.length, content.length);
|
301
301
|
while (--loc>=start) content[loc] = undefined;
|
302
302
|
}
|
303
|
-
}
|
303
|
+
}
|
304
304
|
this.arrayContentDidChange(range.start, range.length, range.length) ; // notify
|
305
305
|
return this ;
|
306
306
|
},
|
@@ -116,7 +116,7 @@ SC.mixin(SC.String, {
|
|
116
116
|
},
|
117
117
|
|
118
118
|
/**
|
119
|
-
Localizes the string. This will look up the
|
119
|
+
Localizes the string. This will look up the receiver string as a key
|
120
120
|
in the current Strings hash. If the key matches, the loc'd value will be
|
121
121
|
used. The resulting string will also be passed through fmt() to insert
|
122
122
|
any variables.
|
@@ -136,12 +136,104 @@ SC.mixin(SC.String, {
|
|
136
136
|
|
137
137
|
var args = SC.$A(arguments);
|
138
138
|
args.shift(); // remove str param
|
139
|
-
//to extend String.prototype
|
139
|
+
//to extend String.prototype
|
140
140
|
if(args.length>0 && args[0].isSCArray) args=args[0];
|
141
141
|
|
142
142
|
return SC.String.fmt(localized, args);
|
143
143
|
},
|
144
144
|
|
145
|
+
/**
|
146
|
+
Returns the localized metric value for the specified key. A metric is a
|
147
|
+
single value intended to be used in your interface’s layout, such as
|
148
|
+
"Button.Confirm.Width" = 100.
|
149
|
+
|
150
|
+
If you would like to return a set of metrics for use in a layout hash, you
|
151
|
+
may prefer to use the locLayout() method instead.
|
152
|
+
|
153
|
+
@param str {String} key
|
154
|
+
@returns {Number} the localized metric
|
155
|
+
*/
|
156
|
+
locMetric: function(key) {
|
157
|
+
var K = SC.Locale,
|
158
|
+
currentLocale = K.currentLocale;
|
159
|
+
|
160
|
+
if (!currentLocale) {
|
161
|
+
K.createCurrentLocale();
|
162
|
+
currentLocale = K.currentLocale;
|
163
|
+
}
|
164
|
+
return currentLocale.locMetric(key);
|
165
|
+
},
|
166
|
+
|
167
|
+
/**
|
168
|
+
Creates and returns a new hash suitable for use as an SC.View’s 'layout'
|
169
|
+
hash. This hash will be created by looking for localized metrics following
|
170
|
+
a pattern based on the “base key” you specify.
|
171
|
+
|
172
|
+
For example, if you specify "Button.Confirm", the following metrics will be
|
173
|
+
used if they are defined:
|
174
|
+
|
175
|
+
Button.Confirm.left
|
176
|
+
Button.Confirm.top
|
177
|
+
Button.Confirm.right
|
178
|
+
Button.Confirm.bottom
|
179
|
+
Button.Confirm.width
|
180
|
+
Button.Confirm.height
|
181
|
+
Button.Confirm.midWidth
|
182
|
+
Button.Confirm.minHeight
|
183
|
+
Button.Confirm.centerX
|
184
|
+
Button.Confirm.centerY
|
185
|
+
|
186
|
+
Additionally, you can optionally specify a hash which will be merged on top
|
187
|
+
of the returned hash. For example, if you wish to allow a button’s width
|
188
|
+
to be configurable per-locale, but always wish for it to be centered
|
189
|
+
vertically and horizontally, you can call:
|
190
|
+
|
191
|
+
locLayout("Button.Confirm", {centerX:0, centerY:0})
|
192
|
+
|
193
|
+
…so that you can combine both localized and non-localized elements in the
|
194
|
+
returned hash. (An exception will be thrown if there is a locale-specific
|
195
|
+
key that matches a key specific in this hash.)
|
196
|
+
|
197
|
+
|
198
|
+
For example, if your locale defines:
|
199
|
+
|
200
|
+
Button.Confirm.left
|
201
|
+
Button.Confirm.top
|
202
|
+
Button.Confirm.right
|
203
|
+
Button.Confirm.bottom
|
204
|
+
|
205
|
+
|
206
|
+
…then these two code snippets will produce the same result:
|
207
|
+
|
208
|
+
layout: {
|
209
|
+
left: "Button.Confirm.left".locMetric(),
|
210
|
+
top: "Button.Confirm.top".locMetric(),
|
211
|
+
right: "Button.Confirm.right".locMetric(),
|
212
|
+
bottom: "Button.Confirm.bottom".locMetric()
|
213
|
+
}
|
214
|
+
|
215
|
+
layout: "Button.Confirm".locLayout()
|
216
|
+
|
217
|
+
The former is slightly more efficient because it doesn’t have to iterate
|
218
|
+
through the possible localized layout keys, but in virtually all situations
|
219
|
+
you will likely wish to use the latter.
|
220
|
+
|
221
|
+
@param str {String} key
|
222
|
+
@param {str} (optional) additionalHash
|
223
|
+
@param {String} (optional) additionalHash
|
224
|
+
@returns {Number} the localized metric
|
225
|
+
*/
|
226
|
+
locLayout: function(key, additionalHash) {
|
227
|
+
var K = SC.Locale,
|
228
|
+
currentLocale = K.currentLocale;
|
229
|
+
|
230
|
+
if (!currentLocale) {
|
231
|
+
K.createCurrentLocale();
|
232
|
+
currentLocale = K.currentLocale;
|
233
|
+
}
|
234
|
+
return currentLocale.locLayout(key, additionalHash);
|
235
|
+
},
|
236
|
+
|
145
237
|
/**
|
146
238
|
Works just like loc() except that it will return the passed default
|
147
239
|
string if a matching key is not found.
|
@@ -163,7 +255,7 @@ SC.mixin(SC.String, {
|
|
163
255
|
|
164
256
|
return SC.String.fmt(localized, args);
|
165
257
|
},
|
166
|
-
|
258
|
+
|
167
259
|
/**
|
168
260
|
Removes any extra whitespace from the edges of the string. This method is
|
169
261
|
also aliased as strip().
|
@@ -214,9 +306,17 @@ if(String.prototype.trim) {
|
|
214
306
|
// We want the version defined here, not in Runtime
|
215
307
|
SC.mixin(String.prototype,
|
216
308
|
/** @scope String.prototype */ {
|
217
|
-
|
309
|
+
|
218
310
|
loc: function() {
|
219
311
|
return SC.String.loc(this.toString(), SC.$A(arguments));
|
312
|
+
},
|
313
|
+
|
314
|
+
locMetric: function() {
|
315
|
+
return SC.String.locMetric(this.toString());
|
316
|
+
},
|
317
|
+
|
318
|
+
locLayout: function(additionalHash) {
|
319
|
+
return SC.String.locLayout(this.toString(), additionalHash);
|
220
320
|
}
|
221
321
|
|
222
322
|
});
|
@@ -23,21 +23,6 @@
|
|
23
23
|
by SC.View when you name a theme that doesn't actually exist: it creates
|
24
24
|
a theme based on the parent theme.
|
25
25
|
|
26
|
-
Renderers
|
27
|
-
---------------------------
|
28
|
-
Themes are used to keep track of theme class names and, more important,
|
29
|
-
to keep track of renderers.
|
30
|
-
|
31
|
-
Renderers are added to a theme using theme.addRenderer(theRenderer). After
|
32
|
-
this has been done, they may be instantiated using theme.renderer(rendererName).
|
33
|
-
|
34
|
-
Instantiating with renderer() instantiates a version of that renderer
|
35
|
-
specialized for this specific theme-- not any parent themes. The renderer
|
36
|
-
will include all class names for _this_ theme. This means that you can
|
37
|
-
theme controls differently without overriding any renderers: just subclass
|
38
|
-
the original theme that _has_ the renderers, give it its own name, and
|
39
|
-
all renderers will render with that name as a class name.
|
40
|
-
|
41
26
|
Locating Child Themes
|
42
27
|
----------------------------
|
43
28
|
Locating child themes is relatively simple for the most part: it looks in
|
@@ -51,7 +36,7 @@
|
|
51
36
|
base classes; if the theme is a global theme, those class names should not
|
52
37
|
be included.
|
53
38
|
|
54
|
-
This makes sense logically as well, because when searching for a
|
39
|
+
This makes sense logically as well, because when searching for a render delegate,
|
55
40
|
it will locate it in any base theme that has it, but that doesn't mean
|
56
41
|
class names from the derived theme shouldn't be included.
|
57
42
|
|
@@ -143,10 +128,6 @@ SC.Theme = {
|
|
143
128
|
// method.
|
144
129
|
result._privateThemes = {};
|
145
130
|
|
146
|
-
// the theme also specializes all renderers it creates so that they
|
147
|
-
// have the theme's classNames and have their 'theme' property set.
|
148
|
-
result._specializedRenderers = {};
|
149
|
-
|
150
131
|
// also, the theme specializes all child themes as they are created
|
151
132
|
// to ensure that all of the class names on this theme are included.
|
152
133
|
result._specializedThemes = {};
|
@@ -263,40 +244,6 @@ SC.Theme = {
|
|
263
244
|
*/
|
264
245
|
addTheme: function(theme) {
|
265
246
|
this.themes[theme.name] = theme;
|
266
|
-
},
|
267
|
-
|
268
|
-
/**
|
269
|
-
Adds a renderer to the theme. The renderer's name will be used to
|
270
|
-
keep track of it and identify it later.
|
271
|
-
|
272
|
-
The biggest responsibility of addRenderer is to ensure that renderer()
|
273
|
-
can be used to instantiate that renderer. If a renderer is not instantiated
|
274
|
-
through renderer(), it will not know its theme's classNames.
|
275
|
-
*/
|
276
|
-
addRenderer: function(renderer) {
|
277
|
-
this[renderer.name] = renderer;
|
278
|
-
},
|
279
|
-
|
280
|
-
/**
|
281
|
-
Finds the named renderer and instantiates it, returning the result.
|
282
|
-
It also ensures it is using a version of the renderer specialized for
|
283
|
-
this theme. It keeps a cache of specialized versions of the renderer.
|
284
|
-
|
285
|
-
Any arguments after the name are passed on to the instantiated
|
286
|
-
renderer.
|
287
|
-
*/
|
288
|
-
renderer: function(name) {
|
289
|
-
var renderer = this._specializedRenderers[name], base = this[name];
|
290
|
-
if (!renderer || renderer._specializedFrom !== base) {
|
291
|
-
if (!base) return null;
|
292
|
-
|
293
|
-
renderer = base.extend({ classNames: this.classNames, theme: this });
|
294
|
-
}
|
295
|
-
|
296
|
-
var args = SC.$A(arguments);
|
297
|
-
args.shift();
|
298
|
-
renderer = renderer.create.apply(renderer, args);
|
299
|
-
return renderer;
|
300
247
|
}
|
301
248
|
};
|
302
249
|
|
@@ -304,8 +251,8 @@ SC.Theme = {
|
|
304
251
|
// optimal, but the reasoning is because of test running: the
|
305
252
|
// test runner, when running foundation unit tests, cannot load
|
306
253
|
// the theme. As such, foundation must include default versions of
|
307
|
-
// all of its
|
308
|
-
// controls have
|
254
|
+
// all of its render delegates, and it does so in BaseTheme. All SproutCore
|
255
|
+
// controls have render delegates in BaseTheme.
|
309
256
|
SC.BaseTheme = SC.Theme.create({
|
310
257
|
name: '' // it is a base class, and doesn't need a class name or such
|
311
258
|
});
|
@@ -152,8 +152,10 @@ SC.mixin( /** @scope SC */ {
|
|
152
152
|
return result;
|
153
153
|
},
|
154
154
|
|
155
|
-
/**
|
156
|
-
|
155
|
+
/**
|
156
|
+
@deprecated Use SC.offset instead.
|
157
|
+
|
158
|
+
SC.offset() is more accurate, more flexible in the value for the element parameter and
|
157
159
|
easier to understand.
|
158
160
|
|
159
161
|
@param el The DOM element
|
@@ -0,0 +1,59 @@
|
|
1
|
+
// ==========================================================================
|
2
|
+
// Project: SproutCore - JavaScript Application Framework
|
3
|
+
// Copyright: ©2006-2011 Strobe Inc. and contributors.
|
4
|
+
// Portions ©2008-2011 Apple Inc. All rights reserved.
|
5
|
+
// License: Licensed under MIT license (see license.js)
|
6
|
+
// ==========================================================================
|
7
|
+
|
8
|
+
var content, newContent, controller, destroyCount;
|
9
|
+
|
10
|
+
// ..........................................................
|
11
|
+
// SINGLE OBSERVABLE OBJECT
|
12
|
+
//
|
13
|
+
|
14
|
+
SC.TestObject = SC.Object.extend();
|
15
|
+
|
16
|
+
SC.TestObject.reopen({
|
17
|
+
destroy: function() {
|
18
|
+
destroyCount = 1;
|
19
|
+
}
|
20
|
+
});
|
21
|
+
|
22
|
+
module("SC.ObjectController - content destroyed", {
|
23
|
+
setup: function() {
|
24
|
+
content = SC.TestObject.create({
|
25
|
+
foo: "foo1", bar: "bar1"
|
26
|
+
});
|
27
|
+
newContent = SC.Object.create({
|
28
|
+
foo: "foo2"
|
29
|
+
});
|
30
|
+
destroyCount = 0;
|
31
|
+
console.log('SSSSS');
|
32
|
+
controller = SC.ObjectController.create({
|
33
|
+
destroyContentOnReplace: YES,
|
34
|
+
content: content
|
35
|
+
});
|
36
|
+
},
|
37
|
+
|
38
|
+
teardown: function() {
|
39
|
+
controller.destroy();
|
40
|
+
}
|
41
|
+
});
|
42
|
+
|
43
|
+
test("Setting content should call 'destroy' on old content if destroyContentOnReplace has been set", function() {
|
44
|
+
controller.set('content', newContent);
|
45
|
+
equals(destroyCount, 1, 'destroyCount');
|
46
|
+
equals(controller.getPath('content.foo'), 'foo2');
|
47
|
+
});
|
48
|
+
|
49
|
+
test("Setting content should NOT call 'destroy' on old content if destroyContentOnReplace has not been set", function() {
|
50
|
+
controller.set('destroyContentOnReplace', NO);
|
51
|
+
controller.set('content', newContent);
|
52
|
+
equals(destroyCount, 0, 'destroyCount');
|
53
|
+
equals(controller.getPath('content.foo'), 'foo2');
|
54
|
+
});
|
55
|
+
|
56
|
+
test("Setting content should NOT call 'destroy' if set to the same object", function() {
|
57
|
+
controller.set('content', content);
|
58
|
+
equals(destroyCount, 0, 'destroyCount');
|
59
|
+
});
|
@@ -4,7 +4,7 @@
|
|
4
4
|
// ©2008-2011 Apple Inc. All rights reserved.
|
5
5
|
// License: Licensed under MIT license (see license.js)
|
6
6
|
// ==========================================================================
|
7
|
-
/*global module test equals context ok same */
|
7
|
+
/*global module test equals context ok same should_throw*/
|
8
8
|
var LocaleObject;
|
9
9
|
|
10
10
|
module('SC.Object', {
|
@@ -26,6 +26,13 @@ module('SC.Object', {
|
|
26
26
|
'Test': '%@',
|
27
27
|
'Test.Multiple': '%@ %@'
|
28
28
|
});
|
29
|
+
|
30
|
+
SC.metricsFor('English', {
|
31
|
+
'Button.left': 10,
|
32
|
+
'Button.top': 20,
|
33
|
+
'Button.width': 80,
|
34
|
+
'Button.height': 30
|
35
|
+
});
|
29
36
|
}
|
30
37
|
});
|
31
38
|
|
@@ -76,3 +83,36 @@ test("Localize a string even if localized version is empty", function() {
|
|
76
83
|
equals("empty".locWithDefault("Empty"), "", "Using String.prototype.locWithDefault");
|
77
84
|
equals(SC.String.locWithDefault("empty", "Empty"), "", "Using SC.String.locWithDefault");
|
78
85
|
});
|
86
|
+
|
87
|
+
test("Access a localized metric", function() {
|
88
|
+
equals(10, "Button.left".locMetric());
|
89
|
+
equals(20, "Button.top".locMetric());
|
90
|
+
equals(undefined, "Button.notThere".locMetric());
|
91
|
+
});
|
92
|
+
|
93
|
+
test("Access a localized layout hash", function() {
|
94
|
+
// Simple case (if we ever get a full hash comparison function, we should use
|
95
|
+
// it here).
|
96
|
+
var layout = "Button".locLayout();
|
97
|
+
equals(10, layout.left);
|
98
|
+
equals(20, layout.top);
|
99
|
+
equals(80, layout.width);
|
100
|
+
equals(30, layout.height);
|
101
|
+
equals(undefined, layout.right); // No localized key
|
102
|
+
|
103
|
+
|
104
|
+
// Slightly more involved case: allow the user to specify an additional hash.
|
105
|
+
layout = "Button".locLayout({right:50});
|
106
|
+
equals(10, layout.left);
|
107
|
+
equals(20, layout.top);
|
108
|
+
equals(80, layout.width);
|
109
|
+
equals(30, layout.height);
|
110
|
+
equals(50, layout.right); // No localized key
|
111
|
+
|
112
|
+
|
113
|
+
// Sanity-check case: Since we have both a localized key for 'left' and we'll
|
114
|
+
// pass it in, an exception should be thrown.
|
115
|
+
should_throw(function() {
|
116
|
+
"Button".locLayout({left:10});
|
117
|
+
}, Error, "locLayout(): There is a localized value for the key 'Button.left' but a value for 'left' was also specified in the non-localized hash");
|
118
|
+
});
|