sproutit-sproutcore 1.0.0.20090416161445 → 1.0.0.20090720093355
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Buildfile +4 -2
- data/frameworks/sproutcore/Buildfile +3 -2
- data/frameworks/sproutcore/README +2 -1
- data/frameworks/sproutcore/apps/docs/core.js +27 -0
- data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/QuickLook/Preview.pdf +0 -0
- data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/QuickLook/Thumbnail.tiff +0 -0
- data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/data.plist +14378 -0
- data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/image10.png +0 -0
- data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/image11.png +0 -0
- data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/image13.png +0 -0
- data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/image14.png +0 -0
- data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/image8.png +0 -0
- data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/image9.tiff +0 -0
- data/frameworks/sproutcore/apps/docs/english.lproj/loading.rhtml +9 -0
- data/frameworks/sproutcore/apps/docs/english.lproj/main_page.js +22 -0
- data/frameworks/sproutcore/apps/{sc_jsdoc → docs}/english.lproj/strings.js +7 -7
- data/frameworks/sproutcore/apps/docs/main.js +30 -0
- data/frameworks/sproutcore/apps/tests/controllers/detail.js +16 -0
- data/frameworks/sproutcore/apps/tests/controllers/source.js +29 -0
- data/frameworks/sproutcore/apps/tests/controllers/target.js +26 -0
- data/frameworks/sproutcore/apps/tests/controllers/targets.js +65 -26
- data/frameworks/sproutcore/apps/tests/controllers/tests.js +14 -19
- data/frameworks/sproutcore/apps/tests/core.js +114 -16
- data/frameworks/sproutcore/apps/tests/data_source.js +96 -0
- data/frameworks/sproutcore/apps/tests/english.lproj/main_page.css +22 -2
- data/frameworks/sproutcore/apps/tests/english.lproj/main_page.js +168 -22
- data/frameworks/sproutcore/apps/tests/english.lproj/strings.js +14 -5
- data/frameworks/sproutcore/apps/tests/fixtures/target.js +81 -37
- data/frameworks/sproutcore/apps/tests/fixtures/test.js +38 -37
- data/frameworks/sproutcore/apps/tests/main.js +9 -20
- data/frameworks/sproutcore/apps/tests/models/target.js +74 -31
- data/frameworks/sproutcore/apps/tests/models/test.js +30 -2
- data/frameworks/sproutcore/{frameworks/desktop/mixins/collection_item.js → apps/tests/states/no_targets.js} +16 -12
- data/frameworks/sproutcore/apps/tests/states/ready.js +56 -0
- data/frameworks/sproutcore/apps/tests/states/ready_detail.js +41 -0
- data/frameworks/sproutcore/apps/tests/states/ready_empty.js +48 -0
- data/frameworks/sproutcore/apps/tests/states/ready_list.js +41 -0
- data/frameworks/sproutcore/apps/tests/states/ready_loading.js +44 -0
- data/frameworks/sproutcore/apps/tests/states/ready_no_tests.js +31 -0
- data/frameworks/sproutcore/apps/tests/states/start.js +39 -0
- data/frameworks/sproutcore/apps/tests/tests/controllers/{test.js → detail.js} +3 -3
- data/frameworks/sproutcore/apps/tests/tests/controllers/source.js +15 -0
- data/frameworks/sproutcore/apps/tests/tests/controllers/target.js +15 -0
- data/frameworks/sproutcore/apps/tests/tests/controllers/targets.js +3 -3
- data/frameworks/sproutcore/apps/tests/tests/views/offset_checkbox.js +15 -0
- data/frameworks/sproutcore/apps/tests/views/offset_checkbox.js +26 -0
- data/frameworks/sproutcore/design/CollectionView State Charts.graffle +4848 -0
- data/frameworks/sproutcore/design/Design Charts.graffle +8788 -6375
- data/frameworks/sproutcore/design/SproutCore Design Template.graffle/QuickLook/Preview.pdf +0 -0
- data/frameworks/sproutcore/design/SproutCore Design Template.graffle/QuickLook/Thumbnail.tiff +0 -0
- data/frameworks/sproutcore/design/SproutCore Design Template.graffle/data.plist +1452 -0
- data/frameworks/sproutcore/design/SproutCore Design Template.graffle/image8.png +0 -0
- data/frameworks/sproutcore/design/TestRunner Design.graffle/QuickLook/Preview.pdf +0 -0
- data/frameworks/sproutcore/design/TestRunner Design.graffle/QuickLook/Thumbnail.tiff +0 -0
- data/frameworks/sproutcore/design/TestRunner Design.graffle/data.plist +24187 -0
- data/frameworks/sproutcore/design/TestRunner Design.graffle/image10.png +0 -0
- data/frameworks/sproutcore/design/TestRunner Design.graffle/image11.png +0 -0
- data/frameworks/sproutcore/design/TestRunner Design.graffle/image13.png +0 -0
- data/frameworks/sproutcore/design/TestRunner Design.graffle/image15.png +0 -0
- data/frameworks/sproutcore/design/TestRunner Design.graffle/image16.png +0 -0
- data/frameworks/sproutcore/design/TestRunner Design.graffle/image17.png +0 -0
- data/frameworks/sproutcore/design/TestRunner Design.graffle/image18.png +0 -0
- data/frameworks/sproutcore/design/TestRunner Design.graffle/image19.png +0 -0
- data/frameworks/sproutcore/design/TestRunner Design.graffle/image22.tiff +0 -0
- data/frameworks/sproutcore/design/TestRunner Design.graffle/image23.png +0 -0
- data/frameworks/sproutcore/design/TestRunner Design.graffle/image24.png +0 -0
- data/frameworks/sproutcore/design/TestRunner Design.graffle/image25.png +0 -0
- data/frameworks/sproutcore/design/TestRunner Design.graffle/image30.png +0 -0
- data/frameworks/sproutcore/design/TestRunner Design.graffle/image31.png +0 -0
- data/frameworks/sproutcore/design/TestRunner Design.graffle/image8.png +0 -0
- data/frameworks/sproutcore/design/TestRunner Design.graffle/image9.png +0 -0
- data/frameworks/sproutcore/frameworks/datastore/data_sources/cascade.js +2 -2
- data/frameworks/sproutcore/frameworks/datastore/data_sources/data_source.js +66 -49
- data/frameworks/sproutcore/frameworks/datastore/data_sources/fixtures.js +146 -31
- data/frameworks/sproutcore/frameworks/datastore/data_sources/fixtures_with_queries.js +238 -0
- data/frameworks/sproutcore/frameworks/datastore/models/many_attribute.js +27 -11
- data/frameworks/sproutcore/frameworks/datastore/models/record.js +163 -32
- data/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +67 -5
- data/frameworks/sproutcore/frameworks/datastore/system/many_array.js +157 -0
- data/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +202 -19
- data/frameworks/sproutcore/frameworks/datastore/system/query.js +929 -78
- data/frameworks/sproutcore/frameworks/datastore/system/record_array.js +143 -5
- data/frameworks/sproutcore/frameworks/datastore/system/store.js +443 -125
- data/frameworks/sproutcore/frameworks/datastore/tests/data_sources/fixtures.js +38 -3
- data/frameworks/sproutcore/frameworks/datastore/tests/models/many_attribute.js +94 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/core_methods.js +30 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/normalize.js +238 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +105 -16
- data/frameworks/sproutcore/frameworks/datastore/tests/system/many_array/core_methods.js +178 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/chain.js +1 -1
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChanges.js +9 -8
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChangesFromNestedStore.js +6 -6
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/dataHashDidChange.js +6 -6
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/discardChanges.js +3 -3
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readDataHash.js +7 -7
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readEditableDataHash.js +4 -4
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/removeDataHash.js +7 -7
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/writeDataHash.js +7 -7
- data/frameworks/sproutcore/frameworks/datastore/tests/system/query/compare_records.js +126 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/query/evaluation.js +165 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/query/evaluation_of_records.js +82 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/query/find_all.js +362 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/query/parsing.js +170 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/query/record_type_is.js +43 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/query/registered_comparisons.js +60 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/query/registered_query_extensions.js +67 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/core_methods.js +2 -13
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitRecord.js +3 -4
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/core_methods.js +73 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/createRecord.js +15 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/dataSourceCallbacks.js +4 -2
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/destroyRecord.js +1 -1
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/pushChanges.js +2 -2
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/recordDidChange.js +1 -1
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/retrieveRecord.js +2 -2
- data/frameworks/sproutcore/frameworks/debug/core.js +60 -0
- data/frameworks/sproutcore/frameworks/deprecated/core.js +0 -2
- data/frameworks/sproutcore/frameworks/deprecated/server/server.js +0 -1
- data/frameworks/sproutcore/frameworks/deprecated/system/browser.js +0 -2
- data/frameworks/sproutcore/frameworks/deprecated/system/classic_responder.js +0 -2
- data/frameworks/sproutcore/frameworks/deprecated/system/event.js +0 -2
- data/frameworks/sproutcore/frameworks/deprecated/system/misc.js +0 -2
- data/frameworks/sproutcore/frameworks/deprecated/system/object.js +0 -2
- data/frameworks/sproutcore/frameworks/deprecated/system/path_module.js +0 -1
- data/frameworks/sproutcore/frameworks/deprecated/system/string.js +0 -2
- data/frameworks/sproutcore/frameworks/designer/coders/design.js +1 -2
- data/frameworks/sproutcore/frameworks/designer/coders/localization.js +1 -2
- data/frameworks/sproutcore/frameworks/designer/coders/object.js +1 -1
- data/frameworks/sproutcore/frameworks/designer/controllers/page_design.js +1 -1
- data/frameworks/sproutcore/frameworks/designer/ext/page.js +0 -2
- data/frameworks/sproutcore/frameworks/designer/ext/view.js +0 -2
- data/frameworks/sproutcore/frameworks/designer/views/controls/button.js +2 -3
- data/frameworks/sproutcore/frameworks/designer/views/designer.js +24 -8
- data/frameworks/sproutcore/frameworks/designer/views/label.js +1 -2
- data/frameworks/sproutcore/frameworks/designer/views/mixins/button.js +0 -2
- data/frameworks/sproutcore/frameworks/designer/views/tab.js +1 -2
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/alert.css +2 -2
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/drag.css +6 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/list_item.css +63 -10
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/menu_item_view.css +5 -4
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/modal.css +5 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/panel.css +1 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/slider.css +5 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/split_divider.css +1 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/tab.css +1 -1
- data/frameworks/sproutcore/frameworks/desktop/mixins/collection_row_delegate.js +61 -0
- data/frameworks/sproutcore/frameworks/desktop/mixins/collection_view_delegate.js +136 -79
- data/frameworks/sproutcore/frameworks/desktop/panes/alert.js +55 -24
- data/frameworks/sproutcore/frameworks/desktop/panes/menu.js +295 -147
- data/frameworks/sproutcore/frameworks/desktop/panes/palette.js +1 -1
- data/frameworks/sproutcore/frameworks/desktop/panes/panel.js +1 -1
- data/frameworks/sproutcore/frameworks/desktop/panes/picker.js +18 -20
- data/frameworks/sproutcore/frameworks/desktop/panes/sheet.js +2 -2
- data/frameworks/sproutcore/frameworks/desktop/protocols/drop_target.js +4 -4
- data/frameworks/sproutcore/frameworks/desktop/system/drag.js +337 -231
- data/frameworks/sproutcore/frameworks/desktop/system/root_responder.js +3 -3
- data/frameworks/sproutcore/frameworks/desktop/tests/integration/dialog.js +1 -1
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +2 -2
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/methods.js +46 -1
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/ui.js +4 -2
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/palette/ui.js +5 -6
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/ui.js +11 -11
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/ui.js +11 -7
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/sheet/ui.js +9 -9
- data/frameworks/sproutcore/frameworks/desktop/tests/views/button/ui.js +19 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +0 -1
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/content.js +249 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/deleteSelection.js +82 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/deselect.js +199 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/itemViewForContentIndex.js +288 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/layerIdFor.js +65 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/length.js +88 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/mouse.js +165 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/nowShowing.js +121 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/reload.js +177 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/select.js +240 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selectNextItem.js +191 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selectPreviousItem.js +197 -39
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selection.js +141 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/ui_diagram.js +182 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowDelegate.js +183 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowHeightForContentIndex.js +133 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowOffsetForContentIndex.js +132 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_outline.js +56 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_row_heights.js +167 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_simple.js +127 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list_item.js +30 -1
- data/frameworks/sproutcore/frameworks/desktop/tests/views/menu_item/ui.js +8 -8
- data/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +9 -9
- data/frameworks/sproutcore/frameworks/desktop/tests/views/scroller/methods.js +45 -6
- data/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/methods.js +2 -1
- data/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +17 -1
- data/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/ui.js +44 -29
- data/frameworks/sproutcore/frameworks/desktop/tests/views/stacked/ui_comments.js +231 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/web/ui.js +1 -1
- data/frameworks/sproutcore/frameworks/desktop/views/button.js +15 -4
- data/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +8 -1
- data/frameworks/sproutcore/frameworks/desktop/views/collection.js +1739 -1123
- data/frameworks/sproutcore/frameworks/desktop/views/form.js +0 -1
- data/frameworks/sproutcore/frameworks/desktop/views/grid.js +13 -11
- data/frameworks/sproutcore/frameworks/desktop/views/list.js +405 -571
- data/frameworks/sproutcore/frameworks/desktop/views/list_item.js +211 -74
- data/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +319 -169
- data/frameworks/sproutcore/frameworks/desktop/views/popup_button.js +57 -51
- data/frameworks/sproutcore/frameworks/desktop/views/progress.js +2 -2
- data/frameworks/sproutcore/frameworks/desktop/views/scene.js +150 -2
- data/frameworks/sproutcore/frameworks/desktop/views/scroll.js +92 -50
- data/frameworks/sproutcore/frameworks/desktop/views/scroller.js +86 -63
- data/frameworks/sproutcore/frameworks/desktop/views/segmented.js +38 -22
- data/frameworks/sproutcore/frameworks/desktop/views/select_field.js +51 -12
- data/frameworks/sproutcore/frameworks/desktop/views/slider.js +2 -0
- data/frameworks/sproutcore/frameworks/desktop/views/source_list.js +17 -1087
- data/frameworks/sproutcore/frameworks/desktop/views/source_list_group.js +3 -3
- data/frameworks/sproutcore/frameworks/desktop/views/split.js +35 -9
- data/frameworks/sproutcore/frameworks/desktop/views/stacked.js +101 -0
- data/frameworks/sproutcore/frameworks/desktop/views/tab.js +23 -22
- data/frameworks/sproutcore/frameworks/desktop/views/toolbar.js +1 -1
- data/frameworks/sproutcore/frameworks/foundation/controllers/array.js +382 -363
- data/frameworks/sproutcore/frameworks/foundation/controllers/controller.js +7 -279
- data/frameworks/sproutcore/frameworks/foundation/controllers/object.js +212 -310
- data/frameworks/sproutcore/frameworks/foundation/controllers/tree.js +109 -0
- data/frameworks/sproutcore/frameworks/foundation/core.js +25 -0
- data/frameworks/sproutcore/frameworks/foundation/debug/control_test_pane.js +30 -8
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/bootstrap.rhtml +19 -4
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/core.css +219 -3
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/debug/control-test-pane.css +1 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/label.css +30 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/strings.js +15 -0
- data/frameworks/sproutcore/frameworks/{desktop → foundation}/english.lproj/text_field.css +19 -3
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/view.css +6 -1
- data/frameworks/sproutcore/frameworks/foundation/license.js +19 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/button.js +15 -7
- data/frameworks/sproutcore/frameworks/foundation/mixins/collection_content.js +171 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/control.js +5 -5
- data/frameworks/sproutcore/frameworks/foundation/mixins/inline_text_field.js +462 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/selection_support.js +162 -84
- data/frameworks/sproutcore/frameworks/foundation/mixins/static_layout.js +33 -2
- data/frameworks/sproutcore/frameworks/foundation/mixins/string.js +17 -3
- data/frameworks/sproutcore/frameworks/foundation/mixins/tree_item_content.js +159 -0
- data/frameworks/sproutcore/frameworks/foundation/panes/pane.js +49 -20
- data/frameworks/sproutcore/frameworks/foundation/private/tree_item_observer.js +887 -0
- data/frameworks/sproutcore/frameworks/foundation/system/application.js +36 -0
- data/frameworks/sproutcore/frameworks/foundation/system/benchmark.js +310 -62
- data/frameworks/sproutcore/frameworks/foundation/system/datetime.js +729 -0
- data/frameworks/sproutcore/frameworks/foundation/system/event.js +57 -21
- data/frameworks/sproutcore/frameworks/foundation/system/ready.js +11 -5
- data/frameworks/sproutcore/frameworks/foundation/system/render_context.js +55 -16
- data/frameworks/sproutcore/frameworks/foundation/system/request.js +152 -27
- data/frameworks/sproutcore/frameworks/foundation/system/responder.js +120 -0
- data/frameworks/sproutcore/frameworks/foundation/system/responder_context.js +243 -0
- data/frameworks/sproutcore/frameworks/foundation/system/root_responder.js +29 -6
- data/frameworks/sproutcore/frameworks/foundation/system/routes.js +143 -102
- data/frameworks/sproutcore/frameworks/foundation/system/user_defaults.js +9 -2
- data/frameworks/sproutcore/frameworks/foundation/system/utils.js +104 -9
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/array_case.js +182 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/enum_case.js +193 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/null_case.js +64 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/single_case.js +136 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object/empty_case.js +82 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object/multiple_case.js +111 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object/single_case.js +193 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object/single_enumerable_case.js +179 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/tree/outline_case.js +108 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/mixins/button/keyEquivalents.js +35 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/mixins/staticLayout.js +128 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/mixins/string.js +17 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/flat_case.js +325 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/group_case.js +718 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/outline_case.js +484 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_core.js +28 -28
- data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_selector.js +1 -1
- data/frameworks/sproutcore/frameworks/foundation/tests/system/datetime.js +151 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/get.js +2 -2
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_attr.js +1 -1
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_basic.js +1 -1
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_className.js +12 -12
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_style.js +1 -1
- data/frameworks/sproutcore/frameworks/foundation/tests/system/request.js +52 -14
- data/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/root_responder.js +27 -23
- data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/schedule.js +1 -1
- data/frameworks/sproutcore/frameworks/foundation/tests/validators/date.js +12 -10
- data/frameworks/sproutcore/frameworks/foundation/tests/views/label/ui.js +148 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/pane/append_remove.js +1 -1
- data/frameworks/sproutcore/frameworks/{desktop → foundation}/tests/views/text_field/methods.js +0 -0
- data/frameworks/sproutcore/frameworks/{desktop → foundation}/tests/views/text_field/ui.js +53 -1
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/clippingFrame.js +1 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/convertFrames.js +1 -1
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/createChildViews.js +35 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/findLayerInParentLayer.js +1 -1
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/isVisible.js +51 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/isVisibleInWindow.js +12 -1
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/layoutStyle.js +83 -3
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/prepareContext.js +1 -1
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/updateLayer.js +4 -0
- data/frameworks/sproutcore/frameworks/foundation/views/container.js +1 -1
- data/frameworks/sproutcore/frameworks/foundation/views/field.js +27 -16
- data/frameworks/sproutcore/frameworks/foundation/views/image.js +4 -1
- data/frameworks/sproutcore/frameworks/foundation/views/label.js +16 -6
- data/frameworks/sproutcore/frameworks/{desktop → foundation}/views/text_field.js +39 -15
- data/frameworks/sproutcore/frameworks/foundation/views/view.js +328 -83
- data/frameworks/sproutcore/frameworks/runtime/README +1 -0
- data/frameworks/sproutcore/frameworks/runtime/core.js +110 -31
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/base.js +238 -0
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/indexOf.js +33 -0
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/insertAt.js +121 -0
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/objectAt.js +34 -0
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/popObject.js +50 -0
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/pushObject.js +46 -0
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/rangeObserver.js +371 -0
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/removeAt.js +100 -0
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/removeObject.js +49 -0
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/replace.js +94 -0
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/shiftObject.js +50 -0
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/unshiftObject.js +47 -0
- data/frameworks/sproutcore/frameworks/runtime/mixins/array.js +320 -110
- data/frameworks/sproutcore/frameworks/runtime/mixins/copyable.js +64 -0
- data/frameworks/sproutcore/frameworks/runtime/mixins/delegate_support.js +44 -6
- data/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +142 -77
- data/frameworks/sproutcore/frameworks/runtime/mixins/freezable.js +104 -0
- data/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +298 -142
- data/frameworks/sproutcore/frameworks/runtime/private/chain_observer.js +17 -11
- data/frameworks/sproutcore/frameworks/runtime/private/observer_queue.js +55 -15
- data/frameworks/sproutcore/frameworks/runtime/private/observer_set.js +29 -5
- data/frameworks/sproutcore/frameworks/runtime/protocols/observable_protocol.js +40 -0
- data/frameworks/sproutcore/frameworks/runtime/system/binding.js +39 -15
- data/frameworks/sproutcore/frameworks/runtime/system/index_set.js +1166 -0
- data/frameworks/sproutcore/frameworks/runtime/system/object.js +33 -15
- data/frameworks/sproutcore/frameworks/runtime/system/range_observer.js +201 -35
- data/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +42 -15
- data/frameworks/sproutcore/frameworks/runtime/system/selection_set.js +649 -0
- data/frameworks/sproutcore/frameworks/runtime/system/set.js +183 -54
- data/frameworks/sproutcore/frameworks/runtime/system/sparse_array.js +20 -11
- data/frameworks/sproutcore/frameworks/runtime/tests/core/clone.js +2 -2
- data/frameworks/sproutcore/frameworks/runtime/tests/core/compare.js +44 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/core/console.js +16 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/core/keys.js +1 -1
- data/frameworks/sproutcore/frameworks/runtime/tests/core/makeArray.js +1 -1
- data/frameworks/sproutcore/frameworks/runtime/tests/core/objectForPropertyPath.js +5 -5
- data/frameworks/sproutcore/frameworks/runtime/tests/mixins/array.js +57 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/mixins/enumerable.js +21 -2
- data/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/observable.js +249 -129
- data/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/propertyChanges.js +11 -2
- data/frameworks/sproutcore/frameworks/runtime/tests/private/observer_queue/isObservingSuspended.js +55 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/binding.js +81 -6
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/add.js +195 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/clone.js +43 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/contains.js +74 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/create.js +42 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/indexAfter.js +38 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/indexBefore.js +38 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/intersects.js +74 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/max.js +40 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/min.js +40 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/rangeStartForIndex.js +36 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/remove.js +189 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/without.js +89 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/object/base.js +1 -1
- data/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/create.js +59 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/destroy.js +75 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/objectPropertyDidChange.js +117 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/rangeDidChange.js +110 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/update.js +65 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/run_loop.js +3 -3
- data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/add.js +92 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/copy.js +17 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/indexSetForSource.js +85 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/isEqual.js +60 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/remove.js +87 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/set.js +4 -25
- data/frameworks/sproutcore/frameworks/runtime/tests/system/sparse_array.js +39 -1
- data/frameworks/sproutcore/frameworks/testing/core.js +183 -0
- data/frameworks/sproutcore/frameworks/testing/english.lproj/runner.css +126 -0
- data/frameworks/sproutcore/frameworks/testing/extras.js +0 -26
- data/frameworks/sproutcore/frameworks/testing/qunit.js +33 -25
- data/frameworks/sproutcore/frameworks/testing/system/dump.js +205 -0
- data/frameworks/sproutcore/frameworks/testing/system/equiv.js +201 -0
- data/frameworks/sproutcore/frameworks/testing/system/plan.js +691 -0
- data/frameworks/sproutcore/frameworks/testing/system/runner.js +209 -0
- data/frameworks/sproutcore/frameworks/testing/system/suite.js +228 -0
- data/frameworks/sproutcore/frameworks/testing/utils.js +8 -1
- data/frameworks/sproutcore/lib/index.rhtml +4 -1
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/10.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/100.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/102.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/110.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/120.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/127.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/18.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/19.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/2.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/24.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/26.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/27.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/28.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/29.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/30.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/31.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/33.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/37.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/41.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/99.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/10.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/100.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/102.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/110.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/120.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/127.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/18.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/19.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/2.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/24.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/26.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/27.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/28.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/29.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/30.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/31.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/33.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/37.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/41.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/99.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/10.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/100.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/102.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/110.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/120.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/127.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/18.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/19.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/2.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/24.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/26.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/27.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/28.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/29.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/30.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/31.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/33.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/37.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/41.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/99.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/48/10.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/48/18.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/48/19.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/icons/48/2.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/sc-theme-repeat-x-2.psd +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/sc-theme-repeat-x.psd +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/sc-theme-sprite.psd +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/sc-theme-ysprite.psd +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/shared-icons.psd +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/sproutcore-logo.psd +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/sticky-note.psd +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/button.css +191 -193
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/checkbox.css +11 -10
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/collection.css +85 -4
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/core.css +15 -2
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/images/sc-theme-repeat-x.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/label.css +0 -26
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/list_item.css +30 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/progress.css +9 -6
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/radio.css +20 -11
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/segmented.css +192 -54
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/slider.css +56 -24
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/tab.css +13 -7
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/text_field.css +1 -4
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/toolbar.css +4 -1
- data/lib/sproutcore/builders/minify.rb +2 -2
- data/lib/sproutcore/builders/test.rb +1 -1
- data/lib/sproutcore/buildfile.rb +1 -0
- data/lib/sproutcore/rack/dev.rb +1 -1
- data/lib/sproutcore/rack/filesystem.rb +265 -0
- data/lib/sproutcore/rack/proxy.rb +11 -3
- data/lib/sproutcore/rack/service.rb +11 -1
- data/lib/sproutcore/tools.rb +11 -1
- data/lib/sproutcore/tools/server.rb +6 -4
- data/vendor/jsdoc/README.txt +151 -0
- data/vendor/jsdoc/changes.txt +47 -0
- metadata +263 -308
- data/frameworks/sproutcore/apps/sc_jsdoc/controllers/docs.js +0 -149
- data/frameworks/sproutcore/apps/sc_jsdoc/core.js +0 -16
- data/frameworks/sproutcore/apps/sc_jsdoc/english.lproj/body.css +0 -17
- data/frameworks/sproutcore/apps/sc_jsdoc/english.lproj/body.js +0 -99
- data/frameworks/sproutcore/apps/sc_jsdoc/english.lproj/images/sproutcore-logo.png +0 -0
- data/frameworks/sproutcore/apps/sc_jsdoc/main.js +0 -27
- data/frameworks/sproutcore/apps/sc_jsdoc/models/doc.js +0 -21
- data/frameworks/sproutcore/apps/sc_qunit/controllers/runner.js +0 -209
- data/frameworks/sproutcore/apps/sc_qunit/core.js +0 -16
- data/frameworks/sproutcore/apps/sc_qunit/english.lproj/body.css +0 -17
- data/frameworks/sproutcore/apps/sc_qunit/english.lproj/body.js +0 -107
- data/frameworks/sproutcore/apps/sc_qunit/english.lproj/images/sproutcore-logo.png +0 -0
- data/frameworks/sproutcore/apps/sc_qunit/english.lproj/strings.js +0 -15
- data/frameworks/sproutcore/apps/sc_qunit/main.js +0 -18
- data/frameworks/sproutcore/apps/sc_qunit/models/test.js +0 -24
- data/frameworks/sproutcore/apps/sc_qunit/views/test_iframe.js +0 -52
- data/frameworks/sproutcore/apps/tests/controllers/test.js +0 -20
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/blank.gif +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/menu.css +0 -83
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/palette.css +0 -3
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/methods.js +0 -10
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list/methods.js +0 -10
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui.js +0 -110
- data/frameworks/sproutcore/frameworks/foundation/mixins/responder.js +0 -156
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array.js +0 -118
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/controller.js +0 -268
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object.js +0 -433
- data/frameworks/sproutcore/frameworks/runtime/tests/system/array.js +0 -263
- data/frameworks/sproutcore/frameworks/testing/tests/debug/qunit.js +0 -25
- data/spec/buildtasks/manifest/spec_helper.rb +0 -35
- data/spec/buildtasks/target_spec.rb +0 -214
- data/spec/fixtures/builder_tests/Buildfile +0 -15
- data/spec/fixtures/builder_tests/apps/combine_test/a.js +0 -1
- data/spec/fixtures/builder_tests/apps/combine_test/b.js +0 -1
- data/spec/fixtures/builder_tests/apps/combine_test/c.js +0 -1
- data/spec/fixtures/builder_tests/apps/combine_test/english.lproj/a.css +0 -1
- data/spec/fixtures/builder_tests/apps/combine_test/english.lproj/b.css +0 -1
- data/spec/fixtures/builder_tests/apps/combine_test/english.lproj/c.css +0 -1
- data/spec/fixtures/builder_tests/apps/html_test/english.lproj/bar1_sample.rhtml +0 -2
- data/spec/fixtures/builder_tests/apps/html_test/english.lproj/erb_sample.html.erb +0 -1
- data/spec/fixtures/builder_tests/apps/html_test/english.lproj/icons/image.png +0 -0
- data/spec/fixtures/builder_tests/apps/html_test/english.lproj/image.jpg +0 -0
- data/spec/fixtures/builder_tests/apps/html_test/english.lproj/rhtml_sample.rhtml +0 -1
- data/spec/fixtures/builder_tests/apps/html_test/english.lproj/strings.js +0 -4
- data/spec/fixtures/builder_tests/apps/html_test/english.lproj/style.css +0 -0
- data/spec/fixtures/builder_tests/apps/html_test/french.lproj/french-icons/fr.png +0 -0
- data/spec/fixtures/builder_tests/apps/html_test/french.lproj/strings.js +0 -4
- data/spec/fixtures/builder_tests/apps/html_test/lib/layout_template.rhtml +0 -1
- data/spec/fixtures/builder_tests/apps/html_test/scripts.js +0 -0
- data/spec/fixtures/builder_tests/apps/javascript_test/sc_static.js +0 -15
- data/spec/fixtures/builder_tests/apps/javascript_test/sc_super.js +0 -4
- data/spec/fixtures/builder_tests/apps/javascript_test/strings.js +0 -7
- data/spec/fixtures/builder_tests/apps/sass_test/sample.sass +0 -3
- data/spec/fixtures/builder_tests/apps/strings_test/lproj/strings.js +0 -8
- data/spec/fixtures/builder_tests/apps/stylesheet_test/build_directives.css +0 -9
- data/spec/fixtures/builder_tests/apps/stylesheet_test/sc_static.css +0 -12
- data/spec/fixtures/builder_tests/apps/test_test/lib/alt_layout.rhtml +0 -1
- data/spec/fixtures/builder_tests/apps/test_test/lib/test_layout.rhtml +0 -3
- data/spec/fixtures/builder_tests/apps/test_test/tests/qunit_test.js +0 -1
- data/spec/fixtures/builder_tests/apps/test_test/tests/qunit_test2.js +0 -1
- data/spec/fixtures/builder_tests/apps/test_test/tests/rhtml_test.rhtml +0 -4
- data/spec/fixtures/builder_tests/frameworks/debug/core.js +0 -0
- data/spec/fixtures/builder_tests/frameworks/debug/english.lproj/dummy.css +0 -0
- data/spec/fixtures/builder_tests/frameworks/qunit/core.js +0 -0
- data/spec/fixtures/builder_tests/frameworks/qunit/english.lproj/dummy.css +0 -0
- data/spec/fixtures/builder_tests/frameworks/req_target_1/english.lproj/req_style_1.css +0 -0
- data/spec/fixtures/builder_tests/frameworks/req_target_1/english.lproj/strings.js +0 -4
- data/spec/fixtures/builder_tests/frameworks/req_target_1/english.lproj/test.rhtml +0 -1
- data/spec/fixtures/builder_tests/frameworks/req_target_1/req_js_1.js +0 -0
- data/spec/fixtures/builder_tests/frameworks/req_target_2/english.lproj/req_style_2.css +0 -0
- data/spec/fixtures/builder_tests/frameworks/req_target_2/english.lproj/test.rhtml +0 -1
- data/spec/fixtures/builder_tests/frameworks/req_target_2/javascript.js +0 -1
- data/spec/fixtures/builder_tests/frameworks/req_target_2/lib/alt_layout.rhtml +0 -0
- data/spec/fixtures/builder_tests/frameworks/req_target_2/req_js_2.js +0 -0
- data/spec/fixtures/builder_tests/themes/sample_theme/Buildfile +0 -1
- data/spec/fixtures/buildfiles/basic/Buildfile +0 -16
- data/spec/fixtures/buildfiles/basic/task_module.rake +0 -6
- data/spec/fixtures/buildfiles/installed/Buildfile +0 -7
- data/spec/fixtures/buildfiles/installed/Buildfile2 +0 -5
- data/spec/fixtures/buildfiles/project_test/Buildfile +0 -4
- data/spec/fixtures/buildfiles/project_test/not_project/Buildfile +0 -2
- data/spec/fixtures/buildfiles/project_test/not_project/child/PLACEHOLDER +0 -0
- data/spec/fixtures/entry_for_project/Buildfile +0 -1
- data/spec/fixtures/entry_for_project/apps/test_app/frameworks/nested/PLACEHOLDER +0 -0
- data/spec/fixtures/entry_for_project/frameworks/shared/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/Buildfile +0 -8
- data/spec/fixtures/find_targets/custom/bars/bar1/bars/bar1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/bars/bar1/bars/bar2/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/bars/bar1/foos/foo1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/bars/bar1/foos/foo2/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/foos/custom_foos/Buildfile +0 -5
- data/spec/fixtures/find_targets/custom/foos/custom_foos/custom_foodir/foo1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/foos/custom_foos/custom_foodir/foo2/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/foos/custom_foos/foos/not_foo1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/foos/foo1/bars/bar1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/foos/foo1/bars/bar2/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/nested/Buildfile +0 -8
- data/spec/fixtures/find_targets/nested/apps/app1/Buildfile +0 -1
- data/spec/fixtures/find_targets/nested/apps/app1/apps/nested_app/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/standard/Apps/app1/frameworks/framework1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/standard/Apps/app1/frameworks/framework2/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/standard/clients/client1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/standard/frameworks/framework1/frameworks/framework1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/standard/frameworks/framework2/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/standard/themes/theme1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/standard/themes/theme2/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/caps_long_names/English.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/caps_long_names/FreNCH.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/caps_long_names/UnknOWN.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/long_names/english.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/long_names/french.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/long_names/german.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/long_names/italian.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/long_names/japanese.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/long_names/spanish.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/long_names/unknown.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/no_names/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/de.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/en-CA.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/en-GB.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/en-US.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/en.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/es.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/foo.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/fr.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/it.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/ja.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/1.js +0 -1
- data/spec/fixtures/ordered_entries/apps/no_requires/B.js +0 -1
- data/spec/fixtures/ordered_entries/apps/no_requires/a.js +0 -1
- data/spec/fixtures/ordered_entries/apps/no_requires/a/a.js +0 -1
- data/spec/fixtures/ordered_entries/apps/no_requires/a/b.js +0 -1
- data/spec/fixtures/ordered_entries/apps/no_requires/b/a.js +0 -1
- data/spec/fixtures/ordered_entries/apps/no_requires/c.js +0 -1
- data/spec/fixtures/ordered_entries/apps/no_requires/core.js +0 -1
- data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/B.css +0 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/a.css +0 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/a/a.css +0 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/a/b.css +0 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/b/a.css +0 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/c.css +0 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/lproj/strings.js +0 -1
- data/spec/fixtures/ordered_entries/apps/no_requires/utils.js +0 -1
- data/spec/fixtures/ordered_entries/apps/with_requires/a.js +0 -2
- data/spec/fixtures/ordered_entries/apps/with_requires/b.js +0 -3
- data/spec/fixtures/ordered_entries/apps/with_requires/c.js +0 -2
- data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/a.css +0 -2
- data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/b.css +0 -2
- data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/c.css +0 -2
- data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/d.js +0 -1
- data/spec/fixtures/real_world/Buildfile +0 -12
- data/spec/fixtures/real_world/apps/account/README +0 -1
- data/spec/fixtures/real_world/apps/calendar/README +0 -1
- data/spec/fixtures/real_world/apps/contacts/README_BEFORE_EDITING +0 -1
- data/spec/fixtures/real_world/apps/files/README +0 -1
- data/spec/fixtures/real_world/apps/mail/README +0 -1
- data/spec/fixtures/real_world/apps/mobile_photos/README +0 -1
- data/spec/fixtures/real_world/apps/photos/README +0 -1
- data/spec/fixtures/real_world/apps/uploader/README +0 -1
- data/spec/fixtures/real_world/frameworks/core_files/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/core_photos/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/shared/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/Buildfile +0 -26
- data/spec/fixtures/real_world/frameworks/sproutcore/README +0 -1
- data/spec/fixtures/real_world/frameworks/sproutcore/apps/docs/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/apps/test_runner/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/core.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/debug/debug-resource.html +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/debug/sample_debug.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/demo2.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/debug/sample_debug-loc.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo.css +0 -4
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo.html +0 -1
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo2.sass +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/file_extension_test.haml +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/file_extension_test.html.erb +0 -1
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/file_extension_test.rhtml +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/fixtures/sample_fixtures-loc.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/has_require.css +0 -4
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/no_require.css +0 -1
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/no_sc_resource.rhtml +0 -1
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/protocols/sample-loc.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/sc_resource.css +0 -6
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/sc_resource.rhtml +0 -3
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/strings.js +0 -1
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/tests/sample-loc.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/fixtures/sample-json-fixture.json +0 -1
- data/spec/fixtures/real_world/frameworks/sproutcore/fixtures/sample_fixtures.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/application/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/costello/core.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/data_store/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/debug/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/desktop/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/empty_theme/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/foundation/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/mobile/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/qunit/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/uploader/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/french.lproj/french-resource.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/french.lproj/strings.js +0 -1
- data/spec/fixtures/real_world/frameworks/sproutcore/german.lproj/german-resource.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/german.lproj/strings.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/has_require.js +0 -4
- data/spec/fixtures/real_world/frameworks/sproutcore/lib/index.html +0 -1
- data/spec/fixtures/real_world/frameworks/sproutcore/no_require.js +0 -1
- data/spec/fixtures/real_world/frameworks/sproutcore/protocols/sample.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/sc_resource.js +0 -6
- data/spec/fixtures/real_world/frameworks/sproutcore/tests/nested/sample1.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/tests/nested/sample2.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/tests/sample.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/tests/sample.rhtml +0 -1
- data/spec/fixtures/real_world/frameworks/sproutcore/themes/standard_theme/README +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/views/view.js +0 -1
- data/spec/fixtures/real_world/generators/sample_custom/Buildfile +0 -0
- data/spec/fixtures/real_world/generators/sample_custom/templates/{filename}.js +0 -1
- data/spec/fixtures/recursive_project/Buildfile +0 -8
- data/spec/fixtures/recursive_project/frameworks/sproutcore/frameworks/costello/PLACEHOLDER +0 -0
- data/spec/lib/builders/combine_spec.rb +0 -67
- data/spec/lib/builders/html_spec.rb +0 -577
- data/spec/lib/builders/javascript_spec.rb +0 -81
- data/spec/lib/builders/sass_spec.rb +0 -43
- data/spec/lib/builders/spec_helper.rb +0 -30
- data/spec/lib/builders/strings_spec.rb +0 -52
- data/spec/lib/builders/stylesheet_spec.rb +0 -63
- data/spec/lib/builders/test_index_spec.rb +0 -44
- data/spec/lib/builders/test_spec.rb +0 -135
- data/spec/lib/buildfile/config_for_spec.rb +0 -81
- data/spec/lib/buildfile/define_spec.rb +0 -59
- data/spec/lib/buildfile/dup_spec.rb +0 -65
- data/spec/lib/buildfile/invoke_spec.rb +0 -130
- data/spec/lib/buildfile/load_spec.rb +0 -49
- data/spec/lib/buildfile/task/dup_spec.rb +0 -55
- data/spec/lib/buildfile/task_defined_spec.rb +0 -17
- data/spec/lib/buildfile_commands/build_task_spec.rb +0 -19
- data/spec/lib/buildfile_commands/config_spec.rb +0 -97
- data/spec/lib/buildfile_commands/import_spec.rb +0 -17
- data/spec/lib/buildfile_commands/namespace_spec.rb +0 -18
- data/spec/lib/buildfile_commands/proxies_spec.rb +0 -38
- data/spec/lib/buildfile_commands/replace_task_spec.rb +0 -29
- data/spec/lib/buildfile_commands/task_spec.rb +0 -36
- data/spec/lib/helpers/packing_optimizer/optimize_spec.rb +0 -26
- data/spec/lib/models/hash_struct/deep_clone_spec.rb +0 -27
- data/spec/lib/models/hash_struct/has_options_spec.rb +0 -32
- data/spec/lib/models/hash_struct/hash_spec.rb +0 -64
- data/spec/lib/models/hash_struct/merge_spec.rb +0 -26
- data/spec/lib/models/hash_struct/method_missing.rb +0 -41
- data/spec/lib/models/manifest/add_entry_spec.rb +0 -36
- data/spec/lib/models/manifest/add_transform_spec.rb +0 -90
- data/spec/lib/models/manifest/build_spec.rb +0 -78
- data/spec/lib/models/manifest/entry_for_spec.rb +0 -94
- data/spec/lib/models/manifest/find_entry.rb +0 -84
- data/spec/lib/models/manifest/prepare_spec.rb +0 -62
- data/spec/lib/models/manifest_entry/cacheable_url_spec.rb +0 -31
- data/spec/lib/models/manifest_entry/prepare_spec.rb +0 -54
- data/spec/lib/models/project/add_target_spec.rb +0 -44
- data/spec/lib/models/project/buildfile_spec.rb +0 -35
- data/spec/lib/models/project/find_targets_for_spec.rb +0 -77
- data/spec/lib/models/project/load_nearest_project_spec.rb +0 -23
- data/spec/lib/models/project/target_for_spec.rb +0 -33
- data/spec/lib/models/project/targets_spec.rb +0 -62
- data/spec/lib/models/target/compute_build_number_spec.rb +0 -125
- data/spec/lib/models/target/config_spec.rb +0 -30
- data/spec/lib/models/target/expand_required_targets_spec.rb +0 -48
- data/spec/lib/models/target/installed_languages_spec.rb +0 -47
- data/spec/lib/models/target/lproj_for_spec.rb +0 -38
- data/spec/lib/models/target/manifest_for_spec.rb +0 -42
- data/spec/lib/models/target/parent_target_spec.rb +0 -21
- data/spec/lib/models/target/prepare_spec.rb +0 -53
- data/spec/lib/models/target/required_targets_spec.rb +0 -119
- data/spec/lib/models/target/target_for_spec.rb +0 -56
- data/spec/lib/tools/build_number_spec.rb +0 -28
- data/spec/lib/tools/gen_spec.rb +0 -207
- data/spec/lib/tools/tools_spec.rb +0 -78
- data/spec/spec_helper.rb +0 -138
- data/vendor/github_gem_lint.rb +0 -22
- data/vendor/yui-compressor/yuicompressor-2.4.2.jar +0 -0
@@ -75,6 +75,7 @@ require('views/view');
|
|
75
75
|
that should not steal keyboard control from another view.
|
76
76
|
|
77
77
|
@extends SC.View
|
78
|
+
@extends SC.ResponderContext
|
78
79
|
@since SproutCore 1.0
|
79
80
|
*/
|
80
81
|
SC.Pane = SC.View.extend({
|
@@ -115,7 +116,12 @@ SC.Pane = SC.View.extend({
|
|
115
116
|
height: (pframe) ? pframe.height : 1000
|
116
117
|
} ;
|
117
118
|
},
|
118
|
-
|
119
|
+
|
120
|
+
/** @private Disable caching due to an known bug in SC. */
|
121
|
+
frame: function() {
|
122
|
+
return this.computeFrameWithParentFrame(null) ;
|
123
|
+
}.property(),
|
124
|
+
|
119
125
|
/**
|
120
126
|
Invoked by the root responder whenever the window resizes. This should
|
121
127
|
simply begin the process of notifying children that the view size has
|
@@ -152,7 +158,14 @@ SC.Pane = SC.View.extend({
|
|
152
158
|
|
153
159
|
// if no handler was found in the responder chain, try the default
|
154
160
|
if (!target && (target = this.get('defaultResponder'))) {
|
155
|
-
|
161
|
+
if (typeof target === SC.T_STRING) {
|
162
|
+
target = SC.objectForPropertyPath(target);
|
163
|
+
}
|
164
|
+
|
165
|
+
if (!target) target = null;
|
166
|
+
else if (target.isResponderContext) {
|
167
|
+
target = target.sendAction(action, this, evt);
|
168
|
+
} else target = target.tryToPerform(action, evt) ? target : null ;
|
156
169
|
}
|
157
170
|
|
158
171
|
return evt.mouseHandler || target ;
|
@@ -169,11 +182,11 @@ SC.Pane = SC.View.extend({
|
|
169
182
|
defaultResponder: null,
|
170
183
|
|
171
184
|
/** @property
|
172
|
-
|
185
|
+
Pane's never have a next responder
|
173
186
|
*/
|
174
187
|
nextResponder: function() {
|
175
|
-
return
|
176
|
-
}.property(
|
188
|
+
return null;
|
189
|
+
}.property().cacheable(),
|
177
190
|
|
178
191
|
/** @property
|
179
192
|
The first responder. This is the first view that should receive action
|
@@ -231,7 +244,7 @@ SC.Pane = SC.View.extend({
|
|
231
244
|
if (current === view) return this ; // nothing to do
|
232
245
|
|
233
246
|
// notify current of firstResponder change
|
234
|
-
if (current) current.willLoseFirstResponder();
|
247
|
+
if (current) current.willLoseFirstResponder(current);
|
235
248
|
|
236
249
|
// if we are currently key pane, then notify key views of change also
|
237
250
|
if (isKeyPane) {
|
@@ -260,7 +273,7 @@ SC.Pane = SC.View.extend({
|
|
260
273
|
if (current) current.didLoseKeyResponderTo(view) ;
|
261
274
|
}
|
262
275
|
|
263
|
-
if (view) view.didBecomeFirstResponder();
|
276
|
+
if (view) view.didBecomeFirstResponder(view);
|
264
277
|
return this ;
|
265
278
|
},
|
266
279
|
|
@@ -344,6 +357,20 @@ SC.Pane = SC.View.extend({
|
|
344
357
|
|
345
358
|
isMainPane: NO,
|
346
359
|
|
360
|
+
/**
|
361
|
+
Invoked when the pane is about to become the focused pane.
|
362
|
+
|
363
|
+
@param {SC.Pane} pane the pane that currently have focus
|
364
|
+
*/
|
365
|
+
focusFrom: function(pane) {},
|
366
|
+
|
367
|
+
/**
|
368
|
+
Invoked when the the pane is about to lose its focused pane status.
|
369
|
+
|
370
|
+
@param {SC.Pane} pane the pane that will receive focus next
|
371
|
+
*/
|
372
|
+
blurTo: function(pane) {},
|
373
|
+
|
347
374
|
/**
|
348
375
|
Invoked when the view is about to lose its mainPane status. The default
|
349
376
|
implementation will also remove the pane from the document since you can't
|
@@ -373,37 +400,39 @@ SC.Pane = SC.View.extend({
|
|
373
400
|
|
374
401
|
@param {SC.RootResponder} rootResponder
|
375
402
|
@returns {SC.Pane} receiver
|
376
|
-
|
403
|
+
|
377
404
|
*/
|
378
|
-
append: function() {
|
405
|
+
append: function() {
|
379
406
|
return this.appendTo(document.body) ;
|
380
407
|
},
|
381
|
-
|
408
|
+
|
382
409
|
/**
|
383
410
|
Removes the pane from the document. This will remove the
|
384
411
|
DOM node and deregister you from the document window.
|
385
412
|
*/
|
386
413
|
remove: function() {
|
387
|
-
if (!this.get('isVisibleInWindow')) return this; // nothing to do
|
388
|
-
|
414
|
+
if (!this.get('isVisibleInWindow')) return this ; // nothing to do
|
415
|
+
if (!this.get('isPaneAttached')) return this ; // nothing to do
|
416
|
+
|
389
417
|
// remove layer...
|
390
418
|
var dom = this.get('layer') ;
|
391
|
-
if (dom.parentNode) dom.parentNode.removeChild(dom);
|
392
|
-
dom = null;
|
419
|
+
if (dom.parentNode) dom.parentNode.removeChild(dom) ;
|
420
|
+
dom = null ;
|
393
421
|
|
394
422
|
// remove from the RootResponder also
|
395
423
|
var responder = this.rootResponder ;
|
396
424
|
if (this.get('isKeyPane')) responder.makeKeyPane(null) ; // orders matter, remove keyPane first
|
397
|
-
if (this.get('isMainPane')) responder.makeMainPane(null);
|
398
|
-
responder.panes.remove(this);
|
425
|
+
if (this.get('isMainPane')) responder.makeMainPane(null) ;
|
426
|
+
responder.panes.remove(this) ;
|
399
427
|
this.rootResponder = responder = null ;
|
400
|
-
|
401
|
-
// clean up some of my own properties
|
428
|
+
|
429
|
+
// clean up some of my own properties
|
402
430
|
this.set('isPaneAttached', NO) ;
|
403
431
|
this.parentViewDidChange() ;
|
432
|
+
return this ;
|
404
433
|
},
|
405
|
-
|
406
|
-
/**
|
434
|
+
|
435
|
+
/**
|
407
436
|
Inserts the pane into the DOM as the last child of the passed DOM element.
|
408
437
|
You can pass in either a CoreQuery object or a selector, which will be
|
409
438
|
converted to a CQ object. You can optionally pass in the rootResponder
|
@@ -0,0 +1,887 @@
|
|
1
|
+
// ==========================================================================
|
2
|
+
// Project: SproutCore - JavaScript Application Framework
|
3
|
+
// Copyright: ©2006-2009 Sprout Systems, Inc. and contributors.
|
4
|
+
// Portions ©2008-2009 Apple, Inc. All rights reserved.
|
5
|
+
// License: Licened under MIT license (see license.js)
|
6
|
+
// ==========================================================================
|
7
|
+
|
8
|
+
sc_require('mixins/tree_item_content');
|
9
|
+
sc_require('mixins/collection_content');
|
10
|
+
|
11
|
+
/**
|
12
|
+
@class
|
13
|
+
|
14
|
+
A TreeNode is an internal class that will manage a single item in a tree
|
15
|
+
when trying to display the item in a hierarchy.
|
16
|
+
|
17
|
+
When displaying a tree of objects, a tree item object will be nested to
|
18
|
+
cover every object that might have child views.
|
19
|
+
|
20
|
+
TreeNode stores an array which contains either a number pointing to the
|
21
|
+
next place in the array there is a child item or it contains a child item.
|
22
|
+
|
23
|
+
@extends SC.Object
|
24
|
+
@extends SC.Array
|
25
|
+
@extends SC.CollectionContent
|
26
|
+
@since SproutCore 1.0
|
27
|
+
*/
|
28
|
+
SC.TreeItemObserver = SC.Object.extend(SC.Array, SC.CollectionContent, {
|
29
|
+
|
30
|
+
/**
|
31
|
+
The node in the tree this observer will manage. Set when creating the
|
32
|
+
object. If you are creating an observer manually, you must set this to
|
33
|
+
a non-null value.
|
34
|
+
*/
|
35
|
+
item: null,
|
36
|
+
|
37
|
+
/**
|
38
|
+
The controller delegate. If the item does not implement the
|
39
|
+
TreeItemContent method, delegate properties will be used to determine how
|
40
|
+
to access the content. Set automatically when a tree item is created.
|
41
|
+
|
42
|
+
If you are creating an observer manually, you must set this to a non-null
|
43
|
+
value.
|
44
|
+
*/
|
45
|
+
delegate: null,
|
46
|
+
|
47
|
+
// ..........................................................
|
48
|
+
// FOR NESTED OBSERVERS
|
49
|
+
//
|
50
|
+
|
51
|
+
/**
|
52
|
+
The parent TreeItemObserver for this observer. Must be set on create.
|
53
|
+
*/
|
54
|
+
parentObserver: null,
|
55
|
+
|
56
|
+
/**
|
57
|
+
The parent item for the observer item. Computed automatically from the
|
58
|
+
parent. If the value of this is null, then this is the root of the tree.
|
59
|
+
*/
|
60
|
+
parentItem: function() {
|
61
|
+
var p = this.get('parentObserver');
|
62
|
+
return p ? p.get('item') : null;
|
63
|
+
}.property('parentObserver').cacheable(),
|
64
|
+
|
65
|
+
/**
|
66
|
+
Index location in parent's children array. If this is the root item
|
67
|
+
in the tree, should be null.
|
68
|
+
*/
|
69
|
+
index: null,
|
70
|
+
|
71
|
+
outlineLevel: 0,
|
72
|
+
|
73
|
+
// ..........................................................
|
74
|
+
// EXTRACTED FROM ITEM
|
75
|
+
//
|
76
|
+
|
77
|
+
/**
|
78
|
+
Array of child tree items. Extracted from the item automatically on init.
|
79
|
+
*/
|
80
|
+
children: null,
|
81
|
+
|
82
|
+
/**
|
83
|
+
Disclosure state of this item. Must be SC.BRANCH_OPEN or SC.BRANCH_CLOSED
|
84
|
+
If this is the root of a item tree, the observer will have children but
|
85
|
+
no parent or parent item. IN this case the disclosure state is always
|
86
|
+
SC.BRANCH_OPEN.
|
87
|
+
|
88
|
+
@property
|
89
|
+
@type Number
|
90
|
+
*/
|
91
|
+
disclosureState: SC.BRANCH_OPEN,
|
92
|
+
|
93
|
+
/**
|
94
|
+
IndexSet of children with branches. This will ask the delegate to name
|
95
|
+
these indexes. The default implementation will iterate over the children
|
96
|
+
of the item but a more optimized version could avoid touching each item.
|
97
|
+
|
98
|
+
@property
|
99
|
+
@type SC.IndexSet
|
100
|
+
*/
|
101
|
+
branchIndexes: function() {
|
102
|
+
var item = this.get('item'),
|
103
|
+
len, pitem, idx, children, ret;
|
104
|
+
|
105
|
+
// no item - no branches
|
106
|
+
if (!item) return SC.IndexSet.EMPTY;
|
107
|
+
|
108
|
+
// if item is treeItemContent then ask it directly
|
109
|
+
else if (item.isTreeItemContent) {
|
110
|
+
pitem = this.get('parentItem');
|
111
|
+
idx = this.get('index') ;
|
112
|
+
return item.treeItemBranchIndexes(pitem, idx);
|
113
|
+
|
114
|
+
// otherwise, loop over children and determine disclosure state for each
|
115
|
+
} else {
|
116
|
+
children = this.get('children');
|
117
|
+
if (!children) return null; // no children - no branches
|
118
|
+
ret = SC.IndexSet.create();
|
119
|
+
len = children.get('length');
|
120
|
+
pitem = item ; // save parent
|
121
|
+
|
122
|
+
for(idx=0;idx<len;idx++) {
|
123
|
+
if (!(item = children.objectAt(idx))) continue ;
|
124
|
+
if (!this._computeChildren(item, pitem, idx)) continue; // no chil'en
|
125
|
+
if (this._computeDisclosureState(item, pitem, idx) !== SC.LEAF_NODE) {
|
126
|
+
ret.add(idx);
|
127
|
+
}
|
128
|
+
}
|
129
|
+
|
130
|
+
return ret.get('length')>0 ? ret : null;
|
131
|
+
}
|
132
|
+
}.property('children').cacheable(),
|
133
|
+
|
134
|
+
/**
|
135
|
+
Returns YES if the item itself should be shown, NO if only its children
|
136
|
+
should be shown. Normally returns YES unless the parentObject is null.
|
137
|
+
*/
|
138
|
+
isHeaderVisible: function() {
|
139
|
+
return !!this.get('parentObserver');
|
140
|
+
}.property('parentObserver').cacheable(),
|
141
|
+
|
142
|
+
/**
|
143
|
+
Get the current length of the tree item including any of its children.
|
144
|
+
*/
|
145
|
+
length: 0,
|
146
|
+
|
147
|
+
// ..........................................................
|
148
|
+
// SC.ARRAY SUPPORT
|
149
|
+
//
|
150
|
+
|
151
|
+
/**
|
152
|
+
Get the object at the specified index. This will talk the tree info
|
153
|
+
to determine the proper place. The offset should be relative to the
|
154
|
+
start of this tree item. Calls recursively down the tree.
|
155
|
+
|
156
|
+
This should only be called with an index you know is in the range of item
|
157
|
+
or its children based on looking at the length.
|
158
|
+
*/
|
159
|
+
objectAt: function(index) {
|
160
|
+
var len = this.get('length'),
|
161
|
+
item = this.get('item'),
|
162
|
+
cache = this._objectAtCache,
|
163
|
+
cur = index,
|
164
|
+
loc = 0,
|
165
|
+
indexes, children;
|
166
|
+
|
167
|
+
if (index >= len) return undefined;
|
168
|
+
if (this.get('isHeaderVisible')) {
|
169
|
+
if (index === 0) return item;
|
170
|
+
else cur--;
|
171
|
+
}
|
172
|
+
item = null;
|
173
|
+
|
174
|
+
if (!cache) cache = this._objectAtCache = [];
|
175
|
+
if ((item = cache[index]) !== undefined) return item ;
|
176
|
+
|
177
|
+
children = this.get('children');
|
178
|
+
if (!children) return undefined; // no children - nothing to get
|
179
|
+
|
180
|
+
// loop through branch indexes, reducing the offset until it matches
|
181
|
+
// something we might actually return.
|
182
|
+
if (indexes = this.get('branchIndexes')) {
|
183
|
+
indexes.forEach(function(i) {
|
184
|
+
if (item || (i > cur)) return ; // past end - nothing to do
|
185
|
+
|
186
|
+
var observer = this.branchObserverAt(i), len;
|
187
|
+
if (!observer) return ; // nothing to do
|
188
|
+
|
189
|
+
// if cur lands inside of this observer's length, use objectAt to get
|
190
|
+
// otherwise, just remove len from cur.
|
191
|
+
len = observer.get('length') ;
|
192
|
+
if (i+len > cur) {
|
193
|
+
item = observer.objectAt(cur-i);
|
194
|
+
cur = -1;
|
195
|
+
} else cur -= len-1 ;
|
196
|
+
|
197
|
+
},this);
|
198
|
+
}
|
199
|
+
|
200
|
+
if (cur>=0) item = children.objectAt(cur); // get internal if needed
|
201
|
+
cache[index] = item ; // save in cache
|
202
|
+
|
203
|
+
return item ;
|
204
|
+
},
|
205
|
+
|
206
|
+
/**
|
207
|
+
Implements SC.Array.replace() primitive. For this method to succeed, the
|
208
|
+
range you replace must lie entirely within the same parent item, otherwise
|
209
|
+
this will raise an exception.
|
210
|
+
|
211
|
+
Note that this replace method accepts an additional parameter "operation"
|
212
|
+
which is used when you try to insert an item on a boundary between
|
213
|
+
branches whether it should be inserted at the end of the previous group
|
214
|
+
after the group. If you don't pass operation, the default is
|
215
|
+
SC.DROP_BEFORE, which is the expected behavior.
|
216
|
+
*/
|
217
|
+
replace: function(start, amt, objects, operation) {
|
218
|
+
|
219
|
+
var cur = start,
|
220
|
+
observer = null,
|
221
|
+
indexes, len, max;
|
222
|
+
|
223
|
+
if (operation === undefined) operation = SC.DROP_BEFORE;
|
224
|
+
|
225
|
+
// adjust the start location based on branches, possibly passing on to an
|
226
|
+
// observer.
|
227
|
+
if (this.get('isHeaderVisible')) cur--; // exclude my own header item
|
228
|
+
if (cur < 0) throw "Tree Item cannot replace itself";
|
229
|
+
|
230
|
+
// remove branch lengths. If the adjusted start location lands inside of
|
231
|
+
// another branch, then just let that observer handle it.
|
232
|
+
if (indexes = this.get('branchIndexes')) {
|
233
|
+
indexes.forEach(function(i) {
|
234
|
+
if (observer || (i>=cur)) return ; // nothing to do
|
235
|
+
if (!(observer = this.branchObserverAt(i))) return; // nothing to do
|
236
|
+
len = observer.get('length');
|
237
|
+
|
238
|
+
// if this branch range is before the start loc, just remove it and
|
239
|
+
// go on. If cur is somewhere inside of the range, then save to pass
|
240
|
+
// on. Note use of operation to determine the abiguous end op.
|
241
|
+
if ((i+len === cur) && operation === SC.DROP_AFTER) cur -= i;
|
242
|
+
else if (i+len > cur) cur -= i; // put inside of nested range
|
243
|
+
else {
|
244
|
+
cur -= len-1; observer = null ;
|
245
|
+
}
|
246
|
+
}, this);
|
247
|
+
}
|
248
|
+
|
249
|
+
// if an observer was saved, pass on call.
|
250
|
+
if (observer) {
|
251
|
+
observer.replace(cur, amt, objects, operation);
|
252
|
+
return this;
|
253
|
+
}
|
254
|
+
|
255
|
+
// no observer was saved, which means cur points to an index inside of
|
256
|
+
// our own range. Now amt just needs to be adjusted to remove any
|
257
|
+
// visible branches as well.
|
258
|
+
max = cur + amt;
|
259
|
+
if (amt>1 && indexes) { // if amt is 1 no need...
|
260
|
+
indexes.forEachIn(cur, indexes.get('max')-cur, function(i) {
|
261
|
+
if (i > max) return; // nothing to do
|
262
|
+
if (!(observer = this.branchObserverAt(i))) return; // nothing to do
|
263
|
+
len = observer.get('length');
|
264
|
+
max -= len-1;
|
265
|
+
}, this);
|
266
|
+
}
|
267
|
+
|
268
|
+
// get amt back out. if amt is negative, it means that the range passed
|
269
|
+
// was not cleanly inside of this range. raise an exception.
|
270
|
+
amt = max-cur;
|
271
|
+
|
272
|
+
// ok, now that we are adjusted, get the children and forward the replace
|
273
|
+
// call on. if there are no children, bad news...
|
274
|
+
var children = this.get('children');
|
275
|
+
if (!children) throw "cannot replace() tree item with no children";
|
276
|
+
|
277
|
+
if ((amt < 0) || (max>children.get('length'))) {
|
278
|
+
throw "replace() range must lie within a single tree item";
|
279
|
+
}
|
280
|
+
|
281
|
+
children.replace(cur, amt, objects, operation);
|
282
|
+
|
283
|
+
// don't call enumerableContentDidChange() here because, as an observer,
|
284
|
+
// we should be notified by the children array itself.
|
285
|
+
|
286
|
+
return this;
|
287
|
+
},
|
288
|
+
|
289
|
+
/**
|
290
|
+
Called whenever the content for the passed observer has changed. Default
|
291
|
+
version notifies the parent if it exists and updates the length.
|
292
|
+
|
293
|
+
The start, amt and delta params should reflect changes to the children
|
294
|
+
array, not to the expanded range for the wrapper.
|
295
|
+
*/
|
296
|
+
observerContentDidChange: function(start, amt, delta) {
|
297
|
+
|
298
|
+
// clear caches
|
299
|
+
this.invalidateBranchObserversAt(start);
|
300
|
+
this._objectAtCache = this._outlineLevelCache = null;
|
301
|
+
this._disclosureStateCache = null;
|
302
|
+
this._contentGroupIndexes = NO;
|
303
|
+
this.notifyPropertyChange('branchIndexes');
|
304
|
+
|
305
|
+
var oldlen = this.get('length'),
|
306
|
+
newlen = this._computeLength(),
|
307
|
+
parent = this.get('parentObserver'), set;
|
308
|
+
|
309
|
+
// update length if needed
|
310
|
+
if (oldlen !== newlen) this.set('length', newlen);
|
311
|
+
|
312
|
+
// if we have a parent, notify that parent that we have changed.
|
313
|
+
if (!this._notifyParent) return this; // nothing more to do
|
314
|
+
|
315
|
+
if (parent) {
|
316
|
+
set = SC.IndexSet.create(this.get('index'));
|
317
|
+
parent._childrenRangeDidChange(parent.get('children'), null, '[]', set);
|
318
|
+
|
319
|
+
// otherwise, note the enumerable content has changed. note that we need
|
320
|
+
// to convert the passed change to reflect the computed range
|
321
|
+
} else {
|
322
|
+
if (oldlen === newlen) {
|
323
|
+
amt = this.expandChildIndex(start+amt);
|
324
|
+
start = this.expandChildIndex(start);
|
325
|
+
amt = amt - start ;
|
326
|
+
delta = 0 ;
|
327
|
+
|
328
|
+
} else {
|
329
|
+
start = this.expandChildIndex(start);
|
330
|
+
amt = newlen - start;
|
331
|
+
delta = newlen - oldlen ;
|
332
|
+
}
|
333
|
+
|
334
|
+
this.enumerableContentDidChange(start, amt, delta);
|
335
|
+
}
|
336
|
+
},
|
337
|
+
|
338
|
+
/**
|
339
|
+
Accepts a child index and expands it to reflect any nested groups.
|
340
|
+
*/
|
341
|
+
expandChildIndex: function(index) {
|
342
|
+
|
343
|
+
var ret = index;
|
344
|
+
if (this.get('isHeaderVisible')) index++;
|
345
|
+
|
346
|
+
// fast path
|
347
|
+
var branches = this.get('branchIndexes');
|
348
|
+
if (!branches || branches.get('length')===0) return ret;
|
349
|
+
|
350
|
+
// we have branches, adjust for their length
|
351
|
+
branches.forEachIn(0, index, function(idx) {
|
352
|
+
ret += this.branchObserverAt(idx).get('length')-1;
|
353
|
+
}, this);
|
354
|
+
|
355
|
+
return ret; // add 1 for item header
|
356
|
+
},
|
357
|
+
|
358
|
+
// ..........................................................
|
359
|
+
// SC.COLLECTION CONTENT SUPPORT
|
360
|
+
//
|
361
|
+
|
362
|
+
_contentGroupIndexes: NO,
|
363
|
+
|
364
|
+
/**
|
365
|
+
Called by the collection view to return any group indexes. The default
|
366
|
+
implementation will compute the indexes one time based on the delegate
|
367
|
+
treeItemIsGrouped
|
368
|
+
*/
|
369
|
+
contentGroupIndexes: function(view, content) {
|
370
|
+
|
371
|
+
if (content !== this) return null; // only care about receiver
|
372
|
+
|
373
|
+
var ret = this._contentGroupIndexes;
|
374
|
+
if (ret !== NO) return ret ;
|
375
|
+
|
376
|
+
// if this is not the root item, never do grouping
|
377
|
+
if (this.get('parentObserver')) return null;
|
378
|
+
|
379
|
+
var item = this.get('item'), group, indexes, len, cur, loc, children;
|
380
|
+
|
381
|
+
if (item && item.isTreeItemContent) group = item.get('treeItemIsGrouped');
|
382
|
+
else group = !!this.delegate.get('treeItemIsGrouped');
|
383
|
+
|
384
|
+
// if grouping is enabled, build an index set with all of our local
|
385
|
+
// groups.
|
386
|
+
if (group) {
|
387
|
+
ret = SC.IndexSet.create();
|
388
|
+
indexes = this.get('branchIndexes');
|
389
|
+
children = this.get('children');
|
390
|
+
len = children ? children.get('length') : 0;
|
391
|
+
cur = loc = 0;
|
392
|
+
|
393
|
+
if (indexes) {
|
394
|
+
indexes.forEach(function(i) {
|
395
|
+
ret.add(cur, (i+1)-loc); // add loc -> i to set
|
396
|
+
cur += (i+1)-loc;
|
397
|
+
loc = i+1 ;
|
398
|
+
|
399
|
+
var observer = this.branchObserverAt(i);
|
400
|
+
if (observer) cur += observer.get('length')-1;
|
401
|
+
}, this);
|
402
|
+
}
|
403
|
+
|
404
|
+
if (loc<len) ret.add(cur, len-loc);
|
405
|
+
} else ret = null;
|
406
|
+
|
407
|
+
this._contentGroupIndexes = ret ;
|
408
|
+
return ret;
|
409
|
+
},
|
410
|
+
|
411
|
+
contentIndexIsGroup: function(view, content, idx) {
|
412
|
+
var indexes = this.contentGroupIndexes(view, content);
|
413
|
+
return indexes ? indexes.contains(idx) : NO ;
|
414
|
+
},
|
415
|
+
|
416
|
+
/**
|
417
|
+
Returns the outline level for the specified index.
|
418
|
+
*/
|
419
|
+
contentIndexOutlineLevel: function(view, content, index) {
|
420
|
+
if (content !== this) return -1; // only care about us
|
421
|
+
|
422
|
+
var cache = this._outlineLevelCache;
|
423
|
+
if (cache && (cache[index] !== undefined)) return cache[index];
|
424
|
+
if (!cache) cache = this._outlineLevelCache = [];
|
425
|
+
|
426
|
+
var len = this.get('length'),
|
427
|
+
cur = index,
|
428
|
+
loc = 0,
|
429
|
+
ret = null,
|
430
|
+
indexes, children, observer;
|
431
|
+
|
432
|
+
if (index >= len) return -1;
|
433
|
+
|
434
|
+
if (this.get('isHeaderVisible')) {
|
435
|
+
if (index === 0) return cache[0] = this.get('outlineLevel')-1;
|
436
|
+
else cur--;
|
437
|
+
}
|
438
|
+
|
439
|
+
// loop through branch indexes, reducing the offset until it matches
|
440
|
+
// something we might actually return.
|
441
|
+
if (indexes = this.get('branchIndexes')) {
|
442
|
+
indexes.forEach(function(i) {
|
443
|
+
if ((ret!==null) || (i > cur)) return ; // past end - nothing to do
|
444
|
+
|
445
|
+
var observer = this.branchObserverAt(i), len;
|
446
|
+
if (!observer) return ; // nothing to do
|
447
|
+
|
448
|
+
// if cur lands inside of this observer's length, use objectAt to get
|
449
|
+
// otherwise, just remove len from cur.
|
450
|
+
len = observer.get('length') ;
|
451
|
+
if (i+len > cur) {
|
452
|
+
ret = observer.contentIndexOutlineLevel(view, observer, cur-i);
|
453
|
+
cur = -1;
|
454
|
+
} else cur -= len-1 ;
|
455
|
+
|
456
|
+
},this);
|
457
|
+
}
|
458
|
+
|
459
|
+
if (cur>=0) ret = this.get('outlineLevel'); // get internal if needed
|
460
|
+
cache[index] = ret ; // save in cache
|
461
|
+
return ret ;
|
462
|
+
},
|
463
|
+
|
464
|
+
/**
|
465
|
+
Returns the disclosure state for the specified index.
|
466
|
+
*/
|
467
|
+
contentIndexDisclosureState: function(view, content, index) {
|
468
|
+
if (content !== this) return -1; // only care about us
|
469
|
+
|
470
|
+
var cache = this._disclosureStateCache;
|
471
|
+
if (cache && (cache[index] !== undefined)) return cache[index];
|
472
|
+
if (!cache) cache = this._disclosureStateCache = [];
|
473
|
+
|
474
|
+
var len = this.get('length'),
|
475
|
+
cur = index,
|
476
|
+
loc = 0,
|
477
|
+
ret = null,
|
478
|
+
indexes, children, observer;
|
479
|
+
|
480
|
+
if (index >= len) return SC.LEAF_NODE;
|
481
|
+
|
482
|
+
if (this.get('isHeaderVisible')) {
|
483
|
+
if (index === 0) return cache[0] = this.get('disclosureState');
|
484
|
+
else cur--;
|
485
|
+
}
|
486
|
+
|
487
|
+
// loop through branch indexes, reducing the offset until it matches
|
488
|
+
// something we might actually return.
|
489
|
+
if (indexes = this.get('branchIndexes')) {
|
490
|
+
indexes.forEach(function(i) {
|
491
|
+
if ((ret!==null) || (i > cur)) return ; // past end - nothing to do
|
492
|
+
|
493
|
+
var observer = this.branchObserverAt(i), len;
|
494
|
+
if (!observer) return ; // nothing to do
|
495
|
+
|
496
|
+
// if cur lands inside of this observer's length, use objectAt to get
|
497
|
+
// otherwise, just remove len from cur.
|
498
|
+
len = observer.get('length') ;
|
499
|
+
if (i+len > cur) {
|
500
|
+
ret = observer.contentIndexDisclosureState(view, observer, cur-i);
|
501
|
+
cur = -1;
|
502
|
+
} else cur -= len-1 ;
|
503
|
+
|
504
|
+
},this);
|
505
|
+
}
|
506
|
+
|
507
|
+
if (cur>=0) ret = SC.LEAF_NODE; // otherwise its a leaf node
|
508
|
+
cache[index] = ret ; // save in cache
|
509
|
+
return ret ;
|
510
|
+
},
|
511
|
+
|
512
|
+
/**
|
513
|
+
Expands the specified content index. This will search down until it finds
|
514
|
+
the branchObserver responsible for this item and then calls _collapse on
|
515
|
+
it.
|
516
|
+
*/
|
517
|
+
contentIndexExpand: function(view, content, idx) {
|
518
|
+
|
519
|
+
var indexes, cur = idx, children, item;
|
520
|
+
|
521
|
+
if (content !== this) return; // only care about us
|
522
|
+
if (this.get('isHeaderVisible')) {
|
523
|
+
if (idx===0) {
|
524
|
+
this._expand(this.get('item'));
|
525
|
+
return;
|
526
|
+
} else cur--;
|
527
|
+
}
|
528
|
+
|
529
|
+
if (indexes = this.get('branchIndexes')) {
|
530
|
+
indexes.forEach(function(i) {
|
531
|
+
if (i >= cur) return; // past end - nothing to do
|
532
|
+
var observer = this.branchObserverAt(i), len;
|
533
|
+
if (!observer) return ;
|
534
|
+
|
535
|
+
len = observer.get('length');
|
536
|
+
if (i+len > cur) {
|
537
|
+
observer.contentIndexExpand(view, observer, cur-i);
|
538
|
+
cur = -1 ; //done
|
539
|
+
} else cur -= len-1;
|
540
|
+
|
541
|
+
}, this);
|
542
|
+
}
|
543
|
+
|
544
|
+
// if we are still inside of the range then maybe pass on to a child item
|
545
|
+
if (cur>=0) {
|
546
|
+
children = this.get('children');
|
547
|
+
item = children ? children.objectAt(cur) : null;
|
548
|
+
if (item) this._expand(item, this.get('item'), cur);
|
549
|
+
}
|
550
|
+
},
|
551
|
+
|
552
|
+
/**
|
553
|
+
Called to collapse a content index item if it is currently in an open
|
554
|
+
disclosure state. The default implementation does nothing.
|
555
|
+
|
556
|
+
@param {SC.CollectionView} view the collection view
|
557
|
+
@param {SC.Array} content the content object
|
558
|
+
@param {Number} idx the content index
|
559
|
+
@returns {void}
|
560
|
+
*/
|
561
|
+
contentIndexCollapse: function(view, content, idx) {
|
562
|
+
|
563
|
+
var indexes, children, item, cur = idx;
|
564
|
+
|
565
|
+
if (content !== this) return; // only care about us
|
566
|
+
if (this.get('isHeaderVisible')) {
|
567
|
+
if (idx===0) {
|
568
|
+
this._collapse(this.get('item'));
|
569
|
+
return;
|
570
|
+
} else cur--;
|
571
|
+
}
|
572
|
+
|
573
|
+
|
574
|
+
if (indexes = this.get('branchIndexes')) {
|
575
|
+
indexes.forEach(function(i) {
|
576
|
+
if (i >= cur) return; // past end - nothing to do
|
577
|
+
var observer = this.branchObserverAt(i), len;
|
578
|
+
if (!observer) return ;
|
579
|
+
|
580
|
+
len = observer.get('length');
|
581
|
+
if (i+len > cur) {
|
582
|
+
observer.contentIndexCollapse(view, observer, cur-i);
|
583
|
+
cur = -1 ; //done
|
584
|
+
} else cur -= len-1;
|
585
|
+
|
586
|
+
}, this);
|
587
|
+
}
|
588
|
+
|
589
|
+
// if we are still inside of the range then maybe pass on to a child item
|
590
|
+
if (cur>=0) {
|
591
|
+
children = this.get('children');
|
592
|
+
item = children ? children.objectAt(cur) : null;
|
593
|
+
if (item) this._collapse(item, this.get('item'), cur);
|
594
|
+
}
|
595
|
+
},
|
596
|
+
|
597
|
+
// ..........................................................
|
598
|
+
// BRANCH NODES
|
599
|
+
//
|
600
|
+
|
601
|
+
/**
|
602
|
+
Returns the branch item for the specified index. If none exists yet, it
|
603
|
+
will be created.
|
604
|
+
*/
|
605
|
+
branchObserverAt: function(index) {
|
606
|
+
var byIndex = this._branchObserversByIndex,
|
607
|
+
indexes = this._branchObserverIndexes,
|
608
|
+
ret, parent, pitem, item, children, guid, del ;
|
609
|
+
|
610
|
+
if (!byIndex) byIndex = this._branchObserversByIndex = [];
|
611
|
+
if (!indexes) {
|
612
|
+
indexes = this._branchObserverIndexes = SC.IndexSet.create();
|
613
|
+
}
|
614
|
+
|
615
|
+
if (ret = byIndex[index]) return ret ; // use cache
|
616
|
+
|
617
|
+
// no observer for this content exists, create one
|
618
|
+
children = this.get('children');
|
619
|
+
item = children ? children.objectAt(index) : null ;
|
620
|
+
if (!item) return null ; // can't create an observer for a null item
|
621
|
+
|
622
|
+
byIndex[index] = ret = SC.TreeItemObserver.create({
|
623
|
+
item: item,
|
624
|
+
delegate: this.get('delegate'),
|
625
|
+
parentObserver: this,
|
626
|
+
index: index,
|
627
|
+
outlineLevel: this.get('outlineLevel')+1
|
628
|
+
});
|
629
|
+
|
630
|
+
indexes.add(index); // save for later invalidation
|
631
|
+
return ret ;
|
632
|
+
},
|
633
|
+
|
634
|
+
/**
|
635
|
+
Invalidates any branch observers on or after the specified index range.
|
636
|
+
*/
|
637
|
+
invalidateBranchObserversAt: function(index) {
|
638
|
+
var byIndex = this._branchObserversByIndex,
|
639
|
+
indexes = this._branchObserverIndexes;
|
640
|
+
|
641
|
+
if (!byIndex || byIndex.length<=index) return this ; // nothing to do
|
642
|
+
if (index < 0) index = 0 ;
|
643
|
+
|
644
|
+
// destroy any observer on or after the range
|
645
|
+
indexes.forEachIn(index, indexes.get('max')-index, function(i) {
|
646
|
+
var observer = byIndex[i];
|
647
|
+
if (observer) observer.destroy();
|
648
|
+
}, this);
|
649
|
+
|
650
|
+
byIndex.length = index; // truncate to dump extra indexes
|
651
|
+
|
652
|
+
return this;
|
653
|
+
},
|
654
|
+
|
655
|
+
// ..........................................................
|
656
|
+
// INTERNAL METHODS
|
657
|
+
//
|
658
|
+
|
659
|
+
init: function() {
|
660
|
+
sc_super();
|
661
|
+
|
662
|
+
// begin all properties on item if there is one. This will allow us to
|
663
|
+
// track important property changes.
|
664
|
+
var item = this.get('item');
|
665
|
+
if (!item) throw "SC.TreeItemObserver.item cannot be null";
|
666
|
+
|
667
|
+
item.addObserver('*', this, this._itemPropertyDidChange);
|
668
|
+
this._itemPropertyDidChange(item, '*');
|
669
|
+
this._notifyParent = YES ; // avoid infinite loops
|
670
|
+
},
|
671
|
+
|
672
|
+
/**
|
673
|
+
Called just before a branch observer is removed. Should stop any
|
674
|
+
observering and invalidate any child observers.
|
675
|
+
*/
|
676
|
+
destroy: function() {
|
677
|
+
this.invalidateBranchObserversAt(0);
|
678
|
+
this._objectAtCache = null ;
|
679
|
+
|
680
|
+
// cleanup observing
|
681
|
+
var item = this.get('item');
|
682
|
+
if (item) item.removeObserver('*', this, this._itemPropertyDidChange);
|
683
|
+
|
684
|
+
var children = this._children,
|
685
|
+
ro = this._childrenRangeObserver;
|
686
|
+
if (children && ro) children.removeRangeObserver(ro);
|
687
|
+
|
688
|
+
sc_super();
|
689
|
+
},
|
690
|
+
|
691
|
+
/**
|
692
|
+
Called whenever a property changes on the item. Determines if either the
|
693
|
+
children array or the disclosure state has changed and then notifies as
|
694
|
+
necessary..
|
695
|
+
*/
|
696
|
+
_itemPropertyDidChange: function(target, key) {
|
697
|
+
var children = this.get('children'),
|
698
|
+
state = this.get('disclosureState'),
|
699
|
+
item = this.get('item'),
|
700
|
+
next ;
|
701
|
+
|
702
|
+
this.beginPropertyChanges();
|
703
|
+
|
704
|
+
next = this._computeDisclosureState(item);
|
705
|
+
if (state !== next) this.set('disclosureState', next);
|
706
|
+
|
707
|
+
next = this._computeChildren(item);
|
708
|
+
if (children !== next) this.set('children', next);
|
709
|
+
|
710
|
+
this.endPropertyChanges();
|
711
|
+
},
|
712
|
+
|
713
|
+
/**
|
714
|
+
Called whenever the children or disclosure state changes. Begins or ends
|
715
|
+
observing on the children array so that changes can propogate outward.
|
716
|
+
*/
|
717
|
+
_childrenDidChange: function() {
|
718
|
+
var state = this.get('disclosureState'),
|
719
|
+
cur = state === SC.BRANCH_OPEN ? this.get('children') : null,
|
720
|
+
last = this._children,
|
721
|
+
ro = this._childrenRangeObserver;
|
722
|
+
|
723
|
+
if (last === cur) return this; //nothing to do
|
724
|
+
if (ro) last.removeRangeObserver(ro);
|
725
|
+
if (cur) {
|
726
|
+
this._childrenRangeObserver =
|
727
|
+
cur.addRangeObserver(null, this, this._childrenRangeDidChange);
|
728
|
+
} else this._childrenRangeObserver = null;
|
729
|
+
|
730
|
+
this._children = cur ;
|
731
|
+
this._childrenRangeDidChange(cur, null, '[]', null);
|
732
|
+
|
733
|
+
}.observes("children", "disclosureState"),
|
734
|
+
|
735
|
+
/**
|
736
|
+
Called anytime the actual content of the children has changed. If this
|
737
|
+
changes the length property, then notifies the parent that the content
|
738
|
+
might have changed.
|
739
|
+
*/
|
740
|
+
_childrenRangeDidChange: function(array, objects, key, indexes) {
|
741
|
+
var children = this.get('children'),
|
742
|
+
len = children ? children.get('length') : 0,
|
743
|
+
min = indexes ? indexes.get('min') : 0,
|
744
|
+
max = indexes ? indexes.get('max') : len,
|
745
|
+
old = this._childrenLen || 0;
|
746
|
+
|
747
|
+
this._childrenLen = len; // save for future calls
|
748
|
+
this.observerContentDidChange(min, max-min, len-old);
|
749
|
+
},
|
750
|
+
|
751
|
+
/**
|
752
|
+
Computes the current disclosure state of the item by asking the item or
|
753
|
+
the delegate. If no pitem or index is passed, the parentItem and idex
|
754
|
+
will be used.
|
755
|
+
*/
|
756
|
+
_computeDisclosureState: function(item, pitem, index) {
|
757
|
+
var key, del;
|
758
|
+
|
759
|
+
// no item - assume leaf node
|
760
|
+
if (!item || !this._computeChildren(item)) return SC.LEAF_NODE;
|
761
|
+
|
762
|
+
// item implement TreeItemContent - call directly
|
763
|
+
else if (item.isTreeItemContent) {
|
764
|
+
if (pitem === undefined) pitem = this.get('parentItem');
|
765
|
+
if (index === undefined) index = this.get('index');
|
766
|
+
return item.treeItemDisclosureState(pitem, index);
|
767
|
+
|
768
|
+
// otherwise get treeItemDisclosureStateKey from delegate
|
769
|
+
} else {
|
770
|
+
key = this._treeItemIsExpandedKey ;
|
771
|
+
if (!key) {
|
772
|
+
del = this.get('delegate');
|
773
|
+
key = del ? del.get('treeItemIsExpandedKey') : 'treeItemIsExpanded';
|
774
|
+
this._treeItemIsExpandedKey = key ;
|
775
|
+
}
|
776
|
+
return item.get(key) ? SC.BRANCH_OPEN : SC.BRANCH_CLOSED;
|
777
|
+
}
|
778
|
+
},
|
779
|
+
|
780
|
+
/**
|
781
|
+
Collapse the item at the specified index. This will either directly
|
782
|
+
modify the property on the item or call the treeItemCollapse() method.
|
783
|
+
*/
|
784
|
+
_collapse: function(item, pitem, index) {
|
785
|
+
var key, del;
|
786
|
+
|
787
|
+
// no item - assume leaf node
|
788
|
+
if (!item || !this._computeChildren(item)) return this;
|
789
|
+
|
790
|
+
// item implement TreeItemContent - call directly
|
791
|
+
else if (item.isTreeItemContent) {
|
792
|
+
if (pitem === undefined) pitem = this.get('parentItem');
|
793
|
+
if (index === undefined) index = this.get('index');
|
794
|
+
item.treeItemCollapse(pitem, index);
|
795
|
+
|
796
|
+
// otherwise get treeItemDisclosureStateKey from delegate
|
797
|
+
} else {
|
798
|
+
key = this._treeItemIsExpandedKey ;
|
799
|
+
if (!key) {
|
800
|
+
del = this.get('delegate');
|
801
|
+
key = del ? del.get('treeItemIsExpandedKey') : 'treeItemIsExpanded';
|
802
|
+
this._treeItemIsExpandedKey = key ;
|
803
|
+
}
|
804
|
+
item.setIfChanged(key, NO);
|
805
|
+
}
|
806
|
+
|
807
|
+
return this ;
|
808
|
+
},
|
809
|
+
|
810
|
+
/**
|
811
|
+
Expand the item at the specified index. This will either directly
|
812
|
+
modify the property on the item or call the treeItemExpand() method.
|
813
|
+
*/
|
814
|
+
_expand: function(item, pitem, index) {
|
815
|
+
var key, del;
|
816
|
+
|
817
|
+
// no item - assume leaf node
|
818
|
+
if (!item || !this._computeChildren(item)) return this;
|
819
|
+
|
820
|
+
// item implement TreeItemContent - call directly
|
821
|
+
else if (item.isTreeItemContent) {
|
822
|
+
if (pitem === undefined) pitem = this.get('parentItem');
|
823
|
+
if (index === undefined) index = this.get('index');
|
824
|
+
item.treeItemExpand(pitem, index);
|
825
|
+
|
826
|
+
// otherwise get treeItemDisclosureStateKey from delegate
|
827
|
+
} else {
|
828
|
+
key = this._treeItemIsExpandedKey ;
|
829
|
+
if (!key) {
|
830
|
+
del = this.get('delegate');
|
831
|
+
key = del ? del.get('treeItemIsExpandedKey') : 'treeItemIsExpanded';
|
832
|
+
this._treeItemIsExpandedKey = key ;
|
833
|
+
}
|
834
|
+
item.setIfChanged(key, YES);
|
835
|
+
}
|
836
|
+
|
837
|
+
return this ;
|
838
|
+
},
|
839
|
+
|
840
|
+
/**
|
841
|
+
Computes the children for the passed item.
|
842
|
+
*/
|
843
|
+
_computeChildren: function(item) {
|
844
|
+
var del, key;
|
845
|
+
|
846
|
+
// no item - no children
|
847
|
+
if (!item) return null;
|
848
|
+
|
849
|
+
// item implement TreeItemContent - call directly
|
850
|
+
else if (item.isTreeItemContent) return item.get('treeItemChildren');
|
851
|
+
|
852
|
+
// otherwise get treeItemChildrenKey from delegate
|
853
|
+
else {
|
854
|
+
key = this._treeItemChildrenKey ;
|
855
|
+
if (!key) {
|
856
|
+
del = this.get('delegate');
|
857
|
+
key = del ? del.get('treeItemChildrenKey') : 'treeItemChildren';
|
858
|
+
this._treeItemChildrenKey = key ;
|
859
|
+
}
|
860
|
+
return item.get(key);
|
861
|
+
}
|
862
|
+
},
|
863
|
+
|
864
|
+
/**
|
865
|
+
Computes the length of the array by looking at children.
|
866
|
+
*/
|
867
|
+
_computeLength: function() {
|
868
|
+
var ret = this.get('isHeaderVisible') ? 1 : 0,
|
869
|
+
state = this.get('disclosureState'),
|
870
|
+
children = this.get('children'),
|
871
|
+
indexes ;
|
872
|
+
|
873
|
+
// if disclosure is open, add children count + length of branch observers.
|
874
|
+
if ((state === SC.BRANCH_OPEN) && children) {
|
875
|
+
ret += children.get('length');
|
876
|
+
if (indexes = this.get('branchIndexes')) {
|
877
|
+
indexes.forEach(function(idx) {
|
878
|
+
var observer = this.branchObserverAt(idx);
|
879
|
+
ret += observer.get('length')-1;
|
880
|
+
}, this);
|
881
|
+
}
|
882
|
+
}
|
883
|
+
return ret ;
|
884
|
+
}
|
885
|
+
|
886
|
+
});
|
887
|
+
|