sproutcore 1.10.3.1 → 1.11.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/CHANGELOG +4 -8
- data/VERSION.yml +2 -2
- data/lib/frameworks/sproutcore/Buildfile +5 -4
- data/lib/frameworks/sproutcore/CHANGELOG.md +274 -40
- data/lib/frameworks/sproutcore/CONTRIBUTORS.md +133 -0
- data/lib/frameworks/sproutcore/README.md +31 -144
- data/lib/frameworks/sproutcore/apps/showcase/controllers/source_tree_controller.js +9 -4
- data/lib/frameworks/sproutcore/apps/showcase/resources/stylesheet.css +5 -0
- data/lib/frameworks/sproutcore/apps/showcase/system/views_item_content.js +1 -1
- data/lib/frameworks/sproutcore/apps/showcase/views/split_views.js +15 -2
- data/lib/frameworks/sproutcore/apps/showcase/views/stacked_views.js +1 -1
- data/lib/frameworks/sproutcore/apps/tests/english.lproj/main_page.js +11 -1
- data/lib/frameworks/sproutcore/frameworks/ajax/mixins/websocket_delegate.js +90 -0
- data/lib/frameworks/sproutcore/frameworks/ajax/system/request.js +81 -5
- data/lib/frameworks/sproutcore/frameworks/ajax/system/response.js +23 -4
- data/lib/frameworks/sproutcore/frameworks/ajax/system/websocket.js +475 -0
- data/lib/frameworks/sproutcore/frameworks/ajax/tests/system/request.js +149 -26
- data/lib/frameworks/sproutcore/frameworks/ajax/tests/system/websocket.js +197 -0
- data/lib/frameworks/sproutcore/frameworks/ajax/tests/system/xhr_response_test.js +65 -0
- data/lib/frameworks/sproutcore/frameworks/bootstrap/system/loader.js +4 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/child_view_layouts/horizontal_stack_layout.js +232 -52
- data/lib/frameworks/sproutcore/frameworks/core_foundation/child_view_layouts/vertical_stack_layout.js +235 -49
- data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/array.js +23 -13
- data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/object.js +3 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/core.js +81 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/english.lproj/ordinal.js +17 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/string.js +7 -0
- data/lib/frameworks/sproutcore/frameworks/{desktop/tests/views/disclosure/methods.js → core_foundation/french.lproj/ordinal.js} +7 -4
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/layout.js +2 -6
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/main.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/pane.js +104 -69
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/pane_statechart.js +6 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/protocols/child_view_layout_protocol.js +59 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/protocols/view_transition_protocol.js +18 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/application.js +192 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/bezier_curves.js +52 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/color.js +384 -64
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/core_query.js +6 -14
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/device.js +21 -35
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/event.js +72 -36
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/locale.js +90 -34
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/platform.js +55 -7
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/render_context.js +20 -15
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/req_anim_frame.js +9 -10
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/root_responder.js +763 -542
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/selection_set.js +4 -3
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/sparse_array.js +1 -7
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/string.js +14 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/touch.js +538 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/utils/rect.js +56 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/array_case.js +99 -4
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/object/single_case.js +25 -19
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/core_tests.js +75 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/ext/number_test.js +81 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/action_support.js +4 -4
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/responder_context.js +4 -4
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/string.js +19 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/color.js +36 -20
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/design_modes_test.js +83 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/makeMainPane.js +7 -3
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/mouse_events.js +338 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/root_responder.js +14 -89
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/touch.js +106 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/sparse_array.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/touch.js +136 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/utils/rect.js +42 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/append_remove.js +11 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/child_view.js +5 -5
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/design_mode_test.js +457 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/sendEvent.js +36 -10
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/background_color.js +44 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/border_frame_test.js +51 -24
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/childViewLayout_test.js +176 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/clippingFrame.js +46 -16
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/convertFrames.js +69 -15
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/didAppendToDocument.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layout.js +7 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutDidChange.js +30 -10
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutStyle.js +376 -71
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/static_layout.js +0 -10
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/viewDidResize.js +117 -34
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/view_states_test.js +52 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +656 -42
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/animation.js +159 -38
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/cursor.js +0 -7
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/design_mode.js +206 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/enabled.js +0 -28
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/keyboard.js +21 -6
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout.js +372 -450
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout_style.js +28 -13
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/manipulation.js +22 -51
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/statechart.js +59 -30
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/theming.js +0 -29
- data/lib/frameworks/sproutcore/frameworks/datastore/mixins/relationship_support.js +22 -10
- data/lib/frameworks/sproutcore/frameworks/datastore/models/children_attribute.js +42 -36
- data/lib/frameworks/sproutcore/frameworks/datastore/models/many_attribute.js +54 -3
- data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +178 -59
- data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/system/child_array.js +206 -132
- data/lib/frameworks/sproutcore/frameworks/datastore/system/many_array.js +214 -118
- data/lib/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +96 -13
- data/lib/frameworks/sproutcore/frameworks/datastore/system/query.js +14 -4
- data/lib/frameworks/sproutcore/frameworks/datastore/system/record_array.js +82 -42
- data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +272 -177
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/store_interaction_test.js +54 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/datetime_recordattribute.js +24 -16
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/many_attribute.js +6 -3
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/data_store.js +267 -35
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record.js +57 -46
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array.js +150 -53
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array_complex.js +57 -17
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_complex.js +13 -9
- data/lib/frameworks/sproutcore/frameworks/{experimental/frameworks/polymorphism → datastore}/tests/models/polymorphism/many.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/{experimental/frameworks/polymorphism → datastore}/tests/models/polymorphism/simple.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{experimental/frameworks/polymorphism → datastore}/tests/models/polymorphism/single.js +12 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/writeAttribute.js +20 -15
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +9 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/many_array/core_methods.js +80 -14
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/autonomous_dataSourceCallbacks.js +280 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/autonomous_pushChanges.js +232 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/chain.js +31 -5
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/parse.js +16 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/core_methods.js +60 -40
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/materializeRecord.js +78 -0
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/system/datetime.js +13 -1
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/tests/system/datetime.js +20 -0
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/localized/{resources → english.lproj}/strings.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/localized/french.lproj/strings.js +45 -0
- data/lib/frameworks/sproutcore/frameworks/designer/designers/object_designer.js +7 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_row_delegate.js +125 -44
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/alert.js +139 -48
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/draggable.js +202 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/menu.js +59 -56
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/palette.js +13 -49
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/picker.js +466 -305
- data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drag_source.js +49 -12
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/slider.js +79 -21
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/split.js +12 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/resources/menu_item_view.css +8 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/resources/overlay-scroller.css +187 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/system/drag.js +94 -30
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +163 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/methods.js +97 -78
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/ui.js +61 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/methods.js +7 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/ui.js +47 -22
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/methods.js +66 -9
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/ui.js +21 -11
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/sheet/ui.js +12 -18
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/methods.js +17 -14
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/ui.js +2 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +9 -6
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/collection_fast_path.js +54 -21
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/content.js +52 -20
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/itemViewForContentIndex.js +94 -4
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/keyboard.js +177 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/layerIdFor.js +13 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/length.js +9 -9
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/mouse.js +18 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/date_field/methods.js +104 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/disclosure/ui.js +48 -49
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/grid/drag_and_drop.js +22 -18
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/grid/methods.js +17 -5
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/link_view_test.js +136 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/contentIndexesInRect.js +77 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/drag_and_drop.js +53 -16
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/layoutForContentIndex.js +41 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowDelegate.js +25 -25
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowOffsetForContentIndex.js +102 -27
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/{rowHeightForContentIndex.js → rowSizeForContentIndex.js} +7 -6
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_outline.js +2 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_row_heights.js +70 -75
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_simple.js +29 -30
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list_item.js +57 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/menu_scroll_view/menu_scroll_view_test.js +206 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +15 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/radio/methods.js +15 -7
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/integration.js +16 -11
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/methods.js +164 -12
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/scale.js +387 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/touch.js +549 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/ui.js +214 -45
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroller.js +5 -5
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/methods.js +73 -22
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +88 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select/methods.js +8 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/slider/methods.js +16 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/slider/ui.js +54 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/split/dividers.js +21 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/static_content.js +31 -25
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/tab/methods.js +109 -29
- data/lib/frameworks/sproutcore/frameworks/desktop/views/button.js +10 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +3 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +779 -603
- data/lib/frameworks/sproutcore/frameworks/desktop/views/date_field.js +106 -7
- data/lib/frameworks/sproutcore/frameworks/desktop/views/link_view.js +406 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/list.js +437 -245
- data/lib/frameworks/sproutcore/frameworks/desktop/views/list_item.js +13 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +124 -62
- data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_scroll.js +176 -597
- data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_scroller_view.js +206 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/popup_button.js +3 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/progress.js +5 -4
- data/lib/frameworks/sproutcore/frameworks/desktop/views/radio.js +3 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scene.js +56 -158
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll_view.js +2560 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scroller.js +458 -242
- data/lib/frameworks/sproutcore/frameworks/desktop/views/segmented.js +117 -54
- data/lib/frameworks/sproutcore/frameworks/desktop/views/select.js +18 -12
- data/lib/frameworks/sproutcore/frameworks/desktop/views/slider.js +162 -34
- data/lib/frameworks/sproutcore/frameworks/desktop/views/split.js +30 -15
- data/lib/frameworks/sproutcore/frameworks/desktop/views/split_divider.js +33 -7
- data/lib/frameworks/sproutcore/frameworks/desktop/views/static_content.js +22 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/views/tab.js +47 -22
- data/lib/frameworks/sproutcore/frameworks/experimental/Buildfile +0 -6
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/views/form.js +2 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/views/form_row.js +21 -21
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/ext/menu.js +14 -3
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/mixins/select_view_menu.js +24 -10
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/ext/menu_resizing.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/mixins/select_view_menu/bindings.js +7 -4
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/mixins/select_view_menu/check_selected.js +7 -9
- data/lib/frameworks/sproutcore/frameworks/{desktop/tests/panes/select_button/methods.js → experimental/frameworks/select_view/tests/views/select/method.js} +54 -76
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/views/select/selected_item.js +35 -0
- data/lib/frameworks/sproutcore/frameworks/{desktop/tests/panes/select_button → experimental/frameworks/select_view/tests/views/select}/ui.js +107 -36
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/views/select.js +225 -66
- data/lib/frameworks/sproutcore/frameworks/foundation/controllers/tree.js +39 -38
- data/lib/frameworks/sproutcore/frameworks/foundation/core.js +5 -18
- data/lib/frameworks/sproutcore/frameworks/foundation/debug/control_test_pane.js +12 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/inflections.js +84 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/french.lproj/inflections.js +41 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_mixin.js +1 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_resize.js +7 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/content_display.js +3 -4
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/flowed_layout.js +6 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/private/tree_item_observer.js +408 -239
- data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/canvas_image.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/resources/text_field.css +2 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/spanish.lproj/inflections.js +38 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/system/benchmark.js +104 -76
- data/lib/frameworks/sproutcore/frameworks/foundation/system/string.js +20 -94
- data/lib/frameworks/sproutcore/frameworks/foundation/system/text_selection.js +33 -22
- data/lib/frameworks/sproutcore/frameworks/foundation/system/undo_manager.js +475 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/auto_resize_test.js +163 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/flowed_layout/tests.js +41 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/staticLayout.js +2 -5
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/methods.js +268 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/undo_manager.js +231 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/container/ui.js +16 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/image/ui.js +27 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/methods.js +24 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +135 -6
- data/lib/frameworks/sproutcore/frameworks/foundation/transitions/fade_transition.js +6 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/transitions/pop_transition.js +7 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/transitions/scale_transition.js +6 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/transitions/slide_transition.js +4 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/transitions/swap_dissolve_transition.js +3 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/validators/credit_card.js +21 -21
- data/lib/frameworks/sproutcore/frameworks/foundation/views/container.js +65 -15
- data/lib/frameworks/sproutcore/frameworks/foundation/views/image.js +4 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/views/label.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +193 -213
- data/lib/frameworks/sproutcore/frameworks/jquery/{jquery-1.8.3-patched.js → jquery-1.11.1.js} +7507 -6684
- data/lib/frameworks/sproutcore/frameworks/routing/system/routes.js +28 -11
- data/lib/frameworks/sproutcore/frameworks/routing/tests/system/routes.js +26 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/core.js +54 -25
- data/lib/frameworks/sproutcore/frameworks/runtime/ext/array.js +0 -6
- data/lib/frameworks/sproutcore/frameworks/runtime/ext/number.js +36 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/ext/window.js +25 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/array.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +156 -66
- data/lib/frameworks/sproutcore/frameworks/runtime/private/observer_set.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/system/binding.js +150 -65
- data/lib/frameworks/sproutcore/frameworks/runtime/system/index_set.js +57 -11
- data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +68 -49
- data/lib/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +14 -6
- data/lib/frameworks/sproutcore/frameworks/runtime/system/string.js +23 -23
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/ext/number_test.js +44 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/array.js +0 -10
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/enumerable/enumerable.js +340 -285
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/binding.js +104 -3
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/observer_set.js +14 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/string.js +15 -2
- data/lib/frameworks/sproutcore/frameworks/statechart/system/state.js +21 -18
- data/lib/frameworks/sproutcore/frameworks/statechart/system/statechart.js +52 -19
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/responder/pane.js +27 -24
- data/lib/frameworks/sproutcore/frameworks/template_view/controls/button.js +30 -0
- data/lib/frameworks/sproutcore/frameworks/template_view/ext/handlebars/bind.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/template_view/ext/handlebars/collection.js +2 -0
- data/lib/frameworks/sproutcore/frameworks/template_view/ext/handlebars/view.js +1 -0
- data/lib/frameworks/sproutcore/frameworks/template_view/tests/mixins/template_helpers/checkbox_support.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/template_view/tests/views/template/handlebars.js +4 -2
- data/lib/frameworks/sproutcore/frameworks/template_view/views/bindable_span.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/template_view/views/template_collection.js +16 -14
- data/lib/frameworks/sproutcore/frameworks/testing/core.js +5 -3
- data/lib/frameworks/sproutcore/frameworks/testing/system/plan.js +13 -0
- data/lib/frameworks/sproutcore/lib/index.rhtml +2 -2
- data/lib/frameworks/sproutcore/phantomjs/test_runner.js +28 -7
- data/lib/frameworks/sproutcore/scripts/run_sc_server_master.sh +1 -1
- data/lib/frameworks/sproutcore/themes/ace/resources/_variables.css +2 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/disclosure/ace/disclosure.css +1 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover.css +3 -4
- data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/horizontal.css +15 -15
- data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/horizontal_overlay.css +74 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/vertical.css +11 -13
- data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/vertical_overlay.css +74 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/jumbo/knob-active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/jumbo/knob-active@2x.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/jumbo/knob.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/jumbo/knob@2x.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/{22px → jumbo}/slider.css +9 -4
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/jumbo/track.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/jumbo/track@2x.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/knob-active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/knob-active@2x.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/knob.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/knob@2x.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/slider.css +32 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/track.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/track@2x.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/slider.css +13 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/knob-active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/knob-active@2x.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/knob.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/knob@2x.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/slider.css +32 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/track.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/track@2x.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/split/split.css +2 -3
- data/lib/sproutcore/builders/chance_file.rb +3 -3
- data/lib/sproutcore/helpers/minifier.rb +1 -0
- data/vendor/chance/lib/chance/instance.rb +34 -34
- data/vendor/chance/lib/chance/instance/spriting.rb +21 -16
- metadata +81 -58
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/visibility.js +0 -17
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_fast_path.js +0 -710
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/scrollable.js +0 -267
- data/lib/frameworks/sproutcore/frameworks/desktop/resources/touch-scroller.css +0 -196
- data/lib/frameworks/sproutcore/frameworks/desktop/system/undo_manager.js +0 -224
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/methods.js +0 -163
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/ui.js +0 -177
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll.js +0 -2053
- data/lib/frameworks/sproutcore/frameworks/desktop/views/select_button.js +0 -1024
- data/lib/frameworks/sproutcore/frameworks/desktop/views/select_field.js +0 -404
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/menu/render_delegates/menu_scroller.js +0 -28
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/menu/tests/menu/scroll.js +0 -235
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/menu/views/menu/scroll.js +0 -363
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/menu/views/menu/scroller.js +0 -250
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/README.md +0 -47
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/models/record.js +0 -134
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/render_delegates/desktop_scroller.js +0 -92
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/render_delegates/native_scroll.js +0 -25
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/render_delegates/scroll.js +0 -33
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/render_delegates/touch_scroller.js +0 -76
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/tests/scroll/integration.js +0 -25
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/tests/scroll/methods.js +0 -143
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/tests/scroll/ui.js +0 -256
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/core_scroll.js +0 -1164
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/core_scroller.js +0 -332
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/desktop/scroll.js +0 -236
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/desktop/scroller.js +0 -347
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/scroll.js +0 -15
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/scroller.js +0 -10
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/touch/scroll.js +0 -804
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/touch/scroller.js +0 -133
- data/lib/frameworks/sproutcore/frameworks/foundation/tasks/preload_bundle.js +0 -41
- data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/horizontal_touch.css +0 -91
- data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/vertical_touch.css +0 -92
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/14px/knob.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/14px/knob_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/14px/slider.css +0 -27
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/16px/knob.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/16px/knob_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/16px/slider.css +0 -27
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/22px/knob.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/22px/knob_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/22px/track.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/track.png +0 -0
@@ -128,8 +128,8 @@ SC.ObserverSet = {
|
|
128
128
|
for( var i=0, l=members.length; i<l; i++ ) {
|
129
129
|
member = members[i];
|
130
130
|
|
131
|
-
// method
|
132
|
-
member[1].call(member[0]);
|
131
|
+
// Call the method (member[1]) on the target (member[0]) with the context (member[2])
|
132
|
+
member[1].call(member[0], member[2]);
|
133
133
|
|
134
134
|
//@if(debug)
|
135
135
|
// If we have logging info specified for who scheduled the particular
|
@@ -71,16 +71,35 @@ SC.EMPTY_PLACEHOLDER = '@@EMPTY@@';
|
|
71
71
|
property of your object instance automatically. Now the two values will be
|
72
72
|
kept in sync.
|
73
73
|
|
74
|
-
|
74
|
+
One-Way Bindings
|
75
|
+
===
|
76
|
+
|
77
|
+
By default, bindings are set up as two-way. In cases where you only need the
|
78
|
+
binding to function in one direction, for example if a value from a controller
|
79
|
+
is bound into a read-only LabelView, then for performance reasons you should
|
80
|
+
use a one-way binding. To do this, call the very useful `oneWay` helper:
|
81
|
+
|
82
|
+
valueBinding: SC.Binding.oneWay('MyApp.someController.title')
|
83
|
+
|
84
|
+
or:
|
85
|
+
|
86
|
+
valueBinding: SC.Binding.from('MyApp.someController.title').oneWay()
|
87
|
+
|
88
|
+
This way if the value of MyApp.someController.title changes, your object's
|
89
|
+
`value` will also update. Since `value` will never update on its own, this will
|
90
|
+
avoid the setup time required to plumb the binding in the other direction,
|
91
|
+
nearly doubling performance for this binding.
|
92
|
+
|
93
|
+
Transforms
|
75
94
|
===
|
76
95
|
|
77
96
|
In addition to synchronizing values, bindings can also perform some basic
|
78
97
|
transforms on values. These transforms can help to make sure the data fed
|
79
|
-
into one object always meets the expectations of that object regardless of
|
98
|
+
into one object always meets the expectations of that object, regardless of
|
80
99
|
what the other object outputs.
|
81
100
|
|
82
101
|
To customize a binding, you can use one of the many helper methods defined
|
83
|
-
on SC.Binding
|
102
|
+
on SC.Binding. For example:
|
84
103
|
|
85
104
|
valueBinding: SC.Binding.single("MyApp.someController.title")
|
86
105
|
|
@@ -98,29 +117,14 @@ SC.EMPTY_PLACEHOLDER = '@@EMPTY@@';
|
|
98
117
|
or an empty string). If it is empty, the value will be set to the string
|
99
118
|
"(EMPTY)".
|
100
119
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
One especially useful binding customization you can use is the oneWay()
|
105
|
-
helper. This helper tells SproutCore that you are only interested in
|
106
|
-
receiving changes on the object you are binding from. For example, if you
|
107
|
-
are binding to a preference and you want to be notified if the preference
|
108
|
-
has changed, but your object will not be changing the preference itself, you
|
109
|
-
could do:
|
110
|
-
|
111
|
-
bigTitlesBinding: SC.Binding.oneWay("MyApp.preferencesController.bigTitles")
|
112
|
-
|
113
|
-
This way if the value of MyApp.preferencesController.bigTitles changes the
|
114
|
-
"bigTitles" property of your object will change also. However, if you
|
115
|
-
change the value of your "bigTitles" property, it will not update the
|
116
|
-
preferencesController.
|
120
|
+
The following transform helper methods are included: `noError`, `single`, `notEmpty`,
|
121
|
+
`notNull`, `multiple`, `bool`, `not`, `isNull`, `and` (two values only), `or` (two
|
122
|
+
values only), and `equalTo`. See each method's documentation for a full description.
|
117
123
|
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
may be created frequently and you do not intend to change a property; only
|
123
|
-
to monitor it for changes. (such as in the example above).
|
124
|
+
(Note that transforms are only applied in the forward direction (the 'to' side); values
|
125
|
+
are applied untransformed to the 'from' side. If the 'from' object has validation
|
126
|
+
needs, it should own and apply them itself, for example via a read/write calculated
|
127
|
+
property.)
|
124
128
|
|
125
129
|
Adding Custom Transforms
|
126
130
|
===
|
@@ -196,7 +200,10 @@ SC.EMPTY_PLACEHOLDER = '@@EMPTY@@';
|
|
196
200
|
the result of these customizations will be a binding template, not a fully
|
197
201
|
active binding. The binding will actually become active only when you
|
198
202
|
instantiate the object the binding belongs to. It is useful however, to
|
199
|
-
understand what actually happens when the binding is activated.
|
203
|
+
understand what actually happens when the binding is activated. (Of course
|
204
|
+
you should always use the highest-level APIs available, even if you understand
|
205
|
+
how it works underneath; unless you have specific needs, you should rely on
|
206
|
+
the convenience `fooBinding` format.)
|
200
207
|
|
201
208
|
For a binding to function it must have at least a "from" property and a "to"
|
202
209
|
property. The from property path points to the object/key that you want to
|
@@ -246,14 +253,19 @@ SC.EMPTY_PLACEHOLDER = '@@EMPTY@@';
|
|
246
253
|
});
|
247
254
|
|
248
255
|
SproutCore's built in binding creation method make it easy to automatically
|
249
|
-
create bindings for you.
|
250
|
-
|
256
|
+
create bindings for you. If you need further documentation on SC.Binding's inner
|
257
|
+
workings, see the private method documentation in the source code.
|
251
258
|
|
252
259
|
@since SproutCore 1.0
|
253
260
|
*/
|
254
261
|
SC.Binding = /** @scope SC.Binding.prototype */{
|
255
262
|
|
256
263
|
/**
|
264
|
+
Quack.
|
265
|
+
*/
|
266
|
+
isBinding: YES,
|
267
|
+
|
268
|
+
/** @private
|
257
269
|
This is the core method you use to create a new binding instance. The
|
258
270
|
binding instance will have the receiver instance as its parent which means
|
259
271
|
any configuration you have there will be inherited.
|
@@ -277,7 +289,7 @@ SC.Binding = /** @scope SC.Binding.prototype */{
|
|
277
289
|
return ret;
|
278
290
|
},
|
279
291
|
|
280
|
-
/**
|
292
|
+
/** @private
|
281
293
|
Returns a builder function for compatibility.
|
282
294
|
*/
|
283
295
|
builder: function () {
|
@@ -318,9 +330,13 @@ SC.Binding = /** @scope SC.Binding.prototype */{
|
|
318
330
|
},
|
319
331
|
|
320
332
|
/**
|
321
|
-
|
322
|
-
|
323
|
-
|
333
|
+
This will set the "to" property path to the specified value. It will not
|
334
|
+
attempt to reoslve this property path to an actual object/property tuple
|
335
|
+
until you connect the binding.
|
336
|
+
|
337
|
+
If you are using the convenience format `fooBinding`, for example
|
338
|
+
`isVisibleBinding`, you do not need to call this method, as the `to` property
|
339
|
+
path will be generated for you when its object is created.
|
324
340
|
|
325
341
|
@param {String|Tuple} propertyPath A property path or tuple
|
326
342
|
@param {Object} [root] root object to use when resolving the path.
|
@@ -427,7 +443,7 @@ SC.Binding = /** @scope SC.Binding.prototype */{
|
|
427
443
|
}
|
428
444
|
},
|
429
445
|
|
430
|
-
/**
|
446
|
+
/**
|
431
447
|
Disconnects the binding instance. Changes will no longer be relayed. You
|
432
448
|
will not usually need to call this method.
|
433
449
|
|
@@ -456,7 +472,7 @@ SC.Binding = /** @scope SC.Binding.prototype */{
|
|
456
472
|
return this;
|
457
473
|
},
|
458
474
|
|
459
|
-
/**
|
475
|
+
/** @private
|
460
476
|
Indicates when the binding has been destroyed.
|
461
477
|
|
462
478
|
@type Boolean
|
@@ -464,7 +480,7 @@ SC.Binding = /** @scope SC.Binding.prototype */{
|
|
464
480
|
*/
|
465
481
|
isDestroyed: NO,
|
466
482
|
|
467
|
-
/**
|
483
|
+
/** @private
|
468
484
|
Disconnects the binding and removes all properties and external references. Called by
|
469
485
|
either binding target object when destroyed.
|
470
486
|
|
@@ -495,7 +511,7 @@ SC.Binding = /** @scope SC.Binding.prototype */{
|
|
495
511
|
this._toObserverData = this._fromObserverData = null;
|
496
512
|
},
|
497
513
|
|
498
|
-
/**
|
514
|
+
/** @private
|
499
515
|
Invoked whenever the value of the "from" property changes. This will mark
|
500
516
|
the binding as dirty if the value has changed.
|
501
517
|
|
@@ -530,7 +546,7 @@ SC.Binding = /** @scope SC.Binding.prototype */{
|
|
530
546
|
}
|
531
547
|
},
|
532
548
|
|
533
|
-
/**
|
549
|
+
/** @private
|
534
550
|
Invoked whenever the value of the "to" property changes. This will mark the
|
535
551
|
binding as dirty only if:
|
536
552
|
|
@@ -572,6 +588,7 @@ SC.Binding = /** @scope SC.Binding.prototype */{
|
|
572
588
|
}
|
573
589
|
},
|
574
590
|
|
591
|
+
/** @private */
|
575
592
|
_scheduleSync: function () {
|
576
593
|
if (SC.RunLoop.isRunLoopInProgress() || SC.Binding._syncScheduled) { return; }
|
577
594
|
SC.Binding._syncScheduled = YES;
|
@@ -594,26 +611,36 @@ SC.Binding = /** @scope SC.Binding.prototype */{
|
|
594
611
|
_computeBindingValue: function () {
|
595
612
|
var source = this._bindingSource,
|
596
613
|
key = this._bindingKey,
|
597
|
-
v
|
614
|
+
v;
|
598
615
|
|
599
616
|
this._bindingValue = v = (source ? source.getPath(key) : null);
|
617
|
+
this._transformedBindingValue = this._computeTransformedValue(v);
|
618
|
+
},
|
619
|
+
|
620
|
+
/** @private
|
621
|
+
Applies transforms to the value and returns the transfomed value.
|
622
|
+
@param {*} value Binding value to transform
|
623
|
+
@returns {*} Transformed value
|
624
|
+
*/
|
625
|
+
_computeTransformedValue: function (value) {
|
626
|
+
var transforms = this._transforms,
|
627
|
+
idx,
|
628
|
+
len,
|
629
|
+
transform;
|
600
630
|
|
601
|
-
// apply any transforms to get the to property value also
|
602
|
-
var transforms = this._transforms;
|
603
631
|
if (transforms) {
|
604
|
-
|
605
|
-
transform;
|
632
|
+
len = transforms.length;
|
606
633
|
for (idx = 0; idx < len; idx++) {
|
607
634
|
transform = transforms[idx];
|
608
|
-
|
635
|
+
value = transform(value, this);
|
609
636
|
}
|
610
637
|
}
|
611
638
|
|
612
639
|
// if error objects are not allowed, and the value is an error, then
|
613
640
|
// change it to null.
|
614
|
-
if (this._noError && SC.typeOf(
|
641
|
+
if (this._noError && SC.typeOf(value) === SC.T_ERROR) { value = null; }
|
615
642
|
|
616
|
-
|
643
|
+
return value;
|
617
644
|
},
|
618
645
|
|
619
646
|
_connectQueue: SC.CoreSet.create(),
|
@@ -621,8 +648,8 @@ SC.Binding = /** @scope SC.Binding.prototype */{
|
|
621
648
|
_changeQueue: SC.CoreSet.create(),
|
622
649
|
_alternateChangeQueue: SC.CoreSet.create(),
|
623
650
|
|
624
|
-
/**
|
625
|
-
Call this method on SC.Binding to flush all bindings with
|
651
|
+
/** @private
|
652
|
+
Call this method on SC.Binding to flush all bindings with changes pending.
|
626
653
|
|
627
654
|
@returns {Boolean} YES if changes were flushed.
|
628
655
|
*/
|
@@ -676,7 +703,7 @@ SC.Binding = /** @scope SC.Binding.prototype */{
|
|
676
703
|
return didFlush;
|
677
704
|
},
|
678
705
|
|
679
|
-
/**
|
706
|
+
/** @private
|
680
707
|
This method is called at the end of the Run Loop to relay the changed
|
681
708
|
binding value from one side to the other.
|
682
709
|
*/
|
@@ -731,9 +758,14 @@ SC.Binding = /** @scope SC.Binding.prototype */{
|
|
731
758
|
just changed.
|
732
759
|
|
733
760
|
This method is useful when you are dynamically connecting bindings to a
|
734
|
-
network of objects that may have already been initialized.
|
761
|
+
network of objects that may have already been initialized. Otherwise you
|
762
|
+
should not need to call this method.
|
735
763
|
*/
|
736
764
|
sync: function () {
|
765
|
+
var target,
|
766
|
+
key,
|
767
|
+
v,
|
768
|
+
tv;
|
737
769
|
|
738
770
|
// do nothing if not connected
|
739
771
|
if (!this.isConnected) return this;
|
@@ -745,8 +777,8 @@ SC.Binding = /** @scope SC.Binding.prototype */{
|
|
745
777
|
// we are connected, go ahead and sync
|
746
778
|
} else {
|
747
779
|
this._computeBindingTargets();
|
748
|
-
|
749
|
-
|
780
|
+
target = this._fromTarget;
|
781
|
+
key = this._fromPropertyKey;
|
750
782
|
if (!target || !key) return this; // nothing to do
|
751
783
|
|
752
784
|
// Let's check for whether target is a valid observable with getPath.
|
@@ -754,16 +786,30 @@ SC.Binding = /** @scope SC.Binding.prototype */{
|
|
754
786
|
//
|
755
787
|
// If we have a target, it is ready, but if it is invalid, that is WRONG.
|
756
788
|
if (!target.isObservable) {
|
757
|
-
|
789
|
+
//@if(debug)
|
790
|
+
// Provide some developer support.
|
791
|
+
if (target === window) {
|
792
|
+
var msg = "Developer Warning: You are attempting to bind \"%{to_root}\"'s '%{to_property}' property to the non-observable 'window.%{key}'. It's likely that you've specified a local binding path without prepending a period. For example, you may have `%{to_property}Binding: '%{key}'` instead of `%{to_property}Binding: '.%{key}'`.";
|
793
|
+
msg = msg.fmt({
|
794
|
+
to_root: (this._toRoot || 'object').toString(),
|
795
|
+
to_property: this._toPropertyPath,
|
796
|
+
key: key
|
797
|
+
});
|
798
|
+
SC.Logger.warn(msg);
|
799
|
+
} else {
|
800
|
+
SC.Logger.warn("Developer Warning: Cannot bind \"%@\"'s '%@' property to property '%@' on non-observable '%@'".fmt((this._toRoot || 'object').toString(), this._toPropertyPath, key, target));
|
801
|
+
}
|
802
|
+
//@endif
|
758
803
|
return this;
|
759
804
|
}
|
760
805
|
|
761
806
|
// get the new value
|
762
|
-
|
807
|
+
v = target.getPath(key);
|
808
|
+
tv = this._computeTransformedValue(v);
|
763
809
|
|
764
810
|
// if the new value is different from the current binding value, then
|
765
811
|
// schedule to register an update.
|
766
|
-
if (v !== this._bindingValue || key === '[]') {
|
812
|
+
if (v !== this._bindingValue || tv !== this._transformedBindingValue || key === '[]') {
|
767
813
|
this._setBindingValue(target, key);
|
768
814
|
SC.Binding._changeQueue.add(this); // save for later.
|
769
815
|
}
|
@@ -772,9 +818,12 @@ SC.Binding = /** @scope SC.Binding.prototype */{
|
|
772
818
|
return this;
|
773
819
|
},
|
774
820
|
|
775
|
-
|
821
|
+
/** @private
|
822
|
+
set if you call sync() when the binding connection is still pending.
|
823
|
+
*/
|
776
824
|
_syncOnConnect: NO,
|
777
825
|
|
826
|
+
/** @private */
|
778
827
|
_computeBindingTargets: function () {
|
779
828
|
var path, root, tuple;
|
780
829
|
|
@@ -820,11 +869,15 @@ SC.Binding = /** @scope SC.Binding.prototype */{
|
|
820
869
|
}
|
821
870
|
},
|
822
871
|
|
872
|
+
// -------------------------------
|
873
|
+
// Helper Methods
|
874
|
+
//
|
875
|
+
|
823
876
|
/**
|
824
877
|
Configures the binding as one way. A one-way binding will relay changes
|
825
878
|
on the "from" side to the "to" side, but not the other way around. This
|
826
|
-
means that if you change the "to" side directly, the "from" side
|
827
|
-
a different value.
|
879
|
+
means that if you change the "to" side directly, the "from" side will not
|
880
|
+
be updated, and may have a different value.
|
828
881
|
|
829
882
|
@param {String} [fromPath] from path to connect.
|
830
883
|
@param {Boolean} [aFlag] Pass NO to set the binding back to two-way
|
@@ -853,10 +906,14 @@ SC.Binding = /** @scope SC.Binding.prototype */{
|
|
853
906
|
|
854
907
|
function (value) {};
|
855
908
|
|
909
|
+
or:
|
910
|
+
|
911
|
+
function (value, binding) {};
|
912
|
+
|
856
913
|
It must return either the transformed value or an error object.
|
857
914
|
|
858
915
|
Transform functions are chained, so they are called in order. If you are
|
859
|
-
extending a binding and want to reset
|
916
|
+
extending a binding and want to reset its transforms, you can call
|
860
917
|
resetTransform() first.
|
861
918
|
|
862
919
|
@param {Function} transformFunc the transform function.
|
@@ -1046,16 +1103,18 @@ SC.Binding = /** @scope SC.Binding.prototype */{
|
|
1046
1103
|
|
1047
1104
|
/* @private Used with the logic gate bindings. */
|
1048
1105
|
_LogicGateAnd: SC.Object.extend({
|
1049
|
-
logicProperty: function() {
|
1106
|
+
logicProperty: function () {
|
1050
1107
|
return (this.get('valueA') && this.get('valueB'));
|
1051
1108
|
}.property('valueA', 'valueB').cacheable()
|
1052
1109
|
}),
|
1110
|
+
|
1053
1111
|
/* @private Used with the logic gate bindings. */
|
1054
1112
|
_LogicGateOr: SC.Object.extend({
|
1055
|
-
logicProperty: function() {
|
1113
|
+
logicProperty: function () {
|
1056
1114
|
return (this.get('valueA') || this.get('valueB'));
|
1057
1115
|
}.property('valueA', 'valueB').cacheable()
|
1058
1116
|
}),
|
1117
|
+
|
1059
1118
|
/* @private Used by logic gate bindings. */
|
1060
1119
|
_logicGateBinding: function (gateClass, pathA, pathB) {
|
1061
1120
|
// If either path is local, remove any * chains and append the localObject path to it.
|
@@ -1070,11 +1129,11 @@ SC.Binding = /** @scope SC.Binding.prototype */{
|
|
1070
1129
|
|
1071
1130
|
// Gets the gate class and instantiates a nice copy.
|
1072
1131
|
var gateHash = {
|
1073
|
-
|
1074
|
-
|
1075
|
-
|
1076
|
-
|
1077
|
-
|
1132
|
+
localObject: null,
|
1133
|
+
valueABinding: SC.Binding.oneWay(pathA),
|
1134
|
+
valueBBinding: SC.Binding.oneWay(pathB)
|
1135
|
+
},
|
1136
|
+
gate = gateClass.create(gateHash);
|
1078
1137
|
|
1079
1138
|
// Creates and populates the return binding.
|
1080
1139
|
var ret = this.from('logicProperty', gate).oneWay();
|
@@ -1130,6 +1189,32 @@ SC.Binding = /** @scope SC.Binding.prototype */{
|
|
1130
1189
|
return this._logicGateBinding(this._LogicGateOr, pathA, pathB);
|
1131
1190
|
},
|
1132
1191
|
|
1192
|
+
/**
|
1193
|
+
Adds a transform that will return YES if the value is equal to equalValue, NO otherwise.
|
1194
|
+
|
1195
|
+
isVisibleBinding: SC.Binding.oneWay("MyApp.someController.title").equalTo(comparisonValue)
|
1196
|
+
|
1197
|
+
Or:
|
1198
|
+
|
1199
|
+
isVisibleBinding: SC.Binding.equalTo("MyApp.someController.title", comparisonValue)
|
1200
|
+
|
1201
|
+
@param {String} fromPath from path or null
|
1202
|
+
@param {Object} equalValue the value to compare with
|
1203
|
+
@returns {SC.Binding} this
|
1204
|
+
*/
|
1205
|
+
equalTo: function(fromPath, equalValue) {
|
1206
|
+
// Normalize arguments.
|
1207
|
+
if (equalValue === undefined) {
|
1208
|
+
equalValue = fromPath;
|
1209
|
+
fromPath = null;
|
1210
|
+
}
|
1211
|
+
|
1212
|
+
return this.from(fromPath).transform(function(value, binding) {
|
1213
|
+
return value === equalValue;
|
1214
|
+
});
|
1215
|
+
},
|
1216
|
+
|
1217
|
+
/** @private */
|
1133
1218
|
toString: function () {
|
1134
1219
|
var from = this._fromRoot ? "<%@>:%@".fmt(this._fromRoot, this._fromPropertyPath) : this._fromPropertyPath;
|
1135
1220
|
|
@@ -67,28 +67,54 @@ SC.IndexSet = SC.mixin({},
|
|
67
67
|
return ret;
|
68
68
|
},
|
69
69
|
|
70
|
+
//@if(debug)
|
71
|
+
/** @private Validates the standard IndexSet method arguments. */
|
72
|
+
_sc_validateIndexSetArguments: function (start, length) {
|
73
|
+
// Validate arguments. Potential bad usages include trying to call SC.IndexSet.create() with SproutCore's standard property-hash
|
74
|
+
// idiom, and passing in the results of bad math (NaN in particular causes problems).
|
75
|
+
var startIsValid = NO,
|
76
|
+
lengthIsValid = NO;
|
77
|
+
// Unpack hash.
|
78
|
+
if (SC.typeOf(start) === SC.T_HASH && !start.isIndexSet && SC.none(length)) {
|
79
|
+
length = start.length;
|
80
|
+
start = start.start;
|
81
|
+
}
|
82
|
+
// Validate start.
|
83
|
+
if (SC.none(start)) startIsValid = YES;
|
84
|
+
else if (SC.typeOf(start) === SC.T_NUMBER && !isNaN(start)) startIsValid = YES;
|
85
|
+
else if (start.isIndexSet && SC.none(length)) startIsValid = YES;
|
86
|
+
// Validate length.
|
87
|
+
if (SC.none(start) && !SC.none(length)) lengthIsValid = NO; // stay invalid.
|
88
|
+
else if (SC.none(length)) lengthIsValid = YES;
|
89
|
+
else if (SC.typeOf(length) === SC.T_NUMBER && !isNaN(length)) lengthIsValid = YES;
|
90
|
+
// Check validitty and throw if needed.
|
91
|
+
if (!startIsValid || !lengthIsValid) {
|
92
|
+
var argsString = SC.A(arguments).join(', ');
|
93
|
+
throw new Error("SC.IndexSet created with invalid parameters (%@). You must call SC.IndexSet with zero, one or two valid numeric arguments.".fmt(argsString));
|
94
|
+
}
|
95
|
+
},
|
96
|
+
//@endif
|
97
|
+
|
70
98
|
/**
|
71
|
-
To create
|
99
|
+
To create an empty IndexSet, call `create` with no arguments. To create a set with one index, call `create` with one
|
100
|
+
argument: the index to add. To create a fuller set, call create with two arguments: the start index and the length to
|
101
|
+
add.
|
102
|
+
|
103
|
+
To create a more complicated set of indices, create an index set and populate individual ranges using `.add()`.
|
72
104
|
|
73
105
|
@param {Number|SC.IndexSet} start The start of the range or an index set.
|
74
106
|
@param {Number} [length] The length of the range (by default set to 1 if start is a Number)
|
75
107
|
@returns {SC.IndexSet}
|
76
108
|
*/
|
77
109
|
create: function (start, length) {
|
110
|
+
//@if (debug)
|
111
|
+
this._sc_validateIndexSetArguments.apply(this, arguments);
|
112
|
+
//@endif
|
113
|
+
|
78
114
|
var ret = SC.beget(this);
|
79
115
|
ret.initObservable();
|
80
116
|
ret.registerDependentKey('min', '[]');
|
81
117
|
|
82
|
-
// @if (debug)
|
83
|
-
// Validate the input to ensure that the parameters
|
84
|
-
// match the function definition.
|
85
|
-
// This is here because `create` doesn't follow the
|
86
|
-
// idiomatic SC convention of passing in an object literal to `create`.
|
87
|
-
if (start && !(SC.typeOf(start) === SC.T_NUMBER || start.isIndexSet)) {
|
88
|
-
throw new Error("SC.IndexSet does not accept `%@` as a parameter to `create`. Take a look at the function signature for proper usage.".fmt(start));
|
89
|
-
}
|
90
|
-
// @endif
|
91
|
-
|
92
118
|
// optimized method to clone an index set.
|
93
119
|
if (start && start.isIndexSet) {
|
94
120
|
ret._content = this._sc_sliceContent(start._content);
|
@@ -288,6 +314,10 @@ SC.IndexSet = SC.mixin({},
|
|
288
314
|
@returns {Boolean}
|
289
315
|
*/
|
290
316
|
contains: function (start, length) {
|
317
|
+
//@if (debug)
|
318
|
+
this._sc_validateIndexSetArguments.apply(this, arguments);
|
319
|
+
//@endif
|
320
|
+
|
291
321
|
var content, cur, next, rstart, rnext;
|
292
322
|
|
293
323
|
// normalize input
|
@@ -336,6 +366,10 @@ SC.IndexSet = SC.mixin({},
|
|
336
366
|
@returns {Boolean}
|
337
367
|
*/
|
338
368
|
intersects: function (start, length) {
|
369
|
+
//@if (debug)
|
370
|
+
this._sc_validateIndexSetArguments.apply(this, arguments);
|
371
|
+
//@endif
|
372
|
+
|
339
373
|
var content, cur, next, lim;
|
340
374
|
|
341
375
|
// normalize input
|
@@ -398,6 +432,9 @@ SC.IndexSet = SC.mixin({},
|
|
398
432
|
@returns {SC.IndexSet} receiver
|
399
433
|
*/
|
400
434
|
replace: function (start, length) {
|
435
|
+
//@if (debug)
|
436
|
+
this._sc_validateIndexSetArguments.apply(this, arguments);
|
437
|
+
//@endif
|
401
438
|
|
402
439
|
if (length === undefined) {
|
403
440
|
if (typeof start === SC.T_NUMBER) {
|
@@ -434,6 +471,9 @@ SC.IndexSet = SC.mixin({},
|
|
434
471
|
@returns {SC.IndexSet} receiver
|
435
472
|
*/
|
436
473
|
add: function (start, length) {
|
474
|
+
//@if (debug)
|
475
|
+
this._sc_validateIndexSetArguments.apply(this, arguments);
|
476
|
+
//@endif
|
437
477
|
|
438
478
|
if (this.isFrozen) throw SC.FROZEN_ERROR;
|
439
479
|
|
@@ -608,6 +648,9 @@ SC.IndexSet = SC.mixin({},
|
|
608
648
|
@returns {SC.IndexSet} receiver
|
609
649
|
*/
|
610
650
|
remove: function (start, length) {
|
651
|
+
//@if (debug)
|
652
|
+
this._sc_validateIndexSetArguments.apply(this, arguments);
|
653
|
+
//@endif
|
611
654
|
|
612
655
|
if (this.isFrozen) throw SC.FROZEN_ERROR;
|
613
656
|
|
@@ -938,6 +981,9 @@ SC.IndexSet = SC.mixin({},
|
|
938
981
|
@returns {Number} count of indexes
|
939
982
|
*/
|
940
983
|
lengthIn: function (start, length) {
|
984
|
+
//@if (debug)
|
985
|
+
this._sc_validateIndexSetArguments.apply(this, arguments);
|
986
|
+
//@endif
|
941
987
|
|
942
988
|
var ret = 0;
|
943
989
|
|