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
@@ -18,7 +18,7 @@
|
|
18
18
|
@since SproutCore 1.0
|
19
19
|
*/
|
20
20
|
|
21
|
-
SC.RecordArray = SC.Object.extend(SC.Enumerable, SC.Array,
|
21
|
+
SC.RecordArray = SC.Object.extend(SC.Enumerable, SC.Array,
|
22
22
|
/** @scope SC.RecordArray.prototype */ {
|
23
23
|
|
24
24
|
/**
|
@@ -36,6 +36,35 @@ SC.RecordArray = SC.Object.extend(SC.Enumerable, SC.Array,
|
|
36
36
|
@property {SC.Array}
|
37
37
|
*/
|
38
38
|
storeKeys: null,
|
39
|
+
|
40
|
+
/**
|
41
|
+
SC.Query object that is set if record array is based on a query.
|
42
|
+
Whenever the store keys content change, the SC.Query will be
|
43
|
+
reapplied so that only matching storeKeys are set on the record
|
44
|
+
array.
|
45
|
+
|
46
|
+
@property {SC.Query}
|
47
|
+
*/
|
48
|
+
queryKey: null,
|
49
|
+
|
50
|
+
/**
|
51
|
+
The current load state of the RecordArray. If the storeKeys has a state
|
52
|
+
property, then this property will return that value. Otherwise it returns
|
53
|
+
SC.Record.READY.
|
54
|
+
*/
|
55
|
+
state: function() {
|
56
|
+
var storeKeys = this.get('storeKeys'),
|
57
|
+
ret = (storeKeys && !SC.none(storeKeys.state)) ? storeKeys.get('state') : null;
|
58
|
+
return ret ? ret : SC.Record.READY;
|
59
|
+
}.property().cacheable(),
|
60
|
+
|
61
|
+
/** @private
|
62
|
+
Cache of records returned from objectAt() so they don't need to
|
63
|
+
be unneccesarily materialized.
|
64
|
+
|
65
|
+
@property {SC.Query}
|
66
|
+
*/
|
67
|
+
_records: null,
|
39
68
|
|
40
69
|
// ..........................................................
|
41
70
|
// ARRAY PRIMITIVES
|
@@ -52,6 +81,9 @@ SC.RecordArray = SC.Object.extend(SC.Enumerable, SC.Array,
|
|
52
81
|
/**
|
53
82
|
Looks up the store key in the store keys array and materializes a
|
54
83
|
records.
|
84
|
+
|
85
|
+
@param {Number} idx index of the object
|
86
|
+
@return {SC.Record} materialized record
|
55
87
|
*/
|
56
88
|
objectAt: function(idx) {
|
57
89
|
var recs = this._records,
|
@@ -65,8 +97,8 @@ SC.RecordArray = SC.Object.extend(SC.Enumerable, SC.Array,
|
|
65
97
|
// not in cache, materialize
|
66
98
|
if (!recs) this._records = recs = [] ; // create cache
|
67
99
|
storeKey = storeKeys.objectAt(idx);
|
100
|
+
|
68
101
|
if (storeKey) {
|
69
|
-
|
70
102
|
// if record is not loaded already, then ask the data source to
|
71
103
|
// retrieve it
|
72
104
|
if (store.readStatus(storeKey) === SC.Record.EMPTY) {
|
@@ -80,6 +112,11 @@ SC.RecordArray = SC.Object.extend(SC.Enumerable, SC.Array,
|
|
80
112
|
/**
|
81
113
|
Pass through to the underlying array. The passed in objects must be
|
82
114
|
records, which can be converted to storeKeys.
|
115
|
+
|
116
|
+
@param {Number} idx start index
|
117
|
+
@param {Number} amt end index
|
118
|
+
@param {SC.RecordArray} recs to replace with records
|
119
|
+
@return {SC.RecordArray} 'this' after replace
|
83
120
|
*/
|
84
121
|
replace: function(idx, amt, recs) {
|
85
122
|
var storeKeys = this.get('storeKeys'),
|
@@ -97,6 +134,87 @@ SC.RecordArray = SC.Object.extend(SC.Enumerable, SC.Array,
|
|
97
134
|
return this;
|
98
135
|
},
|
99
136
|
|
137
|
+
/**
|
138
|
+
Called to refresh the query that is attached to this record array.
|
139
|
+
This will force the query to evaluated again against the store.
|
140
|
+
*/
|
141
|
+
refreshQuery: function() {
|
142
|
+
var query = this.get('queryKey');
|
143
|
+
|
144
|
+
if(query) {
|
145
|
+
var recordType = query.get('recordType');
|
146
|
+
var storeKeys = this.get('store').storeKeysFor(recordType);
|
147
|
+
|
148
|
+
var recordTypes = SC.Set.create();
|
149
|
+
recordTypes.push(recordType);
|
150
|
+
|
151
|
+
// clear existing storeKeys, start over by applying all storekeys for
|
152
|
+
// this recordType
|
153
|
+
this.storeKeys = [];
|
154
|
+
this.applyQuery(storeKeys, recordTypes);
|
155
|
+
}
|
156
|
+
|
157
|
+
},
|
158
|
+
|
159
|
+
/**
|
160
|
+
Apply the SC.Query again. This is invoked when new records are loaded
|
161
|
+
or changed in the store (or directly on the array with .replace() ) and
|
162
|
+
and when we need to refresh all SC.Query 'based' record arrays accordingly.
|
163
|
+
|
164
|
+
@param {Array} storeKeys to evaluate against the query
|
165
|
+
@param {SC.Set} recordTypes set of record types that changed
|
166
|
+
@param {Boolean} notify to send length notifyPropertyChange()
|
167
|
+
*/
|
168
|
+
applyQuery: function(changedStoreKeys, recordTypes, notify) {
|
169
|
+
var newStoreKeys = this.get('storeKeys'), inChangedStoreKeys,
|
170
|
+
inMatchingStoreKeys, idx, len, storeKey, queryKey = this.get('queryKey'),
|
171
|
+
store = this.get('store');
|
172
|
+
|
173
|
+
// first check if these changes include any of the record types
|
174
|
+
if(recordTypes && queryKey.recordType && !recordTypes.contains(queryKey.recordType)) return;
|
175
|
+
|
176
|
+
var matchingStoreKeys = SC.Query.containsStoreKeys(queryKey,
|
177
|
+
changedStoreKeys, store);
|
178
|
+
|
179
|
+
// Will iterate through all changed store keys and make sure they:
|
180
|
+
// 1. Are added if they are new AND match the query
|
181
|
+
// 2. Are removed if they exist and do NOT match the query
|
182
|
+
for(idx=0,len=changedStoreKeys.length;idx<len;idx++) {
|
183
|
+
storeKey = changedStoreKeys[idx];
|
184
|
+
inMatchingStoreKeys = (matchingStoreKeys &&
|
185
|
+
matchingStoreKeys.indexOf(storeKey)!==-1) ? YES: NO;
|
186
|
+
var inRecArray = this.storeKeys.indexOf(storeKey)!==-1 ? YES : NO;
|
187
|
+
|
188
|
+
if(inMatchingStoreKeys && !inRecArray) {
|
189
|
+
newStoreKeys.push(storeKey);
|
190
|
+
}
|
191
|
+
else if(!inMatchingStoreKeys && inRecArray) {
|
192
|
+
newStoreKeys.removeObject(storeKey);
|
193
|
+
}
|
194
|
+
|
195
|
+
}
|
196
|
+
|
197
|
+
SC.Query.orderStoreKeys(newStoreKeys, queryKey, store);
|
198
|
+
// clear cache
|
199
|
+
this._records = null;
|
200
|
+
|
201
|
+
this.storeKeys = newStoreKeys.addObserver('[]', this, this._storeKeysContentDidChange);
|
202
|
+
if(notify) this.notifyPropertyChange('length');
|
203
|
+
},
|
204
|
+
|
205
|
+
/**
|
206
|
+
Will call findAll() on the store, which allows for chaining findAll
|
207
|
+
statements. Note that chaining findAll() will not notify the data
|
208
|
+
source (only the initial findAll will).
|
209
|
+
|
210
|
+
@param {SC.Query} queryKey a SC.Query object
|
211
|
+
@returns {SC.RecordArray}
|
212
|
+
*/
|
213
|
+
|
214
|
+
findAll: function(queryKey) {
|
215
|
+
return this.get('store').findAll(queryKey, null, this);
|
216
|
+
},
|
217
|
+
|
100
218
|
// ..........................................................
|
101
219
|
// INTERNAL SUPPORT
|
102
220
|
//
|
@@ -105,19 +223,25 @@ SC.RecordArray = SC.Object.extend(SC.Enumerable, SC.Array,
|
|
105
223
|
Invoked whenever the storeKeys array changes. Observes changes.
|
106
224
|
*/
|
107
225
|
_storeKeysDidChange: function() {
|
226
|
+
|
108
227
|
var storeKeys = this.get('storeKeys');
|
109
|
-
|
110
|
-
|
228
|
+
|
229
|
+
var prev = this._prevStoreKeys,
|
230
|
+
f = this._storeKeysContentDidChange,
|
231
|
+
fs = this._storeKeysStateDidChange;
|
232
|
+
|
111
233
|
if (storeKeys === prev) return this; // nothing to do
|
112
234
|
|
113
235
|
if (prev) {
|
114
236
|
prev.removeObserver('[]', this, f);
|
237
|
+
prev.removeObserver('state', this, fs);
|
115
238
|
}
|
116
239
|
|
117
240
|
this._prevStoreKeys = storeKeys;
|
118
|
-
|
241
|
+
|
119
242
|
if (storeKeys) {
|
120
243
|
storeKeys.addObserver('[]', this, f);
|
244
|
+
storeKeys.addObserver('state', this, fs);
|
121
245
|
}
|
122
246
|
|
123
247
|
var rev = (storeKeys) ? storeKeys.propertyRevision : -1 ;
|
@@ -125,6 +249,13 @@ SC.RecordArray = SC.Object.extend(SC.Enumerable, SC.Array,
|
|
125
249
|
|
126
250
|
}.observes('storeKeys'),
|
127
251
|
|
252
|
+
/** @private
|
253
|
+
Invoked whenever the state property of the storeKeys change.
|
254
|
+
*/
|
255
|
+
_storeKeysStateDidChange: function() {
|
256
|
+
this.notifyPropertyChange('state');
|
257
|
+
},
|
258
|
+
|
128
259
|
/** @private
|
129
260
|
Invoked whenever the content of the storeKeys array changes. This will
|
130
261
|
dump any cached record lookup and then notify that the enumerable content
|
@@ -132,6 +263,13 @@ SC.RecordArray = SC.Object.extend(SC.Enumerable, SC.Array,
|
|
132
263
|
*/
|
133
264
|
_storeKeysContentDidChange: function(target, key, value, rev) {
|
134
265
|
this._records = null ; // clear cache
|
266
|
+
// if this record array is based on a queryKey reapply the
|
267
|
+
// the query before setting the storeKeys to ensure it always conforms
|
268
|
+
|
269
|
+
if(SC.instanceOf(this.queryKey, SC.Query)) {
|
270
|
+
this.storeKeys = SC.Query.containsStoreKeys(this.queryKey, value, this.store);
|
271
|
+
this.notifyPropertyChange('length');
|
272
|
+
}
|
135
273
|
|
136
274
|
this.beginPropertyChanges()
|
137
275
|
.notifyPropertyChange('length')
|
@@ -48,6 +48,11 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
48
48
|
*/
|
49
49
|
isNested: NO,
|
50
50
|
|
51
|
+
/**
|
52
|
+
This type of store is not nested.
|
53
|
+
*/
|
54
|
+
commitRecordsAutomatically: NO,
|
55
|
+
|
51
56
|
// ..........................................................
|
52
57
|
// DATA SOURCE SUPPORT
|
53
58
|
//
|
@@ -56,6 +61,11 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
56
61
|
Convenience method. Sets the current data source to the passed property.
|
57
62
|
This will also set the store property on the dataSource to the receiver.
|
58
63
|
|
64
|
+
If you are using this from the core.js method of your app, you may need to
|
65
|
+
just pass a string naming your data source class. If this is the case,
|
66
|
+
then your data source will be instantiated the first time it is requested.
|
67
|
+
|
68
|
+
@param {SC.DataSource|String} dataSource the data source
|
59
69
|
@returns {SC.Store} receiver
|
60
70
|
*/
|
61
71
|
from: function(dataSource) {
|
@@ -63,6 +73,17 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
63
73
|
return this ;
|
64
74
|
},
|
65
75
|
|
76
|
+
// lazily convert data source to real object
|
77
|
+
_getDataSource: function() {
|
78
|
+
var ret = this.get('dataSource');
|
79
|
+
if (typeof ret === SC.T_STRING) {
|
80
|
+
ret = SC.objectForPropertyPath(ret);
|
81
|
+
if (ret) ret = ret.create();
|
82
|
+
if (ret) this.set('dataSource', ret);
|
83
|
+
}
|
84
|
+
return ret;
|
85
|
+
},
|
86
|
+
|
66
87
|
/**
|
67
88
|
Convenience method. Creates a CascadeDataSource with the passed
|
68
89
|
data source arguments and sets the CascadeDataSource as the data source
|
@@ -95,12 +116,17 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
95
116
|
store.commitChanges().destroy();
|
96
117
|
}}}
|
97
118
|
|
119
|
+
@param {Hash} attrs optional attributes to set on new store
|
98
120
|
@returns {SC.NestedStore} new nested store chained to receiver
|
99
121
|
*/
|
100
|
-
chain: function() {
|
101
|
-
|
102
|
-
|
103
|
-
|
122
|
+
chain: function(attrs) {
|
123
|
+
if (!attrs) attrs = {};
|
124
|
+
attrs.parentStore = this;
|
125
|
+
|
126
|
+
var ret = SC.NestedStore.create(attrs),
|
127
|
+
nested = this.nestedStores;
|
128
|
+
|
129
|
+
if (!nested) nested = this.nestedStores = [];
|
104
130
|
nested.push(ret);
|
105
131
|
return ret ;
|
106
132
|
},
|
@@ -119,6 +145,18 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
119
145
|
return this ;
|
120
146
|
},
|
121
147
|
|
148
|
+
/**
|
149
|
+
Used to determine if a nested store belongs directly or indirectly to the
|
150
|
+
receiver.
|
151
|
+
|
152
|
+
@param {SC.Store} store store instance
|
153
|
+
@returns {Boolean} YES if belongs
|
154
|
+
*/
|
155
|
+
hasNestedStore: function(store) {
|
156
|
+
while(store && (store !== this)) store = store.get('parentStore');
|
157
|
+
return store === this ;
|
158
|
+
},
|
159
|
+
|
122
160
|
// ..........................................................
|
123
161
|
// SHARED DATA STRUCTURES
|
124
162
|
//
|
@@ -159,6 +197,20 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
159
197
|
*/
|
160
198
|
revisions: null,
|
161
199
|
|
200
|
+
/** @private
|
201
|
+
Stores three sets of record property changes (storeKeys, statuses
|
202
|
+
and recordTypes) which is used when _notifyRecordPropertyChange is
|
203
|
+
called. Makes it possible to only execute once at the end of
|
204
|
+
the runloop.
|
205
|
+
|
206
|
+
@property {Hash}
|
207
|
+
*/
|
208
|
+
recordPropertyChanges: {
|
209
|
+
storeKeys: [],
|
210
|
+
records: [],
|
211
|
+
statusOnly: []
|
212
|
+
},
|
213
|
+
|
162
214
|
/**
|
163
215
|
Array indicates whether a data hash is possibly in use by an external
|
164
216
|
record for editing. If a data hash is editable then it may be modified
|
@@ -181,6 +233,15 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
181
233
|
*/
|
182
234
|
changelog: null,
|
183
235
|
|
236
|
+
/**
|
237
|
+
A set of SC.RecordArray that have been returned from findAll with an
|
238
|
+
SC.Query. These will all be notified with _notifyRecordArraysWithQuery()
|
239
|
+
whenever the store changes.
|
240
|
+
|
241
|
+
@property {Array}
|
242
|
+
*/
|
243
|
+
recordArraysWithQuery: null,
|
244
|
+
|
184
245
|
// ..........................................................
|
185
246
|
// CORE ATTRIBUTE API
|
186
247
|
//
|
@@ -316,6 +377,10 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
316
377
|
|
317
378
|
/**
|
318
379
|
Writes the current status for a storeKey.
|
380
|
+
|
381
|
+
@param {Number} storeKey the store key
|
382
|
+
@param {String} newStatus the new status
|
383
|
+
@returns {SC.Store} receiver
|
319
384
|
*/
|
320
385
|
writeStatus: function(storeKey, newStatus) {
|
321
386
|
// use writeDataHash for now to handle optimistic lock. maximize code
|
@@ -350,41 +415,122 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
350
415
|
storeKey = storeKeys;
|
351
416
|
}
|
352
417
|
|
418
|
+
SC.RunLoop.begin();
|
353
419
|
for(idx=0;idx<len;idx++) {
|
354
420
|
if (isArray) storeKey = storeKeys[idx];
|
355
421
|
this.revisions[storeKey] = rev;
|
356
422
|
this._notifyRecordPropertyChange(storeKey, statusOnly);
|
357
423
|
}
|
358
424
|
|
425
|
+
SC.RunLoop.end();
|
426
|
+
|
359
427
|
return this ;
|
360
428
|
},
|
361
429
|
|
362
|
-
/**
|
363
|
-
Will
|
364
|
-
|
430
|
+
/** @private
|
431
|
+
Will push all changes to a the recordPropertyChanges property
|
432
|
+
and execute flushRecordChanges() once at the end of the runloop.
|
365
433
|
*/
|
366
434
|
_notifyRecordPropertyChange: function(storeKey, statusOnly) {
|
367
|
-
|
368
|
-
var records = this.records, rec ;
|
369
435
|
|
370
|
-
|
371
|
-
|
372
|
-
rec.storeDidChangeProperties(statusOnly);
|
373
|
-
}
|
374
|
-
|
436
|
+
var records = this.records, rec, editState;
|
437
|
+
|
375
438
|
// pass along to nested stores
|
376
|
-
var nestedStores = this.get('nestedStores'), len, idx, store;
|
439
|
+
var nestedStores = this.get('nestedStores'), len, idx, store, status;
|
377
440
|
var K = SC.Store;
|
378
441
|
len = nestedStores ? nestedStores.length : 0 ;
|
379
442
|
for(idx=0;idx<len;idx++) {
|
380
443
|
store = nestedStores[idx];
|
381
|
-
|
444
|
+
status = store.readStatus(storeKey);
|
445
|
+
editState = store.storeKeyEditState(storeKey);
|
446
|
+
|
447
|
+
// when store needs to propagate out changes in the parent store
|
448
|
+
// to nested stores
|
449
|
+
if(editState!==K.INHERITED && (status & SC.Record.BUSY)) {
|
450
|
+
// make sure nested store does not have any changes before resetting
|
451
|
+
if(store.get('hasChanges')) throw K.CHAIN_CONFLICT_ERROR;
|
452
|
+
store.reset();
|
453
|
+
}
|
454
|
+
|
455
|
+
if(store.storeKeyEditState(storeKey) === K.INHERITED) {
|
382
456
|
store._notifyRecordPropertyChange(storeKey, statusOnly);
|
383
457
|
}
|
384
458
|
}
|
459
|
+
|
460
|
+
// schedule
|
461
|
+
this.recordPropertyChanges.storeKeys.push(storeKey);
|
462
|
+
|
463
|
+
if (records && (rec=records[storeKey])) {
|
464
|
+
this.recordPropertyChanges.records.push(storeKey);
|
465
|
+
if(statusOnly) {
|
466
|
+
this.recordPropertyChanges.statusOnly.push(storeKey);
|
467
|
+
}
|
468
|
+
}
|
469
|
+
|
470
|
+
this._flushRecordChanges();
|
471
|
+
|
385
472
|
return this;
|
386
473
|
},
|
387
474
|
|
475
|
+
/** @private
|
476
|
+
Will notify any record instances of the property change at the end of
|
477
|
+
the run loop. Also notifies any inherited record instances as well.
|
478
|
+
|
479
|
+
Will also notify any record arrays with queries to refresh based on
|
480
|
+
the new/changed store keys.
|
481
|
+
*/
|
482
|
+
|
483
|
+
_flushRecordChanges: function() {
|
484
|
+
var storeKeys = this.recordPropertyChanges.storeKeys,
|
485
|
+
statusOnly = this.recordPropertyChanges.statusOnly,
|
486
|
+
records = this.recordPropertyChanges.records, rec,
|
487
|
+
recordType, recordTypes = SC.Set.create(), status, idx, len, storeKey;
|
488
|
+
|
489
|
+
for(idx=0,len=storeKeys.length;idx<len;idx++) {
|
490
|
+
storeKey = storeKeys[idx];
|
491
|
+
|
492
|
+
if(records.indexOf(storeKey)!==-1) {
|
493
|
+
status = statusOnly.indexOf(storeKey)!==-1 ? YES: NO;
|
494
|
+
rec = this.records[storeKey];
|
495
|
+
rec.storeDidChangeProperties(status);
|
496
|
+
// remove it so we don't trigger this twice
|
497
|
+
records.removeObject(storeKey);
|
498
|
+
}
|
499
|
+
|
500
|
+
recordType = SC.Store.recordTypeFor(storeKey);
|
501
|
+
if(!recordTypes.contains(recordType)) {
|
502
|
+
recordTypes.push(recordType);
|
503
|
+
}
|
504
|
+
|
505
|
+
}
|
506
|
+
|
507
|
+
this._notifyRecordArraysWithQuery(storeKeys, recordTypes);
|
508
|
+
|
509
|
+
// reset for next run loop
|
510
|
+
this.recordPropertyChanges.storeKeys = [];
|
511
|
+
this.recordPropertyChanges.records = [];
|
512
|
+
this.recordPropertyChanges.statusOnly = [];
|
513
|
+
},
|
514
|
+
|
515
|
+
/** @private
|
516
|
+
Will ask all record arrays that have been returned from findAll
|
517
|
+
with an SC.Query to reapply their query with the new storeKeys
|
518
|
+
|
519
|
+
@param {SC.IndexSet} storeKeys set of storeKeys that changed
|
520
|
+
@param {SC.Set} recordTypes
|
521
|
+
*/
|
522
|
+
|
523
|
+
_notifyRecordArraysWithQuery: function(storeKeys, recordTypes) {
|
524
|
+
var recordArrays = this.recordArraysWithQuery;
|
525
|
+
if(!recordArrays) return;
|
526
|
+
|
527
|
+
for(var idx=0, len=recordArrays.length;idx<len;idx++) {
|
528
|
+
var recArray = recordArrays[idx];
|
529
|
+
// if this record array still exists, reapply the query
|
530
|
+
if(recArray) recArray.applyQuery(storeKeys, recordTypes, YES);
|
531
|
+
}
|
532
|
+
},
|
533
|
+
|
388
534
|
/**
|
389
535
|
Resets the store content. This will clear all internal data for all
|
390
536
|
records, resetting them to an EMPTY state. You generally do not want
|
@@ -405,13 +551,15 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
405
551
|
|
406
552
|
var records = this.records, storeKey;
|
407
553
|
if (records) {
|
554
|
+
SC.RunLoop.begin();
|
408
555
|
for(storeKey in records) {
|
409
556
|
if (!records.hasOwnProperty(storeKey)) continue ;
|
410
557
|
this._notifyRecordPropertyChange(storeKey, NO);
|
411
558
|
}
|
559
|
+
SC.RunLoop.end();
|
412
560
|
}
|
413
561
|
|
414
|
-
this.set('hasChanges', NO);
|
562
|
+
this.set('hasChanges', NO);
|
415
563
|
},
|
416
564
|
|
417
565
|
/** @private
|
@@ -430,49 +578,49 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
430
578
|
@param {Boolean} force
|
431
579
|
@returns {SC.Store} receiver
|
432
580
|
*/
|
433
|
-
commitChangesFromNestedStore: function(nestedStore, changes, force)
|
434
|
-
{
|
581
|
+
commitChangesFromNestedStore: function(nestedStore, changes, force) {
|
435
582
|
// first, check for optimistic locking problems
|
436
583
|
if (!force) this._verifyLockRevisions(changes, nestedStore.locks);
|
437
584
|
|
438
585
|
// OK, no locking issues. So let's just copy them changes.
|
439
586
|
// get local reference to values.
|
440
|
-
var len = changes.length, i, storeKey
|
441
|
-
|
442
|
-
|
587
|
+
var len = changes.length, i, storeKey, myDataHashes, myStatuses,
|
588
|
+
myEditables, myRevisions, chDataHashes, chStatuses, chRevisions;
|
589
|
+
|
590
|
+
myRevisions = this.revisions ;
|
591
|
+
myDataHashes = this.dataHashes;
|
592
|
+
myStatuses = this.statuses;
|
593
|
+
myEditables = this.editables ;
|
443
594
|
|
444
|
-
my_revisions = this.revisions ;
|
445
|
-
my_dataHashes = this.dataHashes;
|
446
|
-
my_statuses = this.statuses;
|
447
|
-
my_editables = this.editables ;
|
448
|
-
|
449
595
|
// setup some arrays if needed
|
450
|
-
if (!
|
596
|
+
if (!myEditables) myEditables = this.editables = [] ;
|
451
597
|
|
452
|
-
|
453
|
-
|
454
|
-
|
598
|
+
chDataHashes = nestedStore.dataHashes;
|
599
|
+
chRevisions = nestedStore.revisions ;
|
600
|
+
chStatuses = nestedStore.statuses;
|
455
601
|
|
602
|
+
SC.RunLoop.begin();
|
456
603
|
for(i=0;i<len;i++) {
|
457
604
|
storeKey = changes[i];
|
458
605
|
|
459
606
|
// now copy changes
|
460
|
-
|
461
|
-
|
462
|
-
|
607
|
+
myDataHashes[storeKey] = chDataHashes[storeKey];
|
608
|
+
myStatuses[storeKey] = chStatuses[storeKey];
|
609
|
+
myRevisions[storeKey] = chRevisions[storeKey];
|
463
610
|
|
464
|
-
|
611
|
+
myEditables[storeKey] = 0 ; // always make dataHash no longer editable
|
465
612
|
|
466
613
|
this._notifyRecordPropertyChange(storeKey, NO);
|
467
614
|
}
|
468
|
-
|
615
|
+
SC.RunLoop.end();
|
616
|
+
|
469
617
|
// add any records to the changelog for commit handling
|
470
|
-
var
|
471
|
-
if (
|
472
|
-
if (!
|
473
|
-
|
618
|
+
var myChangelog = this.changelog, chChangelog = nestedStore.changelog;
|
619
|
+
if (chChangelog) {
|
620
|
+
if (!myChangelog) myChangelog = this.changelog = SC.Set.create();
|
621
|
+
myChangelog.addEach(chChangelog);
|
474
622
|
}
|
475
|
-
this.changelog=
|
623
|
+
this.changelog = myChangelog;
|
476
624
|
|
477
625
|
return this ;
|
478
626
|
},
|
@@ -507,7 +655,6 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
507
655
|
// HIGH-LEVEL RECORD API
|
508
656
|
//
|
509
657
|
|
510
|
-
|
511
658
|
/**
|
512
659
|
Finds a record instance with the specified recordType and id, returning
|
513
660
|
the record instance. If no matching record could be found, asks the
|
@@ -515,21 +662,40 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
515
662
|
the record, returns null.
|
516
663
|
|
517
664
|
Note that if you try to find a record id that does not exist in memory,
|
518
|
-
a dataSource may load it from
|
665
|
+
a dataSource may load it from the server. In this case, this method will
|
519
666
|
return a record instance with a status of SC.Record.BUSY_LOADING to indicate
|
520
667
|
that it is still fetching the data from the server.
|
521
668
|
|
522
|
-
|
669
|
+
You can also pass YES to the isRefresh parameter which will make sure to
|
670
|
+
always go back to the data source so that you can go back to refresh the
|
671
|
+
record that is currently in the store. In that case, the record will
|
672
|
+
get the SC.Record.BUSY_REFRESH status until server has responded and
|
673
|
+
store is refreshed.
|
674
|
+
|
675
|
+
@param {SC.Record|String} recordType the expected record type
|
523
676
|
@param {String} id the id to load
|
677
|
+
@param {Boolean} isRefresh
|
524
678
|
@returns {SC.Record} record instance or null
|
525
679
|
*/
|
526
|
-
find: function(recordType, id) {
|
680
|
+
find: function(recordType, id, isRefresh) {
|
681
|
+
// if recordType is passed as string, find object
|
682
|
+
if(SC.typeOf(recordType)===SC.T_STRING) {
|
683
|
+
recordType = SC.objectForPropertyPath(recordType);
|
684
|
+
}
|
685
|
+
|
527
686
|
// first attempt to find the record in the local store
|
528
687
|
var storeKey = recordType.storeKeyFor(id);
|
688
|
+
|
529
689
|
if (this.readStatus(storeKey) === SC.Record.EMPTY) {
|
530
690
|
storeKey = this.retrieveRecord(recordType, id);
|
531
691
|
}
|
532
692
|
|
693
|
+
// also make sure to reach to the data source to actually
|
694
|
+
// retrieveRecord if isRefresh is YES, even if it already exists in store
|
695
|
+
if(isRefresh) {
|
696
|
+
this.retrieveRecord(recordType, id, null, isRefresh);
|
697
|
+
}
|
698
|
+
|
533
699
|
// now we have the storeKey, materialize the record and return it.
|
534
700
|
return storeKey ? this.materializeRecord(storeKey) : null ;
|
535
701
|
},
|
@@ -545,43 +711,94 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
545
711
|
|
546
712
|
h2. Query Keys
|
547
713
|
|
548
|
-
The kind of
|
549
|
-
persistent stores you hook up for your application.
|
550
|
-
will accept an SC.Record subclass as the
|
714
|
+
The kind of fetchKey you pass is generally determined by the type of
|
715
|
+
persistent stores you hook up for your application. Most stores, however,
|
716
|
+
will accept an SC.Record subclass as the fetchKey. It is up to your data source
|
717
|
+
to figure out which storeKeys to return based on the fetchKey. This will return
|
551
718
|
a RecordArray matching all instances of that class as is relevant to your
|
552
|
-
application.
|
719
|
+
application, for instance: findAll(MyApp.MyModel)
|
720
|
+
|
721
|
+
You can also pass an SC.Query object as your fetchKey, for instance:
|
722
|
+
var q = SC.Query.create({ recordType: MyApp.MyModel,
|
723
|
+
conditions: "firstName = 'John'", orderBy: "lastName ASC"});
|
724
|
+
var records = MyApp.store.findAll(q);
|
725
|
+
|
726
|
+
If an SC.Query is given as fetchKey, the record array created in
|
727
|
+
findAll() will automatically update when records are added, changed,
|
728
|
+
or removed from the store. When a fetchKey is given, you do not have to
|
729
|
+
return anything from the data source as you are from then on delegating
|
730
|
+
the responsibility to keep the record array updated to the store.
|
553
731
|
|
554
732
|
Once you retrieve a RecordArray, you can filter the results even further
|
555
733
|
by using the filter() method, which may issue even more specific requests.
|
556
734
|
|
557
|
-
@param {Object}
|
558
|
-
|
559
|
-
@param {
|
735
|
+
@param {Object|SC.Query} fetchKey key describing the type of records to
|
736
|
+
fetch or a predefined SC.Query object
|
737
|
+
@param {Hash} params optional additional parameters to pass along to the
|
738
|
+
data source
|
739
|
+
@param {SC.RecordArray} recordArray optional if you want to find just
|
740
|
+
within a given record array
|
560
741
|
@returns {SC.RecordArray} matching set or null if no server handled it
|
561
742
|
*/
|
562
|
-
findAll: function(
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
if
|
567
|
-
|
568
|
-
//
|
569
|
-
storeKeys =
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
if (!ret) {
|
577
|
-
ret = SC.RecordArray.create({store: _store, storeKeys: storeKeys});
|
578
|
-
this[cacheKey] = ret ; // save for future reuse.
|
579
|
-
}
|
743
|
+
findAll: function(fetchKey, params, recordArray) {
|
744
|
+
var _store = this, source = this._getDataSource(), ret = [], storeKeys,
|
745
|
+
sourceRet, cacheKey;
|
746
|
+
|
747
|
+
if(recordArray) {
|
748
|
+
// giving a recordArray will circumvent the data source
|
749
|
+
// typically happens when chaining findAll statements
|
750
|
+
storeKeys = SC.Query.containsRecords(fetchKey, recordArray, _store);
|
751
|
+
}
|
752
|
+
else if (source) {
|
753
|
+
// call fetch() on the data source.
|
754
|
+
sourceRet = source.fetch.call(source, this, fetchKey, params);
|
755
|
+
if(SC.typeOf(sourceRet)===SC.T_ARRAY) {
|
756
|
+
storeKeys = sourceRet;
|
580
757
|
}
|
581
758
|
}
|
759
|
+
|
760
|
+
// if SC.Query returned from data source or no data source was given
|
761
|
+
if(!storeKeys && SC.instanceOf(fetchKey, SC.Query)) {
|
762
|
+
storeKeys = SC.Query.containsStoreKeys(fetchKey, null, _store);
|
763
|
+
}
|
764
|
+
|
765
|
+
ret = this.recordArrayFromStoreKeys(storeKeys, fetchKey, _store);
|
582
766
|
return ret ;
|
583
767
|
},
|
584
|
-
|
768
|
+
|
769
|
+
/**
|
770
|
+
Creates a record array based on passed storeKeys. Will return
|
771
|
+
cache if records are already cached, if not store them for reuse.
|
772
|
+
|
773
|
+
@param {Array} storeKeys added to returned record array
|
774
|
+
@param {Object|SC.Query} fetchKey
|
775
|
+
@param {SC.Store} _store
|
776
|
+
@returns {SC.RecordArray} matching set or null if no server handled it
|
777
|
+
*/
|
778
|
+
|
779
|
+
recordArrayFromStoreKeys: function(storeKeys, fetchKey, _store) {
|
780
|
+
var ret, isQuery = SC.instanceOf(fetchKey, SC.Query), cacheKey, queryKey;
|
781
|
+
|
782
|
+
// if an array was provided, see if a wrapper already exists for
|
783
|
+
// this store. Otherwise create it
|
784
|
+
cacheKey = SC.keyFor('__records__', [SC.guidFor(storeKeys), SC.guidFor(fetchKey)].join('_'));
|
785
|
+
ret = this[cacheKey];
|
786
|
+
if (!ret) {
|
787
|
+
if(isQuery) queryKey = fetchKey;
|
788
|
+
ret = SC.RecordArray.create({store: _store, storeKeys: storeKeys, queryKey: queryKey});
|
789
|
+
|
790
|
+
// store reference to record array if SC.Query so we can notify it
|
791
|
+
// when store changes
|
792
|
+
if(isQuery) {
|
793
|
+
if (!this.recordArraysWithQuery) this.recordArraysWithQuery = [];
|
794
|
+
this.recordArraysWithQuery.push(ret);
|
795
|
+
}
|
796
|
+
|
797
|
+
this[cacheKey] = ret ; // save for future reuse.
|
798
|
+
}
|
799
|
+
return ret;
|
800
|
+
},
|
801
|
+
|
585
802
|
/**
|
586
803
|
Array of all records currently in the store with the specified
|
587
804
|
type. This method only reflects the actual records loaded into memory and
|
@@ -592,16 +809,15 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
592
809
|
@returns {SC.Array} array instance - usually SC.RecordArray
|
593
810
|
*/
|
594
811
|
recordsFor: function(recordType) {
|
595
|
-
var storeKeys
|
596
|
-
|
812
|
+
var storeKeys = [],
|
813
|
+
storeKeysById = recordType.storeKeysById(),
|
814
|
+
id, storeKey, ret;
|
597
815
|
|
598
816
|
// collect all non-empty store keys
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
storeKeys.push(storeKey);
|
604
|
-
}
|
817
|
+
for(id in storeKeysById) {
|
818
|
+
storeKey = storeKeysById[id]; // get the storeKey
|
819
|
+
if (this.readStatus(storeKey) !== SC.RECORD_EMPTY) {
|
820
|
+
storeKeys.push(storeKey);
|
605
821
|
}
|
606
822
|
}
|
607
823
|
|
@@ -667,18 +883,24 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
667
883
|
@returns {SC.Record} Returns the created record
|
668
884
|
*/
|
669
885
|
createRecord: function(recordType, dataHash, id) {
|
670
|
-
|
671
|
-
var primaryKey, storeKey, status, K = SC.Record, changelog;
|
886
|
+
|
887
|
+
var primaryKey, storeKey, status, K = SC.Record, changelog, defaultVal;
|
672
888
|
|
673
889
|
// First, try to get an id. If no id is passed, look it up in the
|
674
890
|
// dataHash.
|
675
891
|
if (!id && (primaryKey = recordType.prototype.primaryKey)) {
|
676
892
|
id = dataHash[primaryKey];
|
893
|
+
// if still no id, check if there is a defaultValue function for
|
894
|
+
// the primaryKey attribute and assign that
|
895
|
+
defaultVal = recordType.prototype[primaryKey] ? recordType.prototype[primaryKey].defaultValue : null;
|
896
|
+
if(!id && SC.typeOf(defaultVal)===SC.T_FUNCTION) {
|
897
|
+
id = dataHash[primaryKey] = defaultVal();
|
898
|
+
}
|
677
899
|
}
|
678
900
|
|
679
901
|
// Next get the storeKey - base on id if available
|
680
902
|
storeKey = id ? recordType.storeKeyFor(id) : SC.Store.generateStoreKey();
|
681
|
-
|
903
|
+
|
682
904
|
// now, check the state and do the right thing.
|
683
905
|
status = this.readStatus(storeKey);
|
684
906
|
|
@@ -695,15 +917,21 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
695
917
|
}
|
696
918
|
|
697
919
|
// add dataHash and setup initial status -- also save recordType
|
698
|
-
this.writeDataHash(storeKey, dataHash, K.READY_NEW);
|
920
|
+
this.writeDataHash(storeKey, (dataHash ? dataHash : {}), K.READY_NEW);
|
921
|
+
|
699
922
|
SC.Store.replaceRecordTypeFor(storeKey, recordType);
|
700
923
|
this.dataHashDidChange(storeKey);
|
701
|
-
|
924
|
+
|
702
925
|
// Record is now in a committable state -- add storeKey to changelog
|
703
926
|
changelog = this.changelog;
|
704
927
|
if (!changelog) changelog = SC.Set.create();
|
705
928
|
changelog.add(storeKey);
|
706
|
-
this.changelog=changelog;
|
929
|
+
this.changelog = changelog;
|
930
|
+
|
931
|
+
// if commit records is enabled
|
932
|
+
if(this.get('commitRecordsAutomatically')){
|
933
|
+
this.invokeLast(this.commitRecords);
|
934
|
+
}
|
707
935
|
|
708
936
|
// finally return materialized record
|
709
937
|
return this.materializeRecord(storeKey) ;
|
@@ -769,15 +997,21 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
769
997
|
} else status = K.DESTROYED_DIRTY ;
|
770
998
|
|
771
999
|
// remove the data hash, set new status
|
772
|
-
this.
|
1000
|
+
this.writeStatus(storeKey, status);
|
773
1001
|
this.dataHashDidChange(storeKey);
|
774
1002
|
|
775
1003
|
// add/remove change log
|
776
1004
|
changelog = this.changelog;
|
777
1005
|
if (!changelog) changelog = this.changelog = SC.Set.create();
|
1006
|
+
|
778
1007
|
((status & K.DIRTY) ? changelog.add(storeKey) : changelog.remove(storeKey));
|
779
1008
|
this.changelog=changelog;
|
780
|
-
|
1009
|
+
|
1010
|
+
// if commit records is enabled
|
1011
|
+
if(this.get('commitRecordsAutomatically')){
|
1012
|
+
this.invokeLast(this.commitRecords);
|
1013
|
+
}
|
1014
|
+
|
781
1015
|
return this ;
|
782
1016
|
},
|
783
1017
|
|
@@ -854,13 +1088,17 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
854
1088
|
|
855
1089
|
// record data hash change
|
856
1090
|
this.dataHashDidChange(storeKey, null);
|
857
|
-
|
858
1091
|
// record in changelog
|
859
1092
|
changelog = this.changelog ;
|
860
1093
|
if (!changelog) changelog = this.changelog = SC.Set.create() ;
|
861
1094
|
changelog.add(storeKey);
|
862
1095
|
this.changelog=changelog;
|
863
1096
|
|
1097
|
+
// if commit records is enabled
|
1098
|
+
if(this.get('commitRecordsAutomatically')){
|
1099
|
+
this.invokeLast(this.commitRecords);
|
1100
|
+
}
|
1101
|
+
|
864
1102
|
return this ;
|
865
1103
|
},
|
866
1104
|
|
@@ -918,22 +1156,23 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
918
1156
|
instance itself using materializeRecord()
|
919
1157
|
|
920
1158
|
@param {SC.Record|Array} recordTypes class or array of classes
|
921
|
-
@param {Array} ids ids to
|
922
|
-
@param {Array} storeKeys (optional) store keys to
|
1159
|
+
@param {Array} ids ids to retrieve
|
1160
|
+
@param {Array} storeKeys (optional) store keys to retrieve
|
1161
|
+
@param {Boolean} isRefresh
|
923
1162
|
@returns {Array} storeKeys to be retrieved
|
924
1163
|
*/
|
925
|
-
retrieveRecords: function(recordTypes, ids, storeKeys,
|
926
|
-
|
927
|
-
var source = this.
|
1164
|
+
retrieveRecords: function(recordTypes, ids, storeKeys, isRefresh) {
|
1165
|
+
|
1166
|
+
var source = this._getDataSource(),
|
928
1167
|
isArray = SC.typeOf(recordTypes) === SC.T_ARRAY,
|
929
|
-
len = (storeKeys
|
1168
|
+
len = (!storeKeys) ? ids.length : storeKeys.length,
|
930
1169
|
ret = [],
|
931
1170
|
rev = SC.Store.generateStoreKey(),
|
932
1171
|
K = SC.Record,
|
933
1172
|
recordType, idx, storeKey, status;
|
934
1173
|
|
935
1174
|
if (!isArray) recordType = recordTypes;
|
936
|
-
|
1175
|
+
|
937
1176
|
// if no storeKeys were passed, map recordTypes + ids
|
938
1177
|
for(idx=0;idx<len;idx++) {
|
939
1178
|
|
@@ -950,14 +1189,12 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
950
1189
|
|
951
1190
|
// K.EMPTY, K.ERROR, K.DESTROYED_CLEAN - initial retrieval
|
952
1191
|
if ((status == K.EMPTY) || (status == K.ERROR) || (status == K.DESTROYED_CLEAN)) {
|
953
|
-
|
954
1192
|
this.writeStatus(storeKey, K.BUSY_LOADING);
|
955
1193
|
this.dataHashDidChange(storeKey, rev, YES);
|
956
1194
|
ret.push(storeKey);
|
957
1195
|
|
958
1196
|
// otherwise, ignore record unless isRefresh is YES.
|
959
|
-
} else if (
|
960
|
-
|
1197
|
+
} else if (isRefresh) {
|
961
1198
|
// K.READY_CLEAN, K.READY_DIRTY, ignore K.READY_NEW
|
962
1199
|
if (status & K.READY) {
|
963
1200
|
this.writeStatus(storeKey, K.BUSY_REFRESH | (status & 0x03)) ;
|
@@ -977,14 +1214,14 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
977
1214
|
}
|
978
1215
|
}
|
979
1216
|
|
980
|
-
// now
|
1217
|
+
// now retrieve storekeys from dataSource
|
981
1218
|
if (source) {
|
982
|
-
var ok = source.retrieveRecords.call(source, this, ret);
|
1219
|
+
var ok = source.retrieveRecords.call(source, this, ret, ids);
|
983
1220
|
if (ok === NO) ret.length = 0; // could not find.
|
984
1221
|
}
|
985
1222
|
return ret ;
|
986
1223
|
},
|
987
|
-
|
1224
|
+
|
988
1225
|
_TMP_RETRIEVE_ARRAY: [],
|
989
1226
|
|
990
1227
|
/**
|
@@ -1001,13 +1238,14 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
1001
1238
|
@param {SC.Record} recordType class
|
1002
1239
|
@param {String} id id to retrieve
|
1003
1240
|
@param {Number} storeKey (optional) store key
|
1241
|
+
@param {Boolean} isRefresh
|
1004
1242
|
@returns {Number} storeKey that was retrieved
|
1005
1243
|
*/
|
1006
|
-
retrieveRecord: function(recordType, id, storeKey,
|
1244
|
+
retrieveRecord: function(recordType, id, storeKey, isRefresh) {
|
1007
1245
|
var array = this._TMP_RETRIEVE_ARRAY,
|
1008
1246
|
ret;
|
1009
|
-
|
1010
|
-
if (storeKey
|
1247
|
+
|
1248
|
+
if (storeKey) {
|
1011
1249
|
array[0] = storeKey;
|
1012
1250
|
storeKey = array;
|
1013
1251
|
id = null ;
|
@@ -1016,7 +1254,7 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
1016
1254
|
id = array;
|
1017
1255
|
}
|
1018
1256
|
|
1019
|
-
ret = this.retrieveRecords(recordType, id, storeKey,
|
1257
|
+
ret = this.retrieveRecords(recordType, id, storeKey, isRefresh);
|
1020
1258
|
array.length = 0 ;
|
1021
1259
|
return ret[0];
|
1022
1260
|
},
|
@@ -1060,7 +1298,7 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
1060
1298
|
@returns {SC.Bool} if the action was succesful.
|
1061
1299
|
*/
|
1062
1300
|
commitRecords: function(recordTypes, ids, storeKeys) {
|
1063
|
-
var source = this.
|
1301
|
+
var source = this._getDataSource(),
|
1064
1302
|
isArray = SC.typeOf(recordTypes) === SC.T_ARRAY,
|
1065
1303
|
retCreate= [], retUpdate= [], retDestroy = [],
|
1066
1304
|
rev = SC.Store.generateStoreKey(),
|
@@ -1073,6 +1311,10 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
1073
1311
|
if(recordTypes===undefined && ids===undefined && storeKeys===undefined){
|
1074
1312
|
storeKeys=this.changelog;
|
1075
1313
|
}
|
1314
|
+
|
1315
|
+
// if no storeKeys or ids at this point, return
|
1316
|
+
if(!storeKeys && !ids) return;
|
1317
|
+
|
1076
1318
|
len = (storeKeys === undefined) ? ids.length : storeKeys.length;
|
1077
1319
|
|
1078
1320
|
for(idx=0;idx<len;idx++) {
|
@@ -1089,7 +1331,7 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
1089
1331
|
// collect status and process
|
1090
1332
|
status = this.readStatus(storeKey);
|
1091
1333
|
|
1092
|
-
if ((status == K.EMPTY) || (status == K.ERROR)
|
1334
|
+
if ((status == K.EMPTY) || (status == K.ERROR)) {
|
1093
1335
|
throw K.NOT_FOUND_ERROR ;
|
1094
1336
|
}else{
|
1095
1337
|
if(status==K.READY_NEW){
|
@@ -1104,6 +1346,9 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
1104
1346
|
this.writeStatus(storeKey, K.BUSY_DESTROYING);
|
1105
1347
|
this.dataHashDidChange(storeKey, rev, YES);
|
1106
1348
|
retDestroy.push(storeKey);
|
1349
|
+
} else if (status==K.DESTROYED_CLEAN) {
|
1350
|
+
this.dataHashDidChange(storeKey, rev, YES);
|
1351
|
+
retDestroy.push(storeKey);
|
1107
1352
|
}
|
1108
1353
|
// ignore K.READY_CLEAN, K.BUSY_LOADING, K.BUSY_CREATING, K.BUSY_COMMITTING,
|
1109
1354
|
// K.BUSY_REFRESH_CLEAN, K_BUSY_REFRESH_DIRTY, KBUSY_DESTROYING
|
@@ -1160,7 +1405,7 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
1160
1405
|
@returns {SC.Store} the store.
|
1161
1406
|
*/
|
1162
1407
|
cancelRecords: function(recordTypes, ids, storeKeys) {
|
1163
|
-
var source = this.
|
1408
|
+
var source = this._getDataSource(),
|
1164
1409
|
isArray = SC.typeOf(recordTypes) === SC.T_ARRAY,
|
1165
1410
|
K = SC.Record,
|
1166
1411
|
ret = [],
|
@@ -1260,12 +1505,11 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
1260
1505
|
if (isArray) {
|
1261
1506
|
recordType = recordTypes.objectAt(idx) || SC.Record;
|
1262
1507
|
primaryKey = recordType.prototype.primaryKey ;
|
1263
|
-
}
|
1508
|
+
}
|
1264
1509
|
id = (ids) ? ids.objectAt(idx) : dataHash[primaryKey];
|
1265
1510
|
ret[idx] = storeKey = recordType.storeKeyFor(id); // needed to cache
|
1266
1511
|
this.pushRetrieve(recordType, id, dataHash, storeKey);
|
1267
1512
|
}
|
1268
|
-
|
1269
1513
|
// return storeKeys
|
1270
1514
|
return ret ;
|
1271
1515
|
},
|
@@ -1337,24 +1581,25 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
1337
1581
|
@returns {SC.Store} reciever
|
1338
1582
|
*/
|
1339
1583
|
dataSourceDidComplete: function(storeKey, dataHash, newId) {
|
1340
|
-
var status = this.readStatus(storeKey), K = SC.Record;
|
1584
|
+
var status = this.readStatus(storeKey), K = SC.Record, statusOnly;
|
1341
1585
|
|
1342
1586
|
// EMPTY, ERROR, READY_CLEAN, READY_NEW, READY_DIRTY, DESTROYED_CLEAN,
|
1343
1587
|
// DESTROYED_DIRTY
|
1344
1588
|
if (!(status & K.BUSY)) {
|
1345
1589
|
throw K.BAD_STATE_ERROR; // should never be called in this state
|
1346
|
-
|
1347
1590
|
}
|
1348
1591
|
|
1349
1592
|
// otherwise, determine proper state transition
|
1350
|
-
if(status
|
1593
|
+
if(status===K.BUSY_DESTROYING) {
|
1351
1594
|
throw K.BAD_STATE_ERROR ;
|
1352
1595
|
} else status = K.READY_CLEAN ;
|
1353
1596
|
|
1354
1597
|
this.writeStatus(storeKey, status) ;
|
1355
1598
|
if (dataHash) this.writeDataHash(storeKey, dataHash, status) ;
|
1356
1599
|
if (newId) SC.Store.replaceIdFor(storeKey, newId);
|
1357
|
-
|
1600
|
+
|
1601
|
+
statusOnly = dataHash || newId ? NO : YES;
|
1602
|
+
this.dataHashDidChange(storeKey, null, statusOnly);
|
1358
1603
|
|
1359
1604
|
return this ;
|
1360
1605
|
},
|
@@ -1419,10 +1664,15 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
1419
1664
|
storeKey = recordType.storeKeyFor(id);
|
1420
1665
|
}
|
1421
1666
|
status = this.readStatus(storeKey);
|
1422
|
-
if(status==K.EMPTY || status==K.ERROR || status==K.READY_CLEAN || status==K.DESTROY_CLEAN){
|
1667
|
+
if(status==K.EMPTY || status==K.ERROR || status==K.READY_CLEAN || status==K.DESTROY_CLEAN) {
|
1668
|
+
|
1423
1669
|
status = K.READY_CLEAN;
|
1424
|
-
if(dataHash===undefined)
|
1425
|
-
|
1670
|
+
if(dataHash===undefined) {
|
1671
|
+
this.writeStatus(storeKey, status) ;
|
1672
|
+
}
|
1673
|
+
else {
|
1674
|
+
this.writeDataHash(storeKey, dataHash, status) ;
|
1675
|
+
}
|
1426
1676
|
this.dataHashDidChange(storeKey);
|
1427
1677
|
|
1428
1678
|
return YES;
|
@@ -1432,7 +1682,7 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
1432
1682
|
},
|
1433
1683
|
|
1434
1684
|
pushDestroy: function(recordType, id, storeKey) {
|
1435
|
-
var K = SC.Record;
|
1685
|
+
var K = SC.Record, status;
|
1436
1686
|
|
1437
1687
|
if(storeKey===undefined){
|
1438
1688
|
storeKey = recordType.storeKeyFor(id);
|
@@ -1449,7 +1699,7 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
1449
1699
|
},
|
1450
1700
|
|
1451
1701
|
pushError: function(recordType, id, error, storeKey) {
|
1452
|
-
var K = SC.Record;
|
1702
|
+
var K = SC.Record, status;
|
1453
1703
|
|
1454
1704
|
if(storeKey===undefined){
|
1455
1705
|
storeKey = recordType.storeKeyFor(id);
|
@@ -1500,7 +1750,8 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
1500
1750
|
},
|
1501
1751
|
|
1502
1752
|
/**
|
1503
|
-
Given a recordType and primaryKey, find the storeKey.
|
1753
|
+
Given a recordType and primaryKey, find the storeKey. If the primaryKey
|
1754
|
+
has not been assigned a storeKey yet, it will be added.
|
1504
1755
|
|
1505
1756
|
@param {SC.Record} recordType the record type
|
1506
1757
|
@param {String} primaryKey the primary key
|
@@ -1508,6 +1759,71 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
1508
1759
|
*/
|
1509
1760
|
storeKeyFor: function(recordType, primaryKey) {
|
1510
1761
|
return recordType.storeKeyFor(primaryKey);
|
1762
|
+
},
|
1763
|
+
|
1764
|
+
/**
|
1765
|
+
Given a primaryKey value for the record, returns the associated
|
1766
|
+
storeKey. As opposed to storeKeyFor() however, this method
|
1767
|
+
will NOT generate a new storeKey but returned undefined.
|
1768
|
+
|
1769
|
+
@param {String} id a record id
|
1770
|
+
@returns {Number} a storeKey.
|
1771
|
+
*/
|
1772
|
+
storeKeyExists: function(recordType, primaryKey) {
|
1773
|
+
return recordType.storeKeyExists(primaryKey);
|
1774
|
+
},
|
1775
|
+
|
1776
|
+
/**
|
1777
|
+
Finds all storeKeys of a certain record type in this store
|
1778
|
+
and returns an array.
|
1779
|
+
|
1780
|
+
@param {SC.Record} recordType
|
1781
|
+
@returns {Array} set of storeKeys
|
1782
|
+
*/
|
1783
|
+
storeKeysFor: function(recordType) {
|
1784
|
+
var recType, ret = [], storeKey;
|
1785
|
+
if(!this.statuses) return;
|
1786
|
+
|
1787
|
+
for(storeKey in SC.Store.recordTypesByStoreKey) {
|
1788
|
+
recType = SC.Store.recordTypesByStoreKey[storeKey];
|
1789
|
+
// if same record type and this store has it
|
1790
|
+
if(recType===recordType && this.statuses[storeKey]) {
|
1791
|
+
ret.push(parseInt(storeKey,0));
|
1792
|
+
}
|
1793
|
+
}
|
1794
|
+
|
1795
|
+
return ret;
|
1796
|
+
},
|
1797
|
+
|
1798
|
+
/**
|
1799
|
+
Finds all storeKeys in this store
|
1800
|
+
and returns an array.
|
1801
|
+
|
1802
|
+
@returns {Array} set of storeKeys
|
1803
|
+
*/
|
1804
|
+
storeKeys: function() {
|
1805
|
+
var ret = [], storeKey;
|
1806
|
+
if(!this.statuses) return;
|
1807
|
+
|
1808
|
+
for(storeKey in this.statuses) {
|
1809
|
+
// if status is not empty
|
1810
|
+
if(this.statuses[storeKey] != SC.Record.EMPTY) {
|
1811
|
+
ret.push(parseInt(storeKey,0));
|
1812
|
+
}
|
1813
|
+
}
|
1814
|
+
|
1815
|
+
return ret;
|
1816
|
+
},
|
1817
|
+
|
1818
|
+
/**
|
1819
|
+
Returns string representation of a storeKey, with status.
|
1820
|
+
|
1821
|
+
@param {Number} storeKey
|
1822
|
+
@returns {String}
|
1823
|
+
*/
|
1824
|
+
statusString: function(storeKey) {
|
1825
|
+
var rec = this.materializeRecord(storeKey);
|
1826
|
+
return rec.statusString();
|
1511
1827
|
}
|
1512
1828
|
|
1513
1829
|
}) ;
|
@@ -1534,7 +1850,7 @@ SC.Store.mixin({
|
|
1534
1850
|
a primaryKey and recordType that remains constant throughout the lifetime
|
1535
1851
|
of the application.
|
1536
1852
|
*/
|
1537
|
-
recordTypesByStoreKey:
|
1853
|
+
recordTypesByStoreKey: {},
|
1538
1854
|
|
1539
1855
|
/** @private
|
1540
1856
|
The next store key to allocate. A storeKey must always be greater than 0
|
@@ -1558,8 +1874,11 @@ SC.Store.mixin({
|
|
1558
1874
|
Given a storeKey returns the SC.Record class associated with the key.
|
1559
1875
|
If no record type is associated with the store key, returns null.
|
1560
1876
|
|
1877
|
+
The SC.Record class will only be found if you have already called
|
1878
|
+
storeKeyFor() on the record.
|
1879
|
+
|
1561
1880
|
@param {Number} storeKey the store key
|
1562
|
-
@returns {
|
1881
|
+
@returns {SC.Record} the record type
|
1563
1882
|
*/
|
1564
1883
|
recordTypeFor: function(storeKey) {
|
1565
1884
|
return this.recordTypesByStoreKey[storeKey];
|
@@ -1585,8 +1904,7 @@ SC.Store.mixin({
|
|
1585
1904
|
this.idsByStoreKey[storeKey] = primaryKey ;
|
1586
1905
|
|
1587
1906
|
// then the other...
|
1588
|
-
var storeKeys = recordType.storeKeysById ;
|
1589
|
-
if (!storeKeys) storeKeys = recordType.storeKeysById = {};
|
1907
|
+
var storeKeys = recordType.storeKeysById() ;
|
1590
1908
|
delete storeKeys[oldPrimaryKey];
|
1591
1909
|
storeKeys[primaryKey] = storeKey;
|
1592
1910
|
|
@@ -1607,7 +1925,7 @@ SC.Store.mixin({
|
|
1607
1925
|
this.recordTypesByStoreKey[storeKey] = recordType;
|
1608
1926
|
return this ;
|
1609
1927
|
}
|
1610
|
-
|
1928
|
+
|
1611
1929
|
});
|
1612
1930
|
|
1613
1931
|
|