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
@@ -13,7 +13,7 @@
|
|
13
13
|
an editing context.
|
14
14
|
|
15
15
|
In general you will not use this class, but you can use a subclass such
|
16
|
-
as ObjectController,
|
16
|
+
as ObjectController, TreeController, or ArrayController.
|
17
17
|
|
18
18
|
h2. EDITING CONTEXTS
|
19
19
|
|
@@ -27,291 +27,19 @@
|
|
27
27
|
provide this capability.
|
28
28
|
|
29
29
|
@extends SC.Object
|
30
|
+
@since SproutCore 1.0
|
30
31
|
*/
|
31
32
|
SC.Controller = SC.Object.extend(
|
32
33
|
/** @scope SC.Controller.prototype */ {
|
33
34
|
|
34
35
|
/**
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
editors have uncommitted changes. In your own subclass, call
|
39
|
-
this.objectDidChange(this) to register changes.
|
36
|
+
Makes a controller editable or not editable. The SC.Controller class
|
37
|
+
itself does not do anything with this property but subclasses will
|
38
|
+
respect it when modifying content.
|
40
39
|
|
40
|
+
@property
|
41
41
|
@type Boolean
|
42
42
|
*/
|
43
|
-
|
44
|
-
|
45
|
-
/**
|
46
|
-
This is the controller's parent controller usually. The controller will
|
47
|
-
notify this controller when its changes are committed or discarded.
|
48
|
-
|
49
|
-
@type SC.Controller
|
50
|
-
*/
|
51
|
-
context: null,
|
52
|
-
|
53
|
-
/**
|
54
|
-
If this is NO, then the controller will only commit changes when you
|
55
|
-
explicitly call commitChanges. Otherwise it will commit them
|
56
|
-
immediately. You usually want this set to NO. It is initially set to
|
57
|
-
YES for compatibility.
|
58
|
-
|
59
|
-
@type Boolean
|
60
|
-
*/
|
61
|
-
commitChangesImmediately: YES,
|
62
|
-
|
63
|
-
/**
|
64
|
-
If the controller has uncommitted changes, call this method to
|
65
|
-
commit them. This method will commit the changes for any dependent
|
66
|
-
editors as well. This will return true if the commit completed and
|
67
|
-
false or an error object if it failed.
|
68
|
-
*/
|
69
|
-
commitChanges: function() {
|
70
|
-
this._commitTimeout = null ; // clear timeout
|
71
|
-
var ret = this._canCommitChanges() ;
|
72
|
-
if (!$ok(ret)) return ret ;
|
73
|
-
return this._performCommitChanges() ;
|
74
|
-
},
|
75
|
-
|
76
|
-
/**
|
77
|
-
If this controller has uncommitted changes that you do not want to keep,
|
78
|
-
call this method to discard them. This method will also discard
|
79
|
-
changes for any dependent editors as well.
|
80
|
-
*/
|
81
|
-
discardChanges: function() {
|
82
|
-
var ret = this._canDiscardChanges() ;
|
83
|
-
if (!$ok(ret)) return ret ;
|
84
|
-
return this._performDiscardChanges() ;
|
85
|
-
},
|
86
|
-
|
87
|
-
/**
|
88
|
-
This method will return an appropriate controller object for the
|
89
|
-
value of the property you name. This will return one of:
|
90
|
-
|
91
|
-
<table>
|
92
|
-
<tr> <th>Value Type</th> <th>Returns</th> </tr>
|
93
|
-
<tr> <td>Array-compatible</td> <td>SC.ArrayController</td></tr>
|
94
|
-
<tr> <td>SC.Collection</td> <td>SC.CollectionController</td></tr>
|
95
|
-
<tr> <td>Kind of SC.Object</td> <td>SC.ObjectController</td></tr>
|
96
|
-
<tr> <td>other</td> <td>value</td></tr>
|
97
|
-
</table>
|
98
|
-
|
99
|
-
This is a helper method used by subclasses to create the appropriate
|
100
|
-
type of controller.
|
101
|
-
*/
|
102
|
-
controllerForValue: function(value) {
|
103
|
-
var ret = null ;
|
104
|
-
switch(SC.typeOf(value)) {
|
105
|
-
case SC.T_OBJECT:
|
106
|
-
if (value.kindOf(SC.Collection)) {
|
107
|
-
ret = SC.CollectionController ;
|
108
|
-
} else ret = SC.ObjectController ;
|
109
|
-
break ;
|
110
|
-
case SC.T_ARRAY:
|
111
|
-
ret = SC.ArrayController ;
|
112
|
-
break ;
|
113
|
-
default:
|
114
|
-
ret = null ;
|
115
|
-
}
|
116
|
-
|
117
|
-
return (ret) ? ret.create({ content: value, context: this }) : value ;
|
118
|
-
},
|
119
|
-
|
120
|
-
/**
|
121
|
-
Call this method whenever you have uncommitted changes. This will
|
122
|
-
handle notifying your parent context as well.
|
123
|
-
|
124
|
-
@param {SC.Controller} editor
|
125
|
-
This is the object that has uncommitted changes. Normally you should
|
126
|
-
not pass a value. If you do pass an object, then that object will
|
127
|
-
become a dependent editor of the receiver.
|
128
|
-
*/
|
129
|
-
editorDidChange: function(editor) {
|
130
|
-
if (!editor) editor = this ; // set default value
|
131
|
-
|
132
|
-
// if this is another editor, add it to the list of editors that need
|
133
|
-
// to be notified of a change.
|
134
|
-
if (editor != this) {
|
135
|
-
if (!this._dirtyEditors) this._dirtyEditors = SC.Set.create();
|
136
|
-
this._dirtyEditors.add(editor) ;
|
137
|
-
} else {
|
138
|
-
this._hasLocalChanges = YES ;
|
139
|
-
}
|
140
|
-
if (!this.get('hasChanges')) {
|
141
|
-
this.set('hasChanges', YES) ;
|
142
|
-
|
143
|
-
// if we have a parent context notify them
|
144
|
-
if (this.context) {
|
145
|
-
this.context.editorDidChange(this) ;
|
146
|
-
|
147
|
-
// otherwise, if commit changes immediately is true, schedule commit.
|
148
|
-
// commit is only done once per cycle so that at least all the
|
149
|
-
// changes you might make at one time will be batched.
|
150
|
-
} else if (this.get('commitChangesImmediately')) {
|
151
|
-
if (!this._commitTimeout) {
|
152
|
-
this._commitTimeout = this.commitChanges.invokeLater(this);
|
153
|
-
}
|
154
|
-
}
|
155
|
-
}
|
156
|
-
},
|
157
|
-
|
158
|
-
/**
|
159
|
-
Call this method when your object no longer has uncommitted changes.
|
160
|
-
This will clear your hasChanges property and notify your parent context.
|
161
|
-
This is called automatically whenever changes are committed or discarded
|
162
|
-
on your controller.
|
163
|
-
*/
|
164
|
-
editorDidClearChanges: function(editor) {
|
165
|
-
if (!editor) editor = this ; // set default value
|
166
|
-
|
167
|
-
if (editor != this) {
|
168
|
-
// if we are currently clearing changes, then we will clean up the
|
169
|
-
// hasChanges state and dirtyeditors in bulk when this is all done.
|
170
|
-
// so do nothing.
|
171
|
-
if (this._clearingChanges) return ;
|
172
|
-
if (this._dirtyEditors) this._dirtyEditors.remove(editor) ;
|
173
|
-
} else {
|
174
|
-
this._hasLocalChanges = NO ;
|
175
|
-
}
|
176
|
-
|
177
|
-
// _dirtyEditors may be undefined so use !! to force this to a bool value.
|
178
|
-
var hasChanges = !!(this._hasLocalChanges || (this._dirtyEditors && this._dirtyEditors.length > 0)) ;
|
179
|
-
|
180
|
-
if (this.get('hasChanges') != hasChanges) {
|
181
|
-
this.set('hasChanges', hasChanges) ;
|
182
|
-
if (this.context) this.context.editorDidClearChanges(editor) ;
|
183
|
-
}
|
184
|
-
},
|
185
|
-
|
186
|
-
/**
|
187
|
-
Override this method to determine if your controller can commit the
|
188
|
-
changes. This should validate your changes. Return false or an error
|
189
|
-
object if you cannot commit the change. This method will not be called
|
190
|
-
unless hasChanges is true and all your dependent editors are return
|
191
|
-
true as well.
|
192
|
-
*/
|
193
|
-
canCommitChanges: function() {
|
194
|
-
return YES ;
|
195
|
-
},
|
196
|
-
|
197
|
-
/**
|
198
|
-
Override this method to actually commit the changes for your controller.
|
199
|
-
This will only be called if all controllers indicate that they can
|
200
|
-
commit. Return true if you succeeded or false or an error if you failed.
|
201
|
-
*/
|
202
|
-
performCommitChanges: function() {
|
203
|
-
return SC.$error('performCommitChanges is not implemented') ;
|
204
|
-
},
|
205
|
-
|
206
|
-
/**
|
207
|
-
Override this method to determine if your controller can discard the
|
208
|
-
changes it has built up. This method will not be called unless you
|
209
|
-
have set hasChanges to true. Return false or an error object if you
|
210
|
-
cannot discard the change.
|
211
|
-
*/
|
212
|
-
canDiscardChanges: function() {
|
213
|
-
return YES ;
|
214
|
-
},
|
215
|
-
|
216
|
-
/**
|
217
|
-
Override this method to actually discard the changes for your controller.
|
218
|
-
This will only be called if all controllers indicate that they can discard
|
219
|
-
their changes. Return true if you succeed or false or an error if you
|
220
|
-
failed.
|
221
|
-
*/
|
222
|
-
performDiscardChanges: function() {
|
223
|
-
return SC.$error('performDiscardChanges is not implemented');
|
224
|
-
},
|
225
|
-
|
226
|
-
// ....................................
|
227
|
-
// PRIVATE
|
228
|
-
|
229
|
-
/** @private */
|
230
|
-
init: function() {
|
231
|
-
sc_super() ;
|
232
|
-
this._contextObserver() ;
|
233
|
-
},
|
234
|
-
|
235
|
-
/** @private */
|
236
|
-
_contextObserver: function() {
|
237
|
-
if (this.context) {
|
238
|
-
// inherit the parent contexts inherit property
|
239
|
-
this.commitChangesImmediately = this.context.commitChangesImmediately ;
|
240
|
-
}
|
241
|
-
}.observes('context'),
|
242
|
-
|
243
|
-
/** @private */
|
244
|
-
_canCommitChanges: function() {
|
245
|
-
if (!this.get('hasChanges')) return NO ;
|
246
|
-
|
247
|
-
// validate editors.
|
248
|
-
var ret = YES ;
|
249
|
-
if (this._dirtyEditors) {
|
250
|
-
ret = this._dirtyEditors.invokeWhile(YES, '_canCommitChanges') ;
|
251
|
-
if (!$ok(ret)) return ret ;
|
252
|
-
}
|
253
|
-
|
254
|
-
// then validate receiver
|
255
|
-
return this.canCommitChanges() ;
|
256
|
-
},
|
257
|
-
|
258
|
-
/** @private */
|
259
|
-
_performCommitChanges: function() {
|
260
|
-
if (!this.get('hasChanges')) return true ;
|
261
|
-
|
262
|
-
// first commit any editors. If not successful, return. otherwise,
|
263
|
-
// clear editors.
|
264
|
-
var ret = YES ;
|
265
|
-
if (this._dirtyEditors) {
|
266
|
-
this._clearingChanges = YES ;
|
267
|
-
ret = this._dirtyEditors.invokeWhile(YES, '_performCommitChanges') ;
|
268
|
-
this._clearingChanges = NO ;
|
269
|
-
|
270
|
-
if ($ok(ret)) {
|
271
|
-
this._dirtyEditors = null ;
|
272
|
-
} else return ret ;
|
273
|
-
}
|
274
|
-
|
275
|
-
// now commit changes for the receiver.
|
276
|
-
ret = this.performCommitChanges() ;
|
277
|
-
if ($ok(ret)) this.editorDidClearChanges() ;
|
278
|
-
return ret ;
|
279
|
-
},
|
280
|
-
|
281
|
-
/** @private */
|
282
|
-
_canDiscardChanges: function() {
|
283
|
-
if (!this.get('hasChanges')) return false ;
|
284
|
-
// validate editors.
|
285
|
-
var ret = YES ;
|
286
|
-
if (this._dirtyEditors) {
|
287
|
-
ret = this._dirtyEditors.invokeWhile(YES, '_canDiscardChanges') ;
|
288
|
-
if (!$ok(ret)) return ret ;
|
289
|
-
}
|
290
|
-
|
291
|
-
// then validate receiver
|
292
|
-
return this.canDiscardChanges() ;
|
293
|
-
},
|
294
|
-
|
295
|
-
/** @private */
|
296
|
-
_performDiscardChanges: function() {
|
297
|
-
if (!this.get('hasChanges')) return YES ;
|
298
|
-
|
299
|
-
// first discard changes for any editors. If not successful, return.
|
300
|
-
// otherwise, clear editors.
|
301
|
-
var ret = YES ;
|
302
|
-
if (this._dirtyEditors) {
|
303
|
-
this._clearingChanges = YES ;
|
304
|
-
ret = this._dirtyEditors.invokeWhile(YES, '_performDiscardChanges') ;
|
305
|
-
this._clearingChanges = NO ;
|
306
|
-
if ($ok(ret)) {
|
307
|
-
this._dirtyEditors = null ;
|
308
|
-
} else return ret ;
|
309
|
-
}
|
310
|
-
|
311
|
-
// now discard changes for the receiver.
|
312
|
-
ret = this.performDiscardChanges() ;
|
313
|
-
if ($ok(ret)) this.editorDidClearChanges() ;
|
314
|
-
return ret ;
|
315
|
-
}
|
43
|
+
isEditable: YES
|
316
44
|
|
317
45
|
});
|
@@ -47,375 +47,277 @@ require('controllers/controller') ;
|
|
47
47
|
instead of an array.
|
48
48
|
|
49
49
|
@extends SC.Controller
|
50
|
+
@since SproutCore 1.0
|
50
51
|
*/
|
51
52
|
SC.ObjectController = SC.Controller.extend(
|
52
53
|
/** @scope SC.ObjectController.prototype */ {
|
53
|
-
|
54
|
-
//
|
54
|
+
|
55
|
+
// ..........................................................
|
55
56
|
// PROPERTIES
|
56
|
-
//
|
57
|
+
//
|
57
58
|
|
58
59
|
/**
|
59
|
-
|
60
|
-
|
60
|
+
Set to the object you want this controller to manage. The object should
|
61
|
+
usually be a single value; not an array or enumerable. If you do supply
|
62
|
+
an array or enumerable with a single item in it, the ObjectController
|
63
|
+
will manage that single item.
|
64
|
+
|
65
|
+
Usually your content object should implement the SC.Observable mixin, but
|
66
|
+
this is not required. All SC.Object-based objects support SC.Observable
|
67
|
+
|
68
|
+
@property
|
69
|
+
@type Object
|
61
70
|
*/
|
62
71
|
content: null,
|
63
|
-
contentBindingDefault: SC.Binding.multiple(),
|
64
72
|
|
65
73
|
/**
|
66
|
-
|
67
|
-
|
68
|
-
|
74
|
+
If YES, then setting the content to an enumerable or an array with more
|
75
|
+
than one item will cause the Controller to attempt to treat the array as
|
76
|
+
a single object. Use of get(), for example, will get every property on
|
77
|
+
the enumerable and return it. set() will set the property on every item
|
78
|
+
in the enumerable.
|
79
|
+
|
80
|
+
If NO, then setting content to an enumerable with multiple items will be
|
81
|
+
treated like setting a null value. hasContent will be NO.
|
69
82
|
|
70
83
|
@type Boolean
|
71
84
|
*/
|
72
|
-
|
73
|
-
|
85
|
+
allowsMultipleContent: NO,
|
86
|
+
|
74
87
|
/**
|
75
|
-
|
76
|
-
|
88
|
+
Becomes YES whenever this object is managing content. Usually this means
|
89
|
+
the content property contains a single object or an array or enumerable
|
90
|
+
with a single item. Array's or enumerables with multiple items will
|
91
|
+
normally make this property NO unless allowsMultipleContent is YES.
|
77
92
|
|
93
|
+
@property
|
78
94
|
@type Boolean
|
79
95
|
*/
|
80
|
-
|
96
|
+
hasContent: function() {
|
97
|
+
return !SC.none(this.get('observableContent'));
|
98
|
+
}.property('observableContent'),
|
81
99
|
|
82
100
|
/**
|
83
|
-
|
84
|
-
|
101
|
+
Makes a controller editable or not editable. The SC.Controller class
|
102
|
+
itself does not do anything with this property but subclasses will
|
103
|
+
respect it when modifying content.
|
85
104
|
|
105
|
+
@property
|
86
106
|
@type Boolean
|
87
107
|
*/
|
88
|
-
|
89
|
-
|
90
|
-
/**
|
91
|
-
Set to true if the controller has any content, even an empty array.
|
92
|
-
*/
|
93
|
-
hasContent: function() {
|
94
|
-
return this.get('content') ;
|
95
|
-
}.property('content'),
|
96
|
-
|
108
|
+
isEditable: YES,
|
109
|
+
|
97
110
|
/**
|
98
|
-
|
99
|
-
|
111
|
+
Primarily for internal use. Normally you should not access this property
|
112
|
+
directly.
|
100
113
|
|
101
|
-
|
114
|
+
Returns the actual observable object proxied by this controller. Usually
|
115
|
+
this property will mirror the content property. In some cases - notably
|
116
|
+
when setting content to an enumerable, this may return a different object.
|
117
|
+
|
118
|
+
Note that if you set the content to an enumerable which itself contains
|
119
|
+
enumerables and allowsMultipleContent is NO, this will become null.
|
120
|
+
|
121
|
+
@property
|
122
|
+
@type Object
|
102
123
|
*/
|
103
|
-
|
104
|
-
|
124
|
+
observableContent: function() {
|
125
|
+
var content = this.get('content'),
|
126
|
+
len, allowsMultiple;
|
127
|
+
|
128
|
+
// if enumerable, extract the first item or possibly become null
|
129
|
+
if (content && content.isEnumerable) {
|
130
|
+
len = content.get('length');
|
131
|
+
allowsMultiple = this.get('allowsMultipleContent');
|
132
|
+
|
133
|
+
if (len === 1) content = content.firstObject();
|
134
|
+
else if (len===0 || !allowsMultiple) content = null;
|
135
|
+
|
136
|
+
// if we got some new content, it better not be enum also...
|
137
|
+
if (content && !allowsMultiple && content.isEnumerable) content=null;
|
138
|
+
}
|
139
|
+
|
140
|
+
return content;
|
141
|
+
}.property('content', 'allowsMultipleContent').cacheable(),
|
142
|
+
|
143
|
+
// ..........................................................
|
144
|
+
// METHODS
|
145
|
+
//
|
146
|
+
|
105
147
|
/**
|
106
|
-
Override this method to destroy the selected object.
|
148
|
+
Override this method to destroy the selected object.
|
107
149
|
|
108
150
|
The default just passes this call onto the content object if it supports
|
109
|
-
it, and then sets the content to null.
|
151
|
+
it, and then sets the content to null.
|
152
|
+
|
153
|
+
Unlike most calls to destroy() this will not actually destroy the
|
154
|
+
controller itself; only the the content. You continue to use the
|
155
|
+
controller by setting the content to a new value.
|
156
|
+
|
157
|
+
@returns {SC.ObjectController} receiver
|
110
158
|
*/
|
111
159
|
destroy: function() {
|
112
|
-
var content = this.get('
|
113
|
-
if (content && SC.typeOf(content.destroy) === SC.T_FUNCTION)
|
160
|
+
var content = this.get('observableContent') ;
|
161
|
+
if (content && SC.typeOf(content.destroy) === SC.T_FUNCTION) {
|
162
|
+
content.destroy();
|
163
|
+
}
|
114
164
|
this.set('content', null) ;
|
165
|
+
return this;
|
115
166
|
},
|
116
167
|
|
117
|
-
// ...............................
|
118
|
-
// INTERNAL SUPPORT
|
119
|
-
//
|
120
|
-
|
121
168
|
/**
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
169
|
+
Invoked whenever any property on the content object changes.
|
170
|
+
|
171
|
+
The default implementation will simply notify any observers that the
|
172
|
+
property has changed. You can override this method if you need to do
|
173
|
+
some custom work when the content property changes.
|
127
174
|
|
128
|
-
|
129
|
-
|
130
|
-
|
175
|
+
If you have set the content property to an enumerable with multiple
|
176
|
+
objects and you set allowsMultipleContent to YES, this method will be
|
177
|
+
called anytime any property in the set changes.
|
131
178
|
|
132
|
-
|
133
|
-
|
134
|
-
var isArray = false ;
|
135
|
-
if (SC.isArray(content)) {
|
136
|
-
var len = this._lengthFor(content) ;
|
137
|
-
if (len === 0) {
|
138
|
-
content = null ;
|
139
|
-
} else if (len === 1) {
|
140
|
-
content = this._objectAt(0, content) ;
|
141
|
-
} else if (this.get('allowsMultipleContent')) {
|
142
|
-
isArray = true ;
|
143
|
-
} else content = null ;
|
144
|
-
}
|
179
|
+
If all properties have changed on the content or if the content itself
|
180
|
+
has changed, this method will be called with a key of "*".
|
145
181
|
|
146
|
-
|
182
|
+
@param {Object} target the content object
|
183
|
+
@param {String} key the property that changes
|
184
|
+
@returns {void}
|
185
|
+
*/
|
186
|
+
contentPropertyDidChange: function(target, key) {
|
187
|
+
if (key === '*') this.allPropertiesDidChange();
|
188
|
+
else this.notifyPropertyChange(key);
|
189
|
+
},
|
190
|
+
|
191
|
+
/**
|
192
|
+
Called whenver you try to get/set an unknown property. The default
|
193
|
+
implementation will pass through to the underlying content object but
|
194
|
+
you can override this method to do some other kind of processing if
|
195
|
+
needed.
|
196
|
+
*/
|
197
|
+
unknownProperty: function(key,value) {
|
198
|
+
|
199
|
+
// avoid circular references
|
200
|
+
if (key==='content') {
|
201
|
+
if (value !== undefined) this.content = value;
|
202
|
+
return this.content;
|
203
|
+
}
|
147
204
|
|
148
|
-
//
|
149
|
-
|
150
|
-
|
205
|
+
// for all other keys, just pass through to the observable object if
|
206
|
+
// there is one. Use getEach() and setEach() on enumerable objects.
|
207
|
+
var content = this.get('observableContent'), loc, cur, isSame;
|
208
|
+
if (content===null || content===undefined) return undefined; // empty
|
151
209
|
|
152
|
-
//
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
if (!this._changes.hasOwnProperty(key)) continue ;
|
166
|
-
var value = this._changes[key];
|
167
|
-
|
168
|
-
// if the value is an array, get the idx matching the content
|
169
|
-
// object. Otherwise, just use the value of the item.
|
170
|
-
if(SC.isArray(value)) {
|
171
|
-
value = this._objectAt(loc, value) ;
|
210
|
+
// getter...
|
211
|
+
if (value === undefined) {
|
212
|
+
if (content.isEnumerable) {
|
213
|
+
value = content.getEach(key);
|
214
|
+
|
215
|
+
// iterate over array to see if all values are the same. if so, then
|
216
|
+
// just return that value
|
217
|
+
loc = value.get('length');
|
218
|
+
if (loc>0) {
|
219
|
+
isSame = YES;
|
220
|
+
cur = value.objectAt(0);
|
221
|
+
while((--loc > 0) && isSame) {
|
222
|
+
if (cur !== value.objectAt(loc)) isSame = NO ;
|
172
223
|
}
|
173
|
-
|
174
|
-
|
175
|
-
object.set(key,value) ;
|
176
|
-
} else object[key] = value ;
|
177
|
-
}
|
224
|
+
if (isSame) value = cur;
|
225
|
+
} else value = undefined; // empty array.
|
178
226
|
|
179
|
-
|
180
|
-
if (object.commitChanges) ret = object.commitChanges() ;
|
181
|
-
}
|
227
|
+
} else value = (content.isObservable) ? content.get(key) : content[key];
|
182
228
|
|
183
|
-
//
|
184
|
-
// value and copy it to the object.
|
229
|
+
// setter
|
185
230
|
} else {
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
// save the set of changes to apply them. Nothing should clear it but
|
190
|
-
// just in case.
|
191
|
-
var changes = this._changes ;
|
192
|
-
for(key in changes) {
|
193
|
-
if (!changes.hasOwnProperty(key)) continue;
|
194
|
-
|
195
|
-
var oldValue = content.get ? content.get(key) : content[key];
|
196
|
-
var newValue = changes[key];
|
197
|
-
|
198
|
-
if (SC.none(oldValue) && newValue === '') newValue = null;
|
199
|
-
if (newValue != oldValue) {
|
200
|
-
if (content.set) {
|
201
|
-
content.set('isDirty', YES);
|
202
|
-
} else {
|
203
|
-
content.isDirty=YES;
|
204
|
-
}
|
205
|
-
}
|
206
|
-
|
207
|
-
if (content.set) {
|
208
|
-
content.set(key, newValue);
|
209
|
-
} else {
|
210
|
-
content[key] = newValue;
|
211
|
-
}
|
231
|
+
if (!this.get('isEditable')) {
|
232
|
+
throw "%@.%@ is not editable".fmt(this,key);
|
212
233
|
}
|
213
234
|
|
214
|
-
if (content.
|
215
|
-
if (content.
|
216
|
-
|
217
|
-
|
218
|
-
// if commit was successful, dump changes hash and clear editor.
|
219
|
-
if (SC.$ok(ret)) {
|
220
|
-
this._changes = {} ;
|
221
|
-
//this._valueControllers = {};
|
222
|
-
this.editorDidClearChanges() ;
|
235
|
+
if (content.isEnumerable) content.setEach(key, value);
|
236
|
+
else if (content.isObservable) content.set(key, value);
|
237
|
+
else content[key] = value;
|
223
238
|
}
|
224
239
|
|
225
|
-
return
|
226
|
-
},
|
227
|
-
|
228
|
-
/** @private */
|
229
|
-
performDiscardChanges: function() {
|
230
|
-
this._changes = {};
|
231
|
-
this._valueControllers = {};
|
232
|
-
this.editorDidClearChanges();
|
233
|
-
this.allPropertiesDidChange();
|
234
|
-
return true ;
|
240
|
+
return value;
|
235
241
|
},
|
236
242
|
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
if (key == "content")
|
241
|
-
{
|
242
|
-
// FOR CONTENT KEY:
|
243
|
-
// avoid circular references. If you try to set content, just save the
|
244
|
-
// value. The propertyObserver will be triggered below to do the rest of
|
245
|
-
// the setup as needed.
|
246
|
-
if (!(value === undefined)) this[key] = value;
|
247
|
-
return this[key];
|
248
|
-
}
|
249
|
-
else
|
250
|
-
{
|
251
|
-
// FOR ALL OTHER KEYS:
|
252
|
-
// Save the value in our temporary hash and note the changes in the
|
253
|
-
// editor.
|
243
|
+
// ...............................
|
244
|
+
// INTERNAL SUPPORT
|
245
|
+
//
|
254
246
|
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
{
|
260
|
-
// for changes, save in _changes hash and note that a change is required.
|
261
|
-
this._changes[key] = value;
|
262
|
-
if (this._valueControllers[key])
|
263
|
-
{
|
264
|
-
this._valueControllers[key] = null;
|
265
|
-
}
|
266
|
-
// notifying observers regarless if a controller had been created since they're lazy loaded
|
267
|
-
this.propertyWillChange(key + "Controller");
|
268
|
-
this.propertyDidChange(key + "Controller");
|
269
|
-
this.editorDidChange();
|
270
|
-
}
|
271
|
-
else
|
272
|
-
{
|
273
|
-
// are we requesting the controller for a value?
|
274
|
-
if (key.slice(key.length-10,key.length) == "Controller")
|
275
|
-
{
|
276
|
-
// the actual value...
|
277
|
-
key = key.slice(0,-10);
|
278
|
-
if ( !this._valueControllers[key] )
|
279
|
-
{
|
280
|
-
this._valueControllers[key] = this.controllerForValue(this._getValueForPropertyKey(key));
|
281
|
-
}
|
282
|
-
value = this._valueControllers[key];
|
283
|
-
}
|
284
|
-
else
|
285
|
-
{
|
286
|
-
// otherwise, get the value.
|
287
|
-
// first check the _changes hash, then check the content object.
|
288
|
-
value = this._getValueForPropertyKey(key);
|
289
|
-
}
|
290
|
-
}
|
291
|
-
return value;
|
292
|
-
}
|
247
|
+
/** @private - setup observer on init if needed. */
|
248
|
+
init: function() {
|
249
|
+
sc_super();
|
250
|
+
if (this.get('observableContent')) this._scoc_contentDidChange();
|
293
251
|
},
|
294
|
-
|
295
|
-
_getValueForPropertyKey: function( key )
|
296
|
-
{
|
297
|
-
// first check the changes hash for a uncommited value...
|
298
|
-
var value = this._changes[key];
|
299
|
-
// sweet, no need to proceed.
|
300
|
-
if ( value !== undefined ) return value;
|
301
252
|
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
253
|
+
/**
|
254
|
+
@private
|
255
|
+
|
256
|
+
Called whenever the observable content property changes. This will setup
|
257
|
+
observers on the content if needed.
|
258
|
+
*/
|
259
|
+
_scoc_contentDidChange: function() {
|
260
|
+
var last = this._scoc_observableContent,
|
261
|
+
cur = this.get('observableContent'),
|
262
|
+
func = this.contentPropertyDidChange,
|
263
|
+
efunc= this._scoc_enumerableContentDidChange;
|
306
264
|
|
307
|
-
if (
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
if (this.get('allowsMultipleContent')) {
|
316
|
-
for(var idx=0; idx < len; idx++) {
|
317
|
-
var item = this._objectAt(idx, obj) ;
|
318
|
-
value.push(item ? (item.get ? item.get(key) : item[key]) : null) ;
|
319
|
-
}
|
320
|
-
} else {
|
321
|
-
value = null;
|
322
|
-
}
|
323
|
-
}
|
324
|
-
else if (len == 1)
|
325
|
-
{
|
326
|
-
// if content is array with one item, collect from first obj.
|
327
|
-
obj = this._objectAt(0,obj) ;
|
328
|
-
value = obj.get ? obj.get(key) : obj[key] ;
|
329
|
-
}
|
330
|
-
else
|
331
|
-
{
|
332
|
-
// if content is empty array, act as if null.
|
333
|
-
value = null;
|
334
|
-
}
|
335
|
-
}
|
336
|
-
else
|
337
|
-
{
|
338
|
-
// content is a single item. Just get the property.
|
339
|
-
value = obj.get ? obj.get(key) : obj[key] ;
|
265
|
+
if (last === cur) return this; // nothing to do
|
266
|
+
|
267
|
+
this._scoc_observableContent = cur; // save old content
|
268
|
+
|
269
|
+
// stop observing last item -- if enumerable stop observing set
|
270
|
+
if (last) {
|
271
|
+
if (last.isEnumerable) last.removeObserver('[]', this, efunc);
|
272
|
+
else if (last.isObservable) last.removeObserver('*', this, func);
|
340
273
|
}
|
341
|
-
return value;
|
342
|
-
},
|
343
|
-
|
344
|
-
_lastContentPropertyRevision: 0,
|
345
|
-
|
346
|
-
/** @private */
|
347
|
-
_contentDidChange: function(target,key,value,propertyRevision) {
|
348
274
|
|
349
|
-
|
350
|
-
|
275
|
+
if (cur) {
|
276
|
+
if (cur.isEnumerable) cur.addObserver('[]', this, efunc);
|
277
|
+
else if (cur.isObservable) cur.addObserver('*', this, func);
|
278
|
+
}
|
351
279
|
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
if (!SC.$ok(er)) throw(er) ;
|
357
|
-
} else {
|
358
|
-
// no changes, but we want to ensure that we flush the cache
|
359
|
-
// of any SC.Controllers we have for the content
|
360
|
-
this._valueControllers = {} ;
|
361
|
-
}
|
362
|
-
|
363
|
-
// get the handler method
|
364
|
-
var f = this._contentPropertyDidChange ;
|
365
|
-
|
366
|
-
// stop listening to old content.
|
367
|
-
if (this._content) {
|
368
|
-
if (SC.isArray(this._content)) {
|
369
|
-
this._content.invoke('removeObserver', '*', this, f) ;
|
370
|
-
} else if (this._content.removeObserver) {
|
371
|
-
this._content.removeObserver('*', this, f) ;
|
372
|
-
}
|
373
|
-
}
|
374
|
-
|
375
|
-
// start listening for changes on the new content object.
|
376
|
-
this._content = value ;
|
377
|
-
if (value) {
|
378
|
-
if (SC.isArray(value)) {
|
379
|
-
value.invoke('addObserver', '*', this, f) ;
|
380
|
-
} else if (value.addObserver) {
|
381
|
-
value.addObserver('*', this, f) ;
|
382
|
-
}
|
383
|
-
}
|
280
|
+
// notify!
|
281
|
+
if ((last && last.isEnumerable) || (cur && cur.isEnumerable)) {
|
282
|
+
this._scoc_enumerableContentDidChange();
|
283
|
+
} else this.contentPropertyDidChange(cur, '*');
|
384
284
|
|
385
|
-
|
386
|
-
var count = !value ? 0 : (SC.isArray(value) ? this._lengthFor(value) : 1) ;
|
387
|
-
|
388
|
-
// New content is configured, update controller stats
|
389
|
-
this.beginPropertyChanges() ;
|
390
|
-
this.set('hasNoContent',count === 0) ;
|
391
|
-
this.set('hasSingleContent',count === 1) ;
|
392
|
-
this.set('hasMultipleContent',count > 1) ;
|
393
|
-
|
394
|
-
// notify everyone that everything is different now.
|
395
|
-
this.allPropertiesDidChange() ;
|
396
|
-
this.endPropertyChanges() ;
|
397
|
-
}
|
398
|
-
}.observes('content'),
|
285
|
+
}.observes("observableContent"),
|
399
286
|
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
287
|
+
/** @private
|
288
|
+
Called when observed enumerable content has changed. This will teardown
|
289
|
+
and setup observers on the enumerable content items and then calls
|
290
|
+
contentPropertyDidChange(). This method may be called even if the new
|
291
|
+
'cur' is not enumerable but the last content was enumerable.
|
292
|
+
*/
|
293
|
+
_scoc_enumerableContentDidChange: function() {
|
294
|
+
var cur = this.get('observableContent'),
|
295
|
+
set = this._scoc_observableContentItems,
|
296
|
+
func = this.contentPropertyDidChange;
|
297
|
+
|
298
|
+
// stop observing each old item
|
299
|
+
if (set) {
|
300
|
+
set.forEach(function(item) {
|
301
|
+
if (item.isObservable) item.removeObserver('*', this, func);
|
302
|
+
}, this);
|
303
|
+
set.clear();
|
409
304
|
}
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
305
|
+
|
306
|
+
// start observing new items if needed
|
307
|
+
if (cur && cur.isEnumerable) {
|
308
|
+
if (!set) set = SC.Set.create();
|
309
|
+
cur.forEach(function(item) {
|
310
|
+
if (set.contains(item)) return ; // nothing to do
|
311
|
+
set.add(item);
|
312
|
+
if (item.isObservable) item.addObserver('*', this, func);
|
313
|
+
}, this);
|
314
|
+
} else set = null;
|
315
|
+
|
316
|
+
this._scoc_observableContentItems = set; // save for later cleanup
|
416
317
|
|
417
|
-
|
418
|
-
|
318
|
+
// notify
|
319
|
+
this.contentPropertyDidChange(cur, '*');
|
320
|
+
return this ;
|
419
321
|
}
|
420
|
-
|
322
|
+
|
421
323
|
}) ;
|