sproutcore 1.8.2.1 → 1.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION.yml +2 -2
- data/lib/buildtasks/helpers/file_rule_list.rb +3 -3
- data/lib/frameworks/sproutcore/Buildfile +1 -1
- data/lib/frameworks/sproutcore/CHANGELOG.md +235 -16
- data/lib/frameworks/sproutcore/apps/media_examples/Buildfile +13 -0
- data/lib/frameworks/sproutcore/apps/media_examples/core.js +35 -0
- data/lib/frameworks/sproutcore/apps/media_examples/resources/loading.rhtml +3 -0
- data/lib/frameworks/sproutcore/apps/media_examples/resources/main_page.js +53 -0
- data/lib/frameworks/sproutcore/apps/media_examples/views/audio_view.js +100 -0
- data/lib/frameworks/sproutcore/apps/media_examples/views/camera_view.js +39 -0
- data/lib/frameworks/sproutcore/apps/media_examples/views/capabilities_view.js +116 -0
- data/lib/frameworks/sproutcore/apps/media_examples/views/microphone_view.js +40 -0
- data/lib/frameworks/sproutcore/apps/media_examples/views/video_view.js +107 -0
- data/lib/frameworks/sproutcore/apps/showcase/Buildfile +11 -0
- data/lib/frameworks/sproutcore/apps/showcase/README +15 -0
- data/lib/frameworks/sproutcore/apps/showcase/controllers/source_controller.js +15 -0
- data/lib/frameworks/sproutcore/apps/showcase/controllers/source_tree_controller.js +212 -0
- data/lib/frameworks/sproutcore/apps/showcase/core.js +170 -0
- data/lib/frameworks/sproutcore/apps/showcase/main.js +27 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/_theme.css +18 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/api.css +80 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/favicon.ico +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/alarm-clock.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/balloon-facebook.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/balloon-twitter.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/balloon.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/bullet.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/calendar-insert.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/cross.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/example-box-bg.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/fruit-grape.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/fruit-lime.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/fruit-orange.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/fruit.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/glow.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/green-dot.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/grey-dot.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/logo.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/pixels.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/red-dot.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/sproutcore-logo.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/sproutcore-startup-landscape.jpg +0 -0
- data/lib/frameworks/sproutcore/apps/{test_controls → showcase}/resources/loading.rhtml +1 -1
- data/lib/frameworks/sproutcore/apps/showcase/resources/main_page.js +61 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/stylesheet.css +365 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/views_page.js +64 -0
- data/lib/frameworks/sproutcore/apps/showcase/system/views_item_content.js +59 -0
- data/lib/frameworks/sproutcore/apps/showcase/theme.js +27 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/button_views.js +55 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/checkbox_views.js +34 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/container_views.js +29 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/date_field_views.js +30 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/disclosure_views.js +22 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/grid_views.js +28 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/image_button_views.js +22 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/image_views.js +51 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/label_views.js +53 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/list_views.js +31 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/popup_button_views.js +24 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/progress_views.js +26 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/radio_views.js +30 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/scroll_views.js +40 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/segmented_views.js +90 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/select_views.js +64 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/slider_views.js +46 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/source_list_views.js +23 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/split_views.js +22 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/stacked_views.js +23 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/static_content_views.js +23 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/tab_views.js +51 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/text_field_views.js +52 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/toolbar_views.js +23 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/views_item_view.js +91 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/views_list_view.js +67 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/web_views.js +32 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/well_views.js +29 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/workspace_views.js +23 -0
- data/lib/frameworks/sproutcore/apps/tests/english.lproj/strings.js +2 -1
- data/lib/frameworks/sproutcore/frameworks/ajax/system/request.js +91 -51
- data/lib/frameworks/sproutcore/frameworks/ajax/system/response.js +93 -27
- data/lib/frameworks/sproutcore/frameworks/ajax/tests/system/request.js +196 -15
- data/lib/frameworks/sproutcore/frameworks/bootstrap/system/browser.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/array.js +26 -10
- data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/object.js +90 -92
- data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/object.js +69 -39
- data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/selection_support.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/color.js +769 -0
- data/lib/frameworks/sproutcore/frameworks/{desktop → core_foundation}/system/key_bindings.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/render_context.js +4 -4
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/req_anim_frame.js +31 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/sparse_array.js +7 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/utils.js +8 -6
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/array_case.js +49 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/selection_support.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/ext/object_test.js +106 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/color.js +448 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/escape_html.js +8 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/timer/invokeLater.js +24 -24
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/utils/offset.js +5 -5
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/animation.js +90 -30
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/class_name_bindings_test.js +14 -6
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/touch.js +113 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +64 -8
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/animation.js +20 -4
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout_style.js +58 -38
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/touch.js +32 -39
- data/lib/frameworks/sproutcore/frameworks/core_tools/models/target.js +20 -15
- data/lib/frameworks/sproutcore/frameworks/datastore/models/child_attribute.js +19 -15
- data/lib/frameworks/sproutcore/frameworks/datastore/models/child_record.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/models/children_attribute.js +16 -16
- data/lib/frameworks/sproutcore/frameworks/datastore/models/many_attribute.js +32 -32
- data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +53 -38
- data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +9 -8
- data/lib/frameworks/sproutcore/frameworks/datastore/models/single_attribute.js +26 -26
- data/lib/frameworks/sproutcore/frameworks/datastore/system/child_array.js +1 -3
- data/lib/frameworks/sproutcore/frameworks/datastore/system/query.js +4 -3
- data/lib/frameworks/sproutcore/frameworks/datastore/system/record_array.js +0 -4
- data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +96 -8
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/datetime_recordattribute.js +22 -4
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/data_store.js +24 -24
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record.js +376 -37
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array.js +51 -53
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array_complex.js +108 -66
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_complex.js +33 -35
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/single_attribute.js +6 -4
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/compare.js +33 -3
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/createRecord.js +181 -15
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/system/datetime.js +6 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/border.js +3 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_fast_path.js +2 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/menu.js +153 -6
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/modal.js +39 -18
- data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drop_target.js +2 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/disclosure.js +6 -7
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/progress.js +139 -50
- data/lib/frameworks/sproutcore/frameworks/{foundation → desktop}/resources/button_view.css +3 -3
- data/lib/frameworks/sproutcore/frameworks/{foundation → desktop}/resources/checkbox_view.css +4 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/resources/disclosure.css +2 -2
- data/lib/frameworks/sproutcore/frameworks/{foundation → desktop}/resources/radio_view.css +0 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/resources/segmented.css +23 -17
- data/lib/frameworks/sproutcore/frameworks/desktop/resources/web.css +5 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/integration/dialog.js +4 -5
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/mixins/border.js +3 -12
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/mixins/collection_fast_path.js +58 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/methods.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/ui.js +79 -12
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/mouse.js +13 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/date_field/ui.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/grid/drag_and_drop.js +147 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/grid/methods.js +123 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/drag_and_drop.js +150 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list_item.js +58 -44
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/progress/methods.js +9 -80
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +54 -130
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/observers.js +78 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +64 -9
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select/methods.js +11 -11
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select/ui.js +28 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/slider/methods.js +74 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/slider/ui.js +141 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +4 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/views/grid.js +69 -36
- data/lib/frameworks/sproutcore/frameworks/desktop/views/list.js +27 -11
- data/lib/frameworks/sproutcore/frameworks/desktop/views/list_item.js +41 -25
- data/lib/frameworks/sproutcore/frameworks/desktop/views/progress.js +51 -89
- data/lib/frameworks/sproutcore/frameworks/desktop/views/segmented.js +59 -34
- data/lib/frameworks/sproutcore/frameworks/desktop/views/select.js +59 -49
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/scroll.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/controllers/tree.js +4 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/label.js +14 -14
- data/lib/frameworks/sproutcore/frameworks/foundation/resources/label.css +8 -8
- data/lib/frameworks/sproutcore/frameworks/foundation/resources/text_field.css +13 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/system/user_defaults.js +4 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/colors.js +21 -22
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/controllers/tree/selection_support.js +26 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/beginEditing.js +4 -5
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/image_queue.js +68 -44
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/user_defaults.js +10 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/container/methods.js +0 -10
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/container/ui.js +24 -59
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/label/ui.js +47 -34
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/methods.js +96 -12
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +38 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +38 -50
- data/lib/frameworks/sproutcore/frameworks/jquery/jquery-buffer.js +6 -2
- data/lib/frameworks/sproutcore/frameworks/media/media_capabilities.js +211 -0
- data/lib/frameworks/sproutcore/frameworks/media/render_delegates/media_slider.js +77 -0
- data/lib/frameworks/sproutcore/frameworks/media/resources/playeras3.fla +0 -0
- data/lib/frameworks/sproutcore/frameworks/media/resources/video.css +129 -115
- data/lib/frameworks/sproutcore/frameworks/media/resources/videoCanvas.swf +0 -0
- data/lib/frameworks/sproutcore/frameworks/media/tests/media_capabilities.js +194 -0
- data/lib/frameworks/sproutcore/frameworks/media/views/audio.js +56 -173
- data/lib/frameworks/sproutcore/frameworks/media/views/controls.js +15 -18
- data/lib/frameworks/sproutcore/frameworks/media/views/media_slider.js +63 -219
- data/lib/frameworks/sproutcore/frameworks/media/views/mini_controls.js +4 -2
- data/lib/frameworks/sproutcore/frameworks/media/views/simple_controls.js +4 -8
- data/lib/frameworks/sproutcore/frameworks/media/views/video.js +51 -160
- data/lib/frameworks/sproutcore/frameworks/routing/system/routes.js +138 -102
- data/lib/frameworks/sproutcore/frameworks/routing/tests/system/routes.js +8 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/core.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/ext/array.js +8 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +32 -12
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +28 -24
- data/lib/frameworks/sproutcore/frameworks/runtime/system/binding.js +0 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +111 -12
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/compare.js +9 -7
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/array.js +8 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/enumerable/enumerable.js +160 -115
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/enhance.js +64 -19
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/mixin.js +83 -0
- data/lib/frameworks/sproutcore/frameworks/template_view/ext/handlebars/bind.js +3 -0
- data/lib/frameworks/sproutcore/frameworks/template_view/tests/views/template/collection.js +13 -0
- data/lib/frameworks/sproutcore/frameworks/template_view/tests/views/template/handlebars.js +4 -2
- data/lib/frameworks/sproutcore/frameworks/template_view/views/template_collection.js +5 -5
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/18px/button.css +5 -1
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/44px/button.css +13 -12
- data/lib/frameworks/sproutcore/themes/ace/resources/collection/normal/list.css +9 -2
- data/lib/frameworks/sproutcore/themes/ace/resources/progress/ace/progress.css +105 -5
- data/lib/frameworks/sproutcore/themes/ace/resources/progress/ace/progress_view_indeterminate_content.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/18px/segmented.css +19 -15
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented.css +93 -21
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented_vertical_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented_vertical_normal.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented_vertical_selected.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented_vertical_selected_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented.css +91 -15
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented_vertical_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented_vertical_normal.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented_vertical_selected.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented_vertical_selected_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/44px/segmented.css +21 -17
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/segmented.css +26 -25
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/menu_item_view.css +2 -4
- data/lib/sproutcore/helpers/minifier.rb +5 -5
- data/lib/sproutcore/tools/build.rb +1 -1
- data/sproutcore.gemspec +6 -1
- data/vendor/chance/lib/chance/instance/slicing.rb +2 -2
- metadata +143 -60
- data/lib/frameworks/sproutcore/apps/test_controls/Buildfile +0 -0
- data/lib/frameworks/sproutcore/apps/test_controls/controllers/alert.js +0 -39
- data/lib/frameworks/sproutcore/apps/test_controls/controllers/buttons.js +0 -21
- data/lib/frameworks/sproutcore/apps/test_controls/controllers/categories.js +0 -125
- data/lib/frameworks/sproutcore/apps/test_controls/controllers/category.js +0 -36
- data/lib/frameworks/sproutcore/apps/test_controls/controllers/select.js +0 -12
- data/lib/frameworks/sproutcore/apps/test_controls/controllers/split.js +0 -74
- data/lib/frameworks/sproutcore/apps/test_controls/core.js +0 -29
- data/lib/frameworks/sproutcore/apps/test_controls/main.js +0 -14
- data/lib/frameworks/sproutcore/apps/test_controls/resources/buttons_page.js +0 -158
- data/lib/frameworks/sproutcore/apps/test_controls/resources/checkboxes_page.js +0 -53
- data/lib/frameworks/sproutcore/apps/test_controls/resources/flow_layout_page.js +0 -85
- data/lib/frameworks/sproutcore/apps/test_controls/resources/list_page.js +0 -40
- data/lib/frameworks/sproutcore/apps/test_controls/resources/main_page.css +0 -60
- data/lib/frameworks/sproutcore/apps/test_controls/resources/main_page.js +0 -151
- data/lib/frameworks/sproutcore/apps/test_controls/resources/panels_page.js +0 -62
- data/lib/frameworks/sproutcore/apps/test_controls/resources/progress_page.js +0 -33
- data/lib/frameworks/sproutcore/apps/test_controls/resources/radio_page.js +0 -55
- data/lib/frameworks/sproutcore/apps/test_controls/resources/scroll_page.js +0 -77
- data/lib/frameworks/sproutcore/apps/test_controls/resources/segmented_page.js +0 -99
- data/lib/frameworks/sproutcore/apps/test_controls/resources/select_page.js +0 -75
- data/lib/frameworks/sproutcore/apps/test_controls/resources/sliders_page.js +0 -54
- data/lib/frameworks/sproutcore/apps/test_controls/resources/split_page.js +0 -141
- data/lib/frameworks/sproutcore/apps/test_controls/resources/strings.js +0 -50
- data/lib/frameworks/sproutcore/apps/test_controls/resources/tab_page.js +0 -53
- data/lib/frameworks/sproutcore/apps/test_controls/resources/text_field_page.js +0 -65
- data/lib/frameworks/sproutcore/apps/test_controls/theme.js +0 -34
- data/lib/frameworks/sproutcore/apps/tests/tests/controllers/detail.js +0 -15
- data/lib/frameworks/sproutcore/apps/tests/tests/controllers/source.js +0 -15
- data/lib/frameworks/sproutcore/apps/tests/tests/controllers/target.js +0 -15
- data/lib/frameworks/sproutcore/apps/tests/tests/controllers/targets.js +0 -15
- data/lib/frameworks/sproutcore/apps/tests/tests/controllers/tests.js +0 -15
- data/lib/frameworks/sproutcore/apps/tests/tests/models/target.js +0 -15
- data/lib/frameworks/sproutcore/apps/tests/tests/models/test.js +0 -15
- data/lib/frameworks/sproutcore/apps/tests/tests/views/offset_checkbox.js +0 -15
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/console.js +0 -21
@@ -373,7 +373,7 @@ SC.Response = SC.Object.extend(
|
|
373
373
|
Will notify each listener. Returns true if any of the listeners handle.
|
374
374
|
*/
|
375
375
|
_notifyListeners: function(listeners, status) {
|
376
|
-
var notifiers = listeners[status],
|
376
|
+
var notifiers = listeners[status], args, target, action;
|
377
377
|
if (!notifiers) { return NO; }
|
378
378
|
|
379
379
|
var handled = NO;
|
@@ -381,14 +381,14 @@ SC.Response = SC.Object.extend(
|
|
381
381
|
|
382
382
|
for (var i = 0; i < len; i++) {
|
383
383
|
var notifier = notifiers[i];
|
384
|
-
|
385
|
-
|
384
|
+
args = (notifier.args || []).copy();
|
385
|
+
args.unshift(this);
|
386
386
|
|
387
387
|
target = notifier.target;
|
388
388
|
action = notifier.action;
|
389
389
|
if (SC.typeOf(action) === SC.T_STRING) { action = target[action]; }
|
390
390
|
|
391
|
-
handled = action.apply(target,
|
391
|
+
handled = action.apply(target, args);
|
392
392
|
}
|
393
393
|
|
394
394
|
return handled;
|
@@ -498,24 +498,60 @@ SC.XHRResponse = SC.Response.extend(
|
|
498
498
|
this.set('rawRequest', null);
|
499
499
|
},
|
500
500
|
|
501
|
+
|
501
502
|
/**
|
502
503
|
Starts the transport of the request
|
503
504
|
|
504
505
|
@returns {XMLHttpRequest|ActiveXObject}
|
505
506
|
*/
|
506
507
|
invokeTransport: function() {
|
507
|
-
var
|
508
|
+
var listener, listeners, listenersForKey,
|
509
|
+
rawRequest,
|
510
|
+
request = this.get('request'),
|
511
|
+
transport, handleReadyStateChange, async, headers;
|
508
512
|
|
509
513
|
rawRequest = this.createRequest();
|
510
514
|
this.set('rawRequest', rawRequest);
|
511
515
|
|
512
|
-
|
513
|
-
async = !!
|
516
|
+
// configure async callback - differs per browser...
|
517
|
+
async = !!request.get('isAsynchronous');
|
514
518
|
|
515
519
|
if (async) {
|
516
|
-
if (
|
517
|
-
|
518
|
-
|
520
|
+
if (window.XMLHttpRequestProgressEvent) {
|
521
|
+
// XMLHttpRequest Level 2
|
522
|
+
|
523
|
+
// Add progress event listeners that were specified on the request.
|
524
|
+
listeners = request.get("listeners");
|
525
|
+
if (listeners) {
|
526
|
+
for (var key in listeners) {
|
527
|
+
|
528
|
+
// Make sure the key is not an HTTP numeric status code.
|
529
|
+
if (isNaN(parseInt(key, 10))) {
|
530
|
+
// We still allow multiple notifiers on progress events, but we
|
531
|
+
// don't try to optimize this by using a single listener, because
|
532
|
+
// it is highly unlikely that the developer will add duplicate
|
533
|
+
// progress event notifiers and if they did, it is also unlikely
|
534
|
+
// that they would expect them to cascade in the way that the
|
535
|
+
// status code notifiers do.
|
536
|
+
listenersForKey = listeners[key];
|
537
|
+
for (var i = 0, len = listenersForKey.length; i < len; i++) {
|
538
|
+
listener = listenersForKey[i];
|
539
|
+
|
540
|
+
var keyTarget = key.split('.');
|
541
|
+
if (SC.none(keyTarget[1])) {
|
542
|
+
SC.Event.add(rawRequest, keyTarget[0], listener.target, listener.action, listener.args);
|
543
|
+
} else {
|
544
|
+
SC.Event.add(rawRequest[keyTarget[0]], keyTarget[1], listener.target, listener.action, listener.args);
|
545
|
+
}
|
546
|
+
}
|
547
|
+
}
|
548
|
+
}
|
549
|
+
}
|
550
|
+
|
551
|
+
SC.Event.add(rawRequest, 'loadend', this, this.finishRequest);
|
552
|
+
} else if (window.XMLHttpRequest) {
|
553
|
+
// XMLHttpRequest Level 1
|
554
|
+
SC.Event.add(rawRequest, 'readystatechange', this, this.finishRequest);
|
519
555
|
} else {
|
520
556
|
transport = this;
|
521
557
|
handleReadyStateChange = function() {
|
@@ -554,21 +590,22 @@ SC.XHRResponse = SC.Response.extend(
|
|
554
590
|
@returns {XMLHttpRequest|ActiveXObject}
|
555
591
|
*/
|
556
592
|
createRequest: function() {
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
593
|
+
var rawRequest;
|
594
|
+
|
595
|
+
// check native support first
|
596
|
+
if (window.XMLHttpRequest) {
|
597
|
+
rawRequest = new XMLHttpRequest();
|
598
|
+
} else {
|
599
|
+
// There are two relevant Microsoft MSXML object types.
|
600
|
+
// See here for more information:
|
601
|
+
// http://www.snook.ca/archives/javascript/xmlhttprequest_activex_ie/
|
602
|
+
// http://blogs.msdn.com/b/xmlteam/archive/2006/10/23/using-the-right-version-of-msxml-in-internet-explorer.aspx
|
603
|
+
// http://msdn.microsoft.com/en-us/library/windows/desktop/ms763742(v=vs.85).aspx
|
604
|
+
try { rawRequest = new ActiveXObject("MSXML2.XMLHTTP.6.0"); } catch(e) {}
|
605
|
+
try { if (!rawRequest) rawRequest = new ActiveXObject("MSXML2.XMLHTTP"); } catch(e) {}
|
565
606
|
}
|
566
607
|
|
567
|
-
return
|
568
|
-
function() { return new XMLHttpRequest(); },
|
569
|
-
function() { return new ActiveXObject('Msxml2.XMLHTTP'); },
|
570
|
-
function() { return new ActiveXObject('Microsoft.XMLHTTP'); }
|
571
|
-
);
|
608
|
+
return rawRequest;
|
572
609
|
},
|
573
610
|
|
574
611
|
/**
|
@@ -580,9 +617,11 @@ SC.XHRResponse = SC.Response.extend(
|
|
580
617
|
@returns {Boolean} YES if completed, NO otherwise
|
581
618
|
*/
|
582
619
|
finishRequest: function(evt) {
|
583
|
-
var
|
584
|
-
|
585
|
-
|
620
|
+
var listener, listeners, listenersForKey,
|
621
|
+
rawRequest = this.get('rawRequest'),
|
622
|
+
readyState = rawRequest.readyState,
|
623
|
+
request,
|
624
|
+
error, status, msg;
|
586
625
|
|
587
626
|
if (readyState === 4 && !this.get('timedOut')) {
|
588
627
|
this.receive(function(proceed) {
|
@@ -614,7 +653,34 @@ SC.XHRResponse = SC.Response.extend(
|
|
614
653
|
}, this);
|
615
654
|
|
616
655
|
// Avoid memory leaks
|
617
|
-
if (
|
656
|
+
if (window.XMLHttpRequestProgressEvent) {
|
657
|
+
// XMLHttpReqeust Level 2
|
658
|
+
|
659
|
+
SC.Event.remove(rawRequest, 'loadend', this, this.finishRequest);
|
660
|
+
|
661
|
+
request = this.get('request');
|
662
|
+
listeners = request.get("listeners");
|
663
|
+
if (listeners) {
|
664
|
+
for (var key in listeners) {
|
665
|
+
|
666
|
+
// Make sure the key is not an HTTP numeric status code.
|
667
|
+
if (isNaN(parseInt(key, 10))) {
|
668
|
+
listenersForKey = listeners[key];
|
669
|
+
for (var i = 0, len = listenersForKey.length; i < len; i++) {
|
670
|
+
listener = listenersForKey[i];
|
671
|
+
|
672
|
+
var keyTarget = key.split('.');
|
673
|
+
if (SC.none(keyTarget[1])) {
|
674
|
+
SC.Event.remove(rawRequest, keyTarget[0], listener.target, listener.action, listener.args);
|
675
|
+
} else {
|
676
|
+
SC.Event.remove(rawRequest[keyTarget[0]], keyTarget[1], listener.target, listener.action, listener.args);
|
677
|
+
}
|
678
|
+
}
|
679
|
+
}
|
680
|
+
}
|
681
|
+
}
|
682
|
+
} else if (window.XMLHttpRequest) {
|
683
|
+
// XMLHttpReqeust Level 1
|
618
684
|
SC.Event.remove(rawRequest, 'readystatechange', this, this.finishRequest);
|
619
685
|
} else {
|
620
686
|
rawRequest.onreadystatechange = null;
|
@@ -7,15 +7,15 @@
|
|
7
7
|
// ========================================================================
|
8
8
|
// SC.Request Base Tests
|
9
9
|
// ========================================================================
|
10
|
-
/*globals module test ok isObj equals expects */
|
10
|
+
/*globals module, test, ok, isObj, equals, expects */
|
11
11
|
|
12
12
|
var url, request, contents ;
|
13
13
|
|
14
14
|
module("SC.Request", {
|
15
15
|
|
16
16
|
setup: function() {
|
17
|
-
url = sc_static("file_exists.json");
|
18
|
-
request = SC.Request.getUrl(url)
|
17
|
+
url = sc_static("file_exists.json");
|
18
|
+
request = SC.Request.getUrl(url);
|
19
19
|
contents = null ;
|
20
20
|
},
|
21
21
|
|
@@ -164,14 +164,12 @@ test("Test Multiple Asynchronous GET Request - two immediate, and two in serial"
|
|
164
164
|
}, 2000);
|
165
165
|
});
|
166
166
|
|
167
|
-
/**
|
168
|
-
There are two ways to be notified of request changes:
|
169
167
|
|
170
|
-
|
171
|
-
|
168
|
+
// There are two ways to be notified of request changes:
|
169
|
+
// - Implementing a didReceive function on the SC.Request object
|
170
|
+
// - Registering a listener using notify()
|
171
|
+
// The following two tests test the timeout functionality for each of these.
|
172
172
|
|
173
|
-
The following two tests test the timeout functionality for each of these.
|
174
|
-
*/
|
175
173
|
test("Timeouts - SC.Request didReceive callback", function() {
|
176
174
|
var message;
|
177
175
|
|
@@ -275,8 +273,6 @@ test("Timeouts - Status listener callback", function() {
|
|
275
273
|
});
|
276
274
|
|
277
275
|
test("Test Multiple listeners per single status response", function() {
|
278
|
-
|
279
|
-
|
280
276
|
var numResponses = 0;
|
281
277
|
var response;
|
282
278
|
|
@@ -284,16 +280,16 @@ test("Test Multiple listeners per single status response", function() {
|
|
284
280
|
|
285
281
|
request.notify(200, this, function(response) {
|
286
282
|
numResponses++;
|
287
|
-
ok(true, "
|
283
|
+
ok(true, "Received a response");
|
288
284
|
|
289
|
-
if (numResponses === 2) window.start();
|
285
|
+
if (numResponses === 2) { window.start(); }
|
290
286
|
});
|
291
287
|
|
292
288
|
request.notify(200, this, function(response) {
|
293
289
|
numResponses++;
|
294
|
-
ok(true, "
|
290
|
+
ok(true, "Received a response");
|
295
291
|
|
296
|
-
if (numResponses === 2) window.start();
|
292
|
+
if (numResponses === 2) { window.start(); }
|
297
293
|
});
|
298
294
|
|
299
295
|
response = request.send();
|
@@ -303,3 +299,188 @@ test("Test Multiple listeners per single status response", function() {
|
|
303
299
|
stop() ; // stops the test runner - wait for response
|
304
300
|
});
|
305
301
|
|
302
|
+
|
303
|
+
/**
|
304
|
+
There was a short-lived bug where the additional Arguments passed to notify()
|
305
|
+
were being dropped because the slice on 'arguments' was happening after they
|
306
|
+
had already been adjusted.
|
307
|
+
*/
|
308
|
+
test("Multiple arguments passed to notify()", function() {
|
309
|
+
var response;
|
310
|
+
|
311
|
+
request.notify(this, function(response, a, b, c) {
|
312
|
+
equals(a, 'a', "Listener called with argument 'a'");
|
313
|
+
equals(b, 'b', "Listener called with argument 'b'");
|
314
|
+
equals(c, 'c', "Listener called with argument 'c'");
|
315
|
+
|
316
|
+
window.start();
|
317
|
+
}, 'a', 'b', 'c');
|
318
|
+
|
319
|
+
request.notify(200, this, function(response, a, b, c) {
|
320
|
+
equals(a, 'a', "Listener called with argument 'a'");
|
321
|
+
equals(b, 'b', "Listener called with argument 'b'");
|
322
|
+
equals(c, 'c', "Listener called with argument 'c'");
|
323
|
+
|
324
|
+
window.start();
|
325
|
+
}, 'a', 'b', 'c');
|
326
|
+
|
327
|
+
response = request.send();
|
328
|
+
|
329
|
+
stop() ; // stops the test runner - wait for response
|
330
|
+
});
|
331
|
+
|
332
|
+
|
333
|
+
test("Test event listeners on successful request.", function() {
|
334
|
+
var abort = false,
|
335
|
+
error = false,
|
336
|
+
load = false,
|
337
|
+
loadend = false,
|
338
|
+
loadstart = false,
|
339
|
+
progress = false,
|
340
|
+
response,
|
341
|
+
status,
|
342
|
+
timeout = false;
|
343
|
+
|
344
|
+
request.notify("loadstart", this, function(evt) {
|
345
|
+
loadstart = true;
|
346
|
+
});
|
347
|
+
|
348
|
+
request.notify("progress", this, function(evt) {
|
349
|
+
progress = true;
|
350
|
+
});
|
351
|
+
|
352
|
+
request.notify("load", this, function(evt) {
|
353
|
+
load = true;
|
354
|
+
});
|
355
|
+
|
356
|
+
request.notify("loadend", this, function(evt) {
|
357
|
+
loadend = true;
|
358
|
+
});
|
359
|
+
|
360
|
+
request.notify(200, this, function(response) {
|
361
|
+
status = response.status;
|
362
|
+
|
363
|
+
ok(loadstart, "Received a loadstart event.");
|
364
|
+
ok(progress, "Received a progress event.");
|
365
|
+
ok(load, "Received a load event.");
|
366
|
+
ok(loadend, "Received a loadend event.");
|
367
|
+
ok(!abort, "Did not receive an abort event.");
|
368
|
+
ok(!error, "Did not receive an error event.");
|
369
|
+
ok(!timeout, "Did not receive a timeout event.");
|
370
|
+
equals(status, 200, "Received a response with status 200.");
|
371
|
+
|
372
|
+
window.start();
|
373
|
+
});
|
374
|
+
|
375
|
+
response = request.send();
|
376
|
+
|
377
|
+
stop() ; // stops the test runner - wait for response
|
378
|
+
});
|
379
|
+
|
380
|
+
|
381
|
+
test("Test event listeners on aborted request.", function() {
|
382
|
+
var abort = false,
|
383
|
+
error = false,
|
384
|
+
load = false,
|
385
|
+
loadend = false,
|
386
|
+
loadstart = false,
|
387
|
+
progress = false,
|
388
|
+
response,
|
389
|
+
status,
|
390
|
+
timeout = false;
|
391
|
+
|
392
|
+
request.notify("loadstart", this, function(evt) {
|
393
|
+
loadstart = true;
|
394
|
+
});
|
395
|
+
|
396
|
+
request.notify("progress", this, function(evt) {
|
397
|
+
progress = true;
|
398
|
+
|
399
|
+
// Cancel it before it completes.
|
400
|
+
response.cancel();
|
401
|
+
});
|
402
|
+
|
403
|
+
request.notify("abort", this, function(evt) {
|
404
|
+
abort = true;
|
405
|
+
});
|
406
|
+
|
407
|
+
request.notify("loadend", this, function(evt) {
|
408
|
+
loadend = true;
|
409
|
+
|
410
|
+
ok(loadstart, "Received a loadstart event.");
|
411
|
+
ok(progress, "Received a progress event.");
|
412
|
+
ok(abort, "Received an abort event.");
|
413
|
+
ok(!load, "Did not receive a load event.");
|
414
|
+
ok(loadend, "Received a loadend event.");
|
415
|
+
ok(!error, "Did not receive an error event.");
|
416
|
+
ok(!timeout, "Did not receive a timeout event.");
|
417
|
+
equals(status, undefined, "Did not receive a status notification.");
|
418
|
+
|
419
|
+
window.start();
|
420
|
+
});
|
421
|
+
|
422
|
+
request.notify(this, function(response) {
|
423
|
+
status = response.status;
|
424
|
+
});
|
425
|
+
|
426
|
+
response = request.send();
|
427
|
+
|
428
|
+
stop(); // stops the test runner - wait for response
|
429
|
+
});
|
430
|
+
|
431
|
+
test("Test upload event listeners on successful request.", function() {
|
432
|
+
var abort = false,
|
433
|
+
body = {},
|
434
|
+
error = false,
|
435
|
+
load = false,
|
436
|
+
loadend = false,
|
437
|
+
loadstart = false,
|
438
|
+
progress = false,
|
439
|
+
response,
|
440
|
+
status,
|
441
|
+
timeout = false;
|
442
|
+
|
443
|
+
// Use a POST request
|
444
|
+
request = SC.Request.postUrl('/');
|
445
|
+
|
446
|
+
request.notify("upload.loadstart", this, function(evt) {
|
447
|
+
loadstart = true;
|
448
|
+
});
|
449
|
+
|
450
|
+
request.notify("upload.progress", this, function(evt) {
|
451
|
+
progress = true;
|
452
|
+
});
|
453
|
+
|
454
|
+
request.notify("upload.load", this, function(evt) {
|
455
|
+
load = true;
|
456
|
+
});
|
457
|
+
|
458
|
+
request.notify("upload.loadend", this, function(evt) {
|
459
|
+
loadend = true;
|
460
|
+
});
|
461
|
+
|
462
|
+
request.notify(200, this, function(response) {
|
463
|
+
status = response.status;
|
464
|
+
|
465
|
+
ok(loadstart, "Received a loadstart event.");
|
466
|
+
ok(progress, "Received a progress event.");
|
467
|
+
ok(load, "Received a load event.");
|
468
|
+
ok(loadend, "Received a loadend event.");
|
469
|
+
ok(!abort, "Did not receive an abort event.");
|
470
|
+
ok(!error, "Did not receive an error event.");
|
471
|
+
ok(!timeout, "Did not receive a timeout event.");
|
472
|
+
equals(status, 200, "Received a response with status 200.");
|
473
|
+
|
474
|
+
window.start();
|
475
|
+
});
|
476
|
+
|
477
|
+
// Make a significant body object.
|
478
|
+
var i;
|
479
|
+
for (i = 10000; i >= 0; i--) {
|
480
|
+
body['k' + i] = 'v' + i;
|
481
|
+
}
|
482
|
+
|
483
|
+
response = request.send(body);
|
484
|
+
|
485
|
+
stop() ; // stops the test runner - wait for response
|
486
|
+
});
|
@@ -63,8 +63,14 @@ SC.ArrayController = SC.Controller.extend(SC.Array, SC.SelectionSupport,
|
|
63
63
|
|
64
64
|
If you set this property to a key name, array of key names, or a function,
|
65
65
|
then then ArrayController will automatically reorder your content array
|
66
|
-
to match the sort order.
|
67
|
-
|
66
|
+
to match the sort order. When using key names, you may specify the
|
67
|
+
direction of the sort by appending ASC or DESC to the key name. By default
|
68
|
+
sorting is done in ascending order.
|
69
|
+
|
70
|
+
For example,
|
71
|
+
|
72
|
+
myController.set('orderBy', 'title DESC');
|
73
|
+
myController.set('orderBy', ['lastName ASC', 'firstName DESC']);
|
68
74
|
|
69
75
|
Normally, you should only use this property if you set the content of the
|
70
76
|
controller to an unordered enumerable such as SC.Set or SC.SelectionSet.
|
@@ -373,18 +379,27 @@ SC.ArrayController = SC.Controller.extend(SC.Array, SC.SelectionSupport,
|
|
373
379
|
|
374
380
|
// generate comparison function if needed - use orderBy
|
375
381
|
func = func || function(a,b) {
|
376
|
-
var status, key, match,
|
382
|
+
var status, key, match, valueA, valueB;
|
377
383
|
|
378
384
|
for(var i=0, l=orderBy.get('length'); i<l && !status; i++) {
|
379
385
|
key = orderBy.objectAt(i);
|
380
386
|
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
387
|
+
if (key.search(/(ASC|DESC)/) === 0) {
|
388
|
+
//@if(debug)
|
389
|
+
SC.warn("Developer Warning: SC.ArrayController's orderBy direction syntax has been changed to match that of SC.Query and MySQL. Please change your String to 'key DESC' or 'key ASC'. Having 'ASC' or 'DESC' precede the key has been deprecated.");
|
390
|
+
//@endif
|
391
|
+
match = key.match(/^(ASC )?(DESC )?(.*)$/);
|
392
|
+
key = match[3];
|
393
|
+
} else {
|
394
|
+
match = key.match(/^(\S*)\s*(DESC)?(?:ASC)?$/);
|
395
|
+
key = match[1];
|
396
|
+
}
|
397
|
+
order = match[2] ? -1 : 1;
|
398
|
+
|
399
|
+
if (a) { valueA = a.isObservable ? a.get(key) : a[key]; }
|
400
|
+
if (b) { valueB = b.isObservable ? b.get(key) : b[key]; }
|
401
|
+
|
402
|
+
status = SC.compare(valueA, valueB) * order;
|
388
403
|
}
|
389
404
|
|
390
405
|
return status ;
|
@@ -519,6 +534,7 @@ SC.ArrayController = SC.Controller.extend(SC.Array, SC.SelectionSupport,
|
|
519
534
|
// of knowing which indices changed. Instead, we just
|
520
535
|
// invalidate the whole array.
|
521
536
|
this.arrayContentDidChange(0, oldlen, newlen);
|
537
|
+
this.enumerableContentDidChange(0, oldlen - 1);
|
522
538
|
this.endPropertyChanges();
|
523
539
|
this.updateSelectionAfterContentChange();
|
524
540
|
}.observes('orderBy'),
|