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
@@ -56,22 +56,22 @@ SC.GridView = SC.ListView.extend(
|
|
56
56
|
}.observes('itemsPerRow'),
|
57
57
|
|
58
58
|
/** @private
|
59
|
-
Find the
|
60
|
-
ignore the width of the
|
59
|
+
Find the contentIndexes to display in the passed rect. Note that we
|
60
|
+
ignore the width of the rect passed since we need to have a single
|
61
61
|
contiguous range.
|
62
62
|
*/
|
63
|
-
|
63
|
+
contentIndexesInRect: function(rect) {
|
64
64
|
var rowHeight = this.get('rowHeight') || 48 ;
|
65
65
|
var itemsPerRow = this.get('itemsPerRow') ;
|
66
66
|
|
67
|
-
var min = Math.floor(SC.minY(
|
68
|
-
var max = Math.ceil(SC.maxY(
|
67
|
+
var min = Math.floor(SC.minY(rect) / rowHeight) * itemsPerRow ;
|
68
|
+
var max = Math.ceil(SC.maxY(rect) / rowHeight) * itemsPerRow ;
|
69
69
|
|
70
|
-
return
|
70
|
+
return SC.IndexSet.create(min, max-min);
|
71
71
|
},
|
72
72
|
|
73
73
|
/** @private */
|
74
|
-
|
74
|
+
layoutForContentIndex: function(contentIndex) {
|
75
75
|
var rowHeight = this.get('rowHeight') || 48 ;
|
76
76
|
var frameWidth = this.get('frame').width ;
|
77
77
|
var itemsPerRow = this.get('itemsPerRow') ;
|
@@ -80,8 +80,10 @@ SC.GridView = SC.ListView.extend(
|
|
80
80
|
var row = Math.floor(contentIndex / itemsPerRow) ;
|
81
81
|
var col = contentIndex - (itemsPerRow*row) ;
|
82
82
|
return {
|
83
|
-
left: col * columnWidth,
|
84
|
-
|
83
|
+
left: col * columnWidth,
|
84
|
+
top: row * rowHeight,
|
85
|
+
height: rowHeight,
|
86
|
+
width: columnWidth
|
85
87
|
};
|
86
88
|
},
|
87
89
|
|
@@ -134,11 +136,11 @@ SC.GridView = SC.ListView.extend(
|
|
134
136
|
|
135
137
|
if (!this._insertionPointView) {
|
136
138
|
this._insertionPointView = this.insertionPointClass.create() ;
|
137
|
-
}
|
139
|
+
}
|
138
140
|
|
139
141
|
var insertionPoint = this._insertionPointView ;
|
140
142
|
var itemViewFrame = itemView.get('frame') ;
|
141
|
-
f = { height: itemViewFrame.height - 6,
|
143
|
+
var f = { height: itemViewFrame.height - 6,
|
142
144
|
x: itemViewFrame.x,
|
143
145
|
y: itemViewFrame.y + 6,
|
144
146
|
width: 0
|
@@ -6,6 +6,7 @@
|
|
6
6
|
// ==========================================================================
|
7
7
|
|
8
8
|
sc_require('views/collection');
|
9
|
+
sc_require('mixins/collection_row_delegate');
|
9
10
|
|
10
11
|
/** @class
|
11
12
|
|
@@ -18,13 +19,10 @@ sc_require('views/collection');
|
|
18
19
|
the ListView to optimize its rendering.
|
19
20
|
|
20
21
|
h2. Variable Row Heights
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
{{{
|
26
|
-
collectionViewRowHeightForContent()
|
27
|
-
}}}
|
22
|
+
|
23
|
+
Normally you set the row height through the rowHeight property. You can
|
24
|
+
also support custom row heights by implementing the
|
25
|
+
contentCustomRowHeightIndexes property to return an index set.
|
28
26
|
|
29
27
|
h2. Using ListView with Very Large Data Sets
|
30
28
|
|
@@ -41,7 +39,8 @@ sc_require('views/collection');
|
|
41
39
|
uniform. This will allow the list view to efficiently render content
|
42
40
|
without worrying about the overall performance.
|
43
41
|
|
44
|
-
Alternatively, you may want to consider overriding the
|
42
|
+
Alternatively, you may want to consider overriding the
|
43
|
+
offsetForRowAtContentIndex() and heightForRowAtContentIndex() methods to
|
45
44
|
perform some faster calculations that do not require inspecting every
|
46
45
|
item in the collection.
|
47
46
|
|
@@ -52,655 +51,490 @@ sc_require('views/collection');
|
|
52
51
|
cheat for very long data sets to make rendering more efficient?)
|
53
52
|
|
54
53
|
@extends SC.CollectionView
|
54
|
+
@extends SC.CollectionRowDelegate
|
55
55
|
@since SproutCore 1.0
|
56
56
|
*/
|
57
57
|
SC.ListView = SC.CollectionView.extend(
|
58
|
+
SC.CollectionRowDelegate,
|
58
59
|
/** @scope SC.ListView.prototype */ {
|
59
60
|
|
60
61
|
classNames: ['sc-list-view'],
|
61
|
-
|
62
|
-
/**
|
63
|
-
The default layout for the list view simply fills the entire parentView.
|
64
|
-
*/
|
65
|
-
layout: { left: 0, right: 0, top: 0, height: 100 },
|
66
|
-
|
62
|
+
|
67
63
|
acceptsFirstResponder: YES,
|
68
|
-
|
64
|
+
|
69
65
|
// ..........................................................
|
70
|
-
// ROW
|
66
|
+
// COLLECTION ROW DELEGATE SUPPORT
|
71
67
|
//
|
72
68
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
69
|
+
|
70
|
+
/**
|
71
|
+
Returns the current collectionRowDelegate. This property will recompute
|
72
|
+
everytime the content changes.
|
73
|
+
*/
|
74
|
+
rowDelegate: function() {
|
75
|
+
var del = this.delegate,
|
76
|
+
content = this.get('content');
|
77
|
+
return this.delegateFor('isCollectionRowDelegate', del, content);
|
78
|
+
}.property('delegate', 'content').cacheable(),
|
79
|
+
|
80
|
+
/** @private
|
81
|
+
Whenever the rowDelegate changes, begin observing important properties
|
82
|
+
*/
|
83
|
+
_sclv_rowDelegateDidChange: function() {
|
84
|
+
var last = this._sclv_rowDelegate,
|
85
|
+
del = this.get('rowDelegate'),
|
86
|
+
func = this._sclv_rowHeightDidChange,
|
87
|
+
func2 = this._sclv_customRowHeightIndexesDidChange;
|
88
|
+
|
89
|
+
if (last === del) return this; // nothing to do
|
90
|
+
this._sclv_rowDelegate = del;
|
91
|
+
|
92
|
+
// last may be null on a new object
|
93
|
+
if (last) {
|
94
|
+
last.removeObserver('rowHeight', this, func);
|
95
|
+
last.removeObserver('customRowHeightIndexes', this, func2);
|
96
|
+
}
|
79
97
|
|
80
|
-
|
98
|
+
if (!del) {
|
99
|
+
throw "Internal Inconsistancy: ListView must always have CollectionRowDelegate";
|
100
|
+
}
|
81
101
|
|
82
|
-
|
83
|
-
|
102
|
+
del.addObserver('rowHeight', this, func);
|
103
|
+
del.addObserver('customRowHeightIndexes', this, func2);
|
104
|
+
this._sclv_rowHeightDidChange()._sclv_customRowHeightIndexesDidChange();
|
105
|
+
return this ;
|
106
|
+
}.observes('rowDelegate'),
|
107
|
+
|
108
|
+
/** @private
|
109
|
+
called whenever the rowHeight changes. If the property actually changed
|
110
|
+
then invalidate all row heights.
|
84
111
|
*/
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
112
|
+
_sclv_rowHeightDidChange: function() {
|
113
|
+
var del = this.get('rowDelegate'),
|
114
|
+
height = del.get('rowHeight'),
|
115
|
+
indexes;
|
116
|
+
|
117
|
+
if (height === this._sclv_rowHeight) return this; // nothing to do
|
118
|
+
this._sclv_rowHeight = height;
|
119
|
+
|
120
|
+
indexes = SC.IndexSet.create(0, this.get('length'));
|
121
|
+
this.rowHeightDidChangeForIndexes(indexes);
|
122
|
+
return this ;
|
123
|
+
},
|
124
|
+
|
125
|
+
/** @private
|
126
|
+
called whenever the customRowHeightIndexes changes. If the property
|
127
|
+
actually changed then invalidate affected row heights.
|
90
128
|
*/
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
129
|
+
_sclv_customRowHeightIndexesDidChange: function() {
|
130
|
+
var del = this.get('rowDelegate'),
|
131
|
+
indexes = del.get('customRowHeightIndexes'),
|
132
|
+
last = this._sclv_customRowHeightIndexes,
|
133
|
+
func = this._sclv_customRowHeightIndexesContentDidChange;
|
134
|
+
|
135
|
+
// nothing to do
|
136
|
+
if ((indexes===last) || (last && last.isEqual(indexes))) return this;
|
137
|
+
|
138
|
+
// if we were observing the last index set, then remove observer
|
139
|
+
if (last && this._sclv_isObservingCustomRowHeightIndexes) {
|
140
|
+
last.removeObserver('[]', this, func);
|
141
|
+
}
|
97
142
|
|
98
|
-
|
99
|
-
|
100
|
-
|
143
|
+
// only observe new index set if it exists and it is not frozen.
|
144
|
+
if (this._sclv_isObservingCustomRowHeightIndexes = indexes && !indexes.get('isFrozen')) {
|
145
|
+
indexes.addObserver('[]', this, func);
|
146
|
+
}
|
101
147
|
|
102
|
-
|
103
|
-
|
104
|
-
|
148
|
+
this._sclv_customRowHeightIndexesContentDidChange();
|
149
|
+
return this ;
|
150
|
+
},
|
151
|
+
|
152
|
+
/** @private
|
153
|
+
Called whenever the customRowHeightIndexes set is modified.
|
105
154
|
*/
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
155
|
+
_sclv_customRowHeightIndexesContentDidChange: function() {
|
156
|
+
var del = this.get('rowDelegate'),
|
157
|
+
indexes = del.get('customRowHeightIndexes'),
|
158
|
+
last = this._sclv_customRowHeightIndexes,
|
159
|
+
changed;
|
160
|
+
|
161
|
+
// compute the set to invalidate. the union of cur and last set
|
162
|
+
if (indexes && last) {
|
163
|
+
changed = indexes.copy().add(last);
|
164
|
+
} else changed = indexes || last ;
|
165
|
+
this._sclv_customRowHeightIndexes = indexes ? indexes.frozenCopy() : null;
|
166
|
+
|
167
|
+
// invalidate
|
168
|
+
this.rowHeightDidChangeForIndexes(changed);
|
169
|
+
return this ;
|
116
170
|
},
|
117
171
|
|
172
|
+
// ..........................................................
|
173
|
+
// ROW PROPERTIES
|
174
|
+
//
|
175
|
+
|
118
176
|
/**
|
119
|
-
|
120
|
-
|
121
|
-
recalculate the row heights for the collection.
|
177
|
+
Returns the top offset for the specified content index. This will take
|
178
|
+
into account any custom row heights and group views.
|
122
179
|
|
123
|
-
|
124
|
-
|
125
|
-
heights may change without changing the content array itself.
|
126
|
-
|
127
|
-
If all rows heights have changed, you can pass null to invalidate the
|
128
|
-
whole range.
|
129
|
-
|
130
|
-
@param {Range} range or null.
|
131
|
-
@returns {SC.CollectionView} reciever
|
180
|
+
@param {Number} idx the content index
|
181
|
+
@returns {Number} the row offset
|
132
182
|
*/
|
133
|
-
|
134
|
-
if (
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
183
|
+
rowOffsetForContentIndex: function(idx) {
|
184
|
+
if (idx === 0) return 0 ; // fastpath
|
185
|
+
|
186
|
+
var del = this.get('rowDelegate'),
|
187
|
+
rowHeight = del.get('rowHeight'),
|
188
|
+
ret, custom, cache, delta, max, content ;
|
189
|
+
|
190
|
+
ret = idx * rowHeight;
|
191
|
+
|
192
|
+
if(this.get('rowSpacing')){
|
193
|
+
ret += idx * this.get('rowSpacing');
|
194
|
+
}
|
195
|
+
|
196
|
+
if (del.customRowHeightIndexes && (custom=del.get('customRowHeightIndexes'))) {
|
197
|
+
|
198
|
+
// prefill the cache with custom rows.
|
199
|
+
cache = this._sclv_offsetCache;
|
200
|
+
if (!cache) {
|
201
|
+
cache = this._sclv_offsetCache = [];
|
202
|
+
delta = max = 0 ;
|
203
|
+
custom.forEach(function(idx) {
|
204
|
+
delta += this.rowHeightForContentIndex(idx)-rowHeight;
|
205
|
+
cache[idx+1] = delta;
|
206
|
+
max = idx ;
|
207
|
+
}, this);
|
208
|
+
this._sclv_max = max+1;
|
209
|
+
}
|
140
210
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
var max = SC.maxRange(range);
|
151
|
-
if (max >= heights.length) {
|
152
|
-
heights.length = min ;
|
153
|
-
} else {
|
154
|
-
while(min<max) heights[min++] = undefined ;
|
211
|
+
// now just get the delta for the last custom row before the current
|
212
|
+
// idx.
|
213
|
+
delta = cache[idx];
|
214
|
+
if (delta === undefined) {
|
215
|
+
delta = cache[idx] = cache[idx-1];
|
216
|
+
if (delta === undefined) {
|
217
|
+
max = this._sclv_max;
|
218
|
+
if (idx < max) max = custom.indexBefore(idx)+1;
|
219
|
+
delta = cache[idx] = cache[max] || 0;
|
155
220
|
}
|
156
221
|
}
|
222
|
+
|
223
|
+
ret += delta ;
|
157
224
|
}
|
158
225
|
|
159
|
-
|
160
|
-
this.adjust(this.computeLayout());
|
161
|
-
|
162
|
-
// force recomputation of contentRangeInFrame
|
163
|
-
this.notifyPropertyChange('content');
|
164
|
-
|
165
|
-
// and notify that nowShowingRange may have changed...
|
166
|
-
this.invalidateNowShowingRange() ;
|
226
|
+
return ret ;
|
167
227
|
},
|
168
228
|
|
169
229
|
/**
|
170
|
-
|
171
|
-
|
172
|
-
when calculating the size of the view.
|
230
|
+
Returns the row height for the specified content index. This will take
|
231
|
+
into account custom row heights and group rows.
|
173
232
|
|
174
|
-
|
175
|
-
|
233
|
+
@param {Number} idx content index
|
234
|
+
@returns {Number} the row height
|
176
235
|
*/
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
236
|
+
rowHeightForContentIndex: function(idx) {
|
237
|
+
var del = this.get('rowDelegate'),
|
238
|
+
ret, cache, content, indexes;
|
239
|
+
|
240
|
+
if (del.customRowHeightIndexes && (indexes=del.get('customRowHeightIndexes'))) {
|
241
|
+
cache = this._sclv_heightCache ;
|
242
|
+
if (!cache) {
|
243
|
+
cache = this._sclv_heightCache = [];
|
244
|
+
content = this.get('content');
|
245
|
+
indexes.forEach(function(idx) {
|
246
|
+
cache[idx] = del.contentIndexRowHeight(this, content, idx);
|
247
|
+
}, this);
|
248
|
+
}
|
249
|
+
|
250
|
+
ret = cache[idx];
|
251
|
+
if (ret === undefined) ret = del.get('rowHeight');
|
252
|
+
} else ret = del.get('rowHeight');
|
253
|
+
|
254
|
+
return ret ;
|
255
|
+
},
|
183
256
|
|
184
257
|
/**
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
258
|
+
Call this method whenever a row height has changed in one or more indexes.
|
259
|
+
This will invalidate the row height cache and reload the content indexes.
|
260
|
+
Pass either an index set or a single index number.
|
261
|
+
|
262
|
+
This method is called automatically whenever you change the rowHeight
|
263
|
+
or customRowHeightIndexes properties on the collectionRowDelegate.
|
264
|
+
|
265
|
+
@param {SC.IndexSet|Number} indexes
|
266
|
+
@returns {SC.ListView} receiver
|
267
|
+
*/
|
268
|
+
rowHeightDidChangeForIndexes: function(indexes) {
|
269
|
+
var len = this.get('length');
|
270
|
+
|
271
|
+
// clear any cached offsets
|
272
|
+
this._sclv_heightCache = this._sclv_offsetCache = null;
|
191
273
|
|
192
|
-
//
|
193
|
-
if (
|
194
|
-
|
195
|
-
|
196
|
-
// otherwise, use the rowOffsets cache...
|
197
|
-
} else {
|
198
|
-
// get caches
|
199
|
-
var offsets = this._list_rowOffsets;
|
200
|
-
if (!offsets) offsets = this._list_rowOffsets = [] ;
|
201
|
-
|
202
|
-
// OK, now try the fast path...if undefined, loop backwards until we
|
203
|
-
// find an offset that IS cached...
|
204
|
-
var len = offsets.length, cur = contentIndex, height, ret;
|
205
|
-
|
206
|
-
// get the cached offset. Note that if the requested index is longer
|
207
|
-
// than the length of the offsets cache, then just assume the value is
|
208
|
-
// undefined. We don't want to accidentally read an old value...
|
209
|
-
if (contentIndex < len) {
|
210
|
-
ret = offsets[cur];
|
211
|
-
} else {
|
212
|
-
ret = undefined ;
|
213
|
-
cur = len; // start search at current end of offsets...
|
214
|
-
}
|
215
|
-
|
216
|
-
// if the cached value was undefined, loop backwards through the offsets
|
217
|
-
// hash looking for a cached value to start from
|
218
|
-
while((cur>0) && (ret===undefined)) ret = offsets[--cur];
|
219
|
-
|
220
|
-
// now, work our way forward, building the cache of offsets. Use
|
221
|
-
// cached heights...
|
222
|
-
if (ret===undefined) ret = offsets[cur] = 0 ;
|
223
|
-
while (cur < contentIndex) {
|
224
|
-
// get height...recache if needed....
|
225
|
-
height = this._list_heightForRowAtContentIndex(cur) ;
|
226
|
-
|
227
|
-
// console.log('index %@ has height %@'.fmt(cur, height));
|
228
|
-
|
229
|
-
// add to ret and save in cache
|
230
|
-
ret = ret + height ;
|
231
|
-
|
232
|
-
cur++; // go to next offset
|
233
|
-
offsets[cur] = ret ;
|
234
|
-
}
|
235
|
-
|
236
|
-
return ret ;
|
237
|
-
}
|
274
|
+
// find the smallest index changed; invalidate everything past it
|
275
|
+
if (indexes && indexes.isIndexSet) indexes = indexes.get('min');
|
276
|
+
this.reload(SC.IndexSet.create(indexes, len-indexes));
|
277
|
+
return this ;
|
238
278
|
},
|
239
279
|
|
280
|
+
// ..........................................................
|
281
|
+
// SUBCLASS IMPLEMENTATIONS
|
282
|
+
//
|
283
|
+
|
240
284
|
/**
|
241
|
-
|
242
|
-
|
243
|
-
it will consult the collection view delegate to compute the row heights.
|
285
|
+
The layout for a ListView is computed from the total number of rows
|
286
|
+
along with any custom row heights.
|
244
287
|
*/
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
288
|
+
computeLayout: function() {
|
289
|
+
// default layout
|
290
|
+
var ret = this._sclv_layout;
|
291
|
+
if (!ret) ret = this._sclv_layout = {};
|
292
|
+
ret.minHeight = this.rowOffsetForContentIndex(this.get('length'))+4;
|
293
|
+
return ret ;
|
249
294
|
},
|
250
295
|
|
251
|
-
/**
|
252
|
-
|
253
|
-
|
296
|
+
/**
|
297
|
+
|
298
|
+
Computes the layout for a specific content index by combining the current
|
299
|
+
row heights.
|
300
|
+
|
254
301
|
*/
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
undefined ;
|
263
|
-
if (height===undefined) {
|
264
|
-
height = heights[contentIndex] = this.invokeDelegateMethod(this.delegate, 'collectionViewHeightForRowAtContentIndex', this, contentIndex) || 0 ;
|
265
|
-
}
|
266
|
-
|
267
|
-
return height ;
|
302
|
+
layoutForContentIndex: function(contentIndex) {
|
303
|
+
return {
|
304
|
+
top: this.rowOffsetForContentIndex(contentIndex),
|
305
|
+
height: this.rowHeightForContentIndex(contentIndex),
|
306
|
+
left: 0,
|
307
|
+
right: 0
|
308
|
+
};
|
268
309
|
},
|
269
310
|
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
if (SC.BENCHMARK_RENDER) {
|
276
|
-
var bkey = '%@.render'.fmt(this) ;
|
277
|
-
SC.Benchmark.start(bkey);
|
278
|
-
}
|
279
|
-
this.beginPropertyChanges() ; // avoid sending notifications
|
280
|
-
|
281
|
-
var content = SC.makeArray(this.get('content')) ;
|
282
|
-
var selection = SC.makeArray(this.get('selection'));
|
283
|
-
var oldRange = this._oldNowShowingRange ;
|
284
|
-
var range = SC.cloneRange(this.get('nowShowingRange')) ;
|
285
|
-
this._oldNowShowingRange = SC.cloneRange(range) ;
|
286
|
-
var key, itemView = this.createExampleView(content), c ;
|
287
|
-
var range2 ; // only used if the old range fits inside the new range
|
288
|
-
var idx, end, childId, maxLen ;
|
289
|
-
|
290
|
-
// keep track of children we've got rendered
|
291
|
-
var childSet = this._childSet ;
|
292
|
-
if (!childSet) childSet = this._childSet = [] ;
|
293
|
-
|
294
|
-
if (SC.ENABLE_COLLECTION_PARTIAL_RENDER) {
|
295
|
-
// used for santity checks during debugging
|
296
|
-
if (SC.SANITY_CHECK_PARTIAL_RENDER) var maxLen = range.length ;
|
297
|
-
|
298
|
-
if (SC.DEBUG_PARTIAL_RENDER) {
|
299
|
-
console.log('oldRange = ') ;
|
300
|
-
console.log(oldRange) ;
|
301
|
-
console.log('range = ') ;
|
302
|
-
console.log(range) ;
|
303
|
-
}
|
304
|
-
|
305
|
-
// if we're dirty, redraw everything visible
|
306
|
-
// (selection changed, content changed, etc.)
|
307
|
-
if (this.get('isDirty')) {
|
308
|
-
childSet.length = 0 ; // full render
|
309
|
-
|
310
|
-
// else, only redaw objects we haven't previously drawn
|
311
|
-
} else if (oldRange) {
|
312
|
-
// ignore ranges that don't overlap above..
|
313
|
-
if (range.start >= oldRange.start + oldRange.length) {
|
314
|
-
childSet.length = 0 ; // full render
|
315
|
-
|
316
|
-
// and below...
|
317
|
-
} else if (range.start + range.length <= oldRange.start) {
|
318
|
-
childSet.length = 0 ; // full render
|
319
|
-
|
320
|
-
// okay, the ranges do overlap. are they equal?
|
321
|
-
} else if (SC.rangesEqual(oldRange, range)) {
|
322
|
-
range = SC.EMPTY_RANGE ; // nothing to render
|
323
|
-
|
324
|
-
// nope, is the old range inside the new range?
|
325
|
-
} else if (range.start <= oldRange.start && range.start + range.length >= oldRange.start + oldRange.length) {
|
326
|
-
// need to render two ranges...all pre-existing views are valid
|
327
|
-
context.partialUpdate = YES ;
|
328
|
-
range2 = { start: oldRange.start + oldRange.length, length: (range.start + range.length) - (oldRange.start + oldRange.length) } ;
|
329
|
-
range.length = oldRange.start - range.start ;
|
330
|
-
|
331
|
-
// nope, is the new range inside the old range?
|
332
|
-
} else if (range.start >= oldRange.start && range.start + range.length <= oldRange.start + oldRange.length) {
|
333
|
-
// need to remove unused childNodes at both ends, start with bottom...
|
334
|
-
idx = oldRange.start ;
|
335
|
-
end = range.start ;
|
336
|
-
while (idx < end) {
|
337
|
-
if (SC.DEBUG_PARTIAL_RENDER) console.log('looping on bottom range');
|
338
|
-
childId = childSet[idx] ;
|
339
|
-
if (childId) context.remove(childId) ;
|
340
|
-
if (SC.DEBUG_PARTIAL_RENDER) console.log('deleting content at index %@'.fmt(idx));
|
341
|
-
delete childSet[idx] ;
|
342
|
-
++idx ;
|
343
|
-
}
|
344
|
-
|
345
|
-
// now remove unused childNodes at the top of the range...
|
346
|
-
idx = range.start + range.length ;
|
347
|
-
end = oldRange.start + oldRange.length ;
|
348
|
-
while (idx < end) {
|
349
|
-
if (SC.DEBUG_PARTIAL_RENDER) console.log('looping on top range');
|
350
|
-
childId = childSet[idx] ;
|
351
|
-
if (childId) context.remove(childId) ;
|
352
|
-
if (SC.DEBUG_PARTIAL_RENDER) console.log('deleting content at index %@'.fmt(idx));
|
353
|
-
delete childSet[idx] ;
|
354
|
-
++idx ;
|
355
|
-
}
|
356
|
-
|
357
|
-
range = SC.EMPTY_RANGE ; // nothing to render
|
358
|
-
|
359
|
-
// nope, is the new range lower than the old range?
|
360
|
-
} else if (range.start < oldRange.start) {
|
361
|
-
context.partialUpdate = YES ;
|
362
|
-
|
363
|
-
// need to remove unused childNodes at the top of the old range
|
364
|
-
idx = range.start + range.length ;
|
365
|
-
end = oldRange.start + oldRange.length ;
|
366
|
-
while (idx < end) {
|
367
|
-
if (SC.DEBUG_PARTIAL_RENDER) console.log('looping on top only');
|
368
|
-
childId = childSet[idx] ;
|
369
|
-
if (childId) context.remove(childId) ;
|
370
|
-
if (SC.DEBUG_PARTIAL_RENDER) console.log('deleting content at index %@'.fmt(idx));
|
371
|
-
delete childSet[idx] ;
|
372
|
-
++idx ;
|
373
|
-
}
|
374
|
-
|
375
|
-
range.length = Math.min(range.length, oldRange.start - range.start) ;
|
376
|
-
|
377
|
-
// nope, so the new range is higher than the old range
|
378
|
-
} else {
|
379
|
-
context.partialUpdate = YES ;
|
380
|
-
|
381
|
-
// need to remove unused childNodes at the bottom of the old range
|
382
|
-
idx = oldRange.start ;
|
383
|
-
end = range.start ;
|
384
|
-
while (idx < end) {
|
385
|
-
if (SC.DEBUG_PARTIAL_RENDER) console.log('looping on bottom only');
|
386
|
-
childId = childSet[idx] ;
|
387
|
-
if (childId) context.remove(childId) ;
|
388
|
-
if (SC.DEBUG_PARTIAL_RENDER) console.log('deleting content at index %@'.fmt(idx));
|
389
|
-
delete childSet[idx] ;
|
390
|
-
++idx ;
|
391
|
-
}
|
392
|
-
|
393
|
-
end = range.start + range.length ;
|
394
|
-
range.start = oldRange.start + oldRange.length ;
|
395
|
-
range.length = end - range.start ;
|
396
|
-
}
|
397
|
-
}
|
311
|
+
/**
|
312
|
+
Override to return an IndexSet with the indexes that are at least
|
313
|
+
partially visible in the passed rectangle. This method is used by the
|
314
|
+
default implementation of computeNowShowing() to determine the new
|
315
|
+
nowShowing range after a scroll.
|
398
316
|
|
399
|
-
|
400
|
-
if (range.length < 0) throw "range.length is " + range.length ;
|
401
|
-
if (range.length > maxLen) throw "range.length is " + range.length + ', max length is ' + maxLen ;
|
402
|
-
if (range.start < 0) throw "range.start is " + range.start ;
|
403
|
-
if (range2) {
|
404
|
-
if (range2.length < 0) throw "range2.length is " + range2.length ;
|
405
|
-
if (range2.length > maxLen) throw "range2.length is " + range2.length + ', max length is ' + maxLen ;
|
406
|
-
if (range2.start < 0) throw "range2.start is " + range2.start ;
|
407
|
-
}
|
408
|
-
}
|
317
|
+
Override this method to implement incremental rendering.
|
409
318
|
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
319
|
+
The default simply returns the current content length.
|
320
|
+
|
321
|
+
@param {Rect} rect the visible rect or a point
|
322
|
+
@returns {SC.IndexSet} now showing indexes
|
323
|
+
*/
|
324
|
+
contentIndexesInRect: function(rect) {
|
325
|
+
var rowHeight = this.get('rowDelegate').get('rowHeight'),
|
326
|
+
top = SC.minY(rect),
|
327
|
+
bottom = SC.maxY(rect),
|
328
|
+
height = rect.height || 0,
|
329
|
+
len = this.get('length'),
|
330
|
+
offset, start, end;
|
331
|
+
|
332
|
+
// estimate the starting row and then get actual offsets until we are
|
333
|
+
// right.
|
334
|
+
start = (top - (top % rowHeight)) / rowHeight;
|
335
|
+
offset = this.rowOffsetForContentIndex(start);
|
336
|
+
|
337
|
+
// go backwards until top of row is before top edge
|
338
|
+
while(start>0 && offset>=top) {
|
339
|
+
start--;
|
340
|
+
offset -= this.rowHeightForContentIndex(start);
|
418
341
|
}
|
419
342
|
|
420
|
-
|
343
|
+
// go forwards until bottom of row is after top edge
|
344
|
+
offset += this.rowHeightForContentIndex(start);
|
345
|
+
while(start<len && offset<top) {
|
346
|
+
offset += this.rowHeightForContentIndex(start);
|
347
|
+
start++ ;
|
348
|
+
}
|
349
|
+
if (start<0) start = 0;
|
350
|
+
if (start>=len) start=len;
|
421
351
|
|
422
|
-
var baseKey = SC.guidFor(this) + '_' ;
|
423
|
-
var guids = this._itemViewGuids, guid;
|
424
|
-
if (!guids) this._itemViewGuids = guids = {};
|
425
352
|
|
426
|
-
//
|
427
|
-
//
|
428
|
-
|
353
|
+
// estimate the final row and then get the actual offsets until we are
|
354
|
+
// right. - look at the offset of the _following_ row
|
355
|
+
end = start + ((height - (height % rowHeight)) / rowHeight) ;
|
356
|
+
if (end > len) end = len;
|
357
|
+
offset = this.rowOffsetForContentIndex(end);
|
429
358
|
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
// use cache of item view guids to avoid creating temporary objects
|
435
|
-
guid = SC.guidFor(c);
|
436
|
-
if (!(key = guids[guid])) key = guids[guid] = baseKey+guid;
|
437
|
-
|
438
|
-
itemView.set('content', c) ;
|
439
|
-
itemView.set('isSelected', (selection.indexOf(c) == -1) ? NO : YES) ;
|
440
|
-
itemView.layerId = key ; // cannot use .set, layerId is RO
|
441
|
-
if (SC.SANITY_CHECK_PARTIAL_RENDER && childSet[idx]) throw key + '(' + c.unread + ')'+ ' at index ' + idx ; // should not re-render a child in the index!
|
442
|
-
childSet[idx] = key ;
|
443
|
-
itemView.adjust(this.itemViewLayoutAtContentIndex(idx)) ;
|
444
|
-
context = context.begin(itemView.get('tagName')) ;
|
445
|
-
itemView.prepareContext(context, YES) ;
|
446
|
-
context = context.end() ;
|
359
|
+
// walk backwards until top of row is before or at bottom edge
|
360
|
+
while(end>=start && offset>=bottom) {
|
361
|
+
end-- ;
|
362
|
+
offset -= this.rowHeightForContentIndex(end);
|
447
363
|
}
|
448
364
|
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
// use cache of item view guids to avoid creating temporary objects
|
456
|
-
guid = SC.guidFor(c);
|
457
|
-
if (!(key = guids[guid])) key = guids[guid] = baseKey+guid;
|
458
|
-
|
459
|
-
itemView.set('content', c) ;
|
460
|
-
itemView.set('isSelected', (selection.indexOf(c) == -1) ? NO : YES) ;
|
461
|
-
itemView.layerId = key ; // cannot use .set, layerId is RO
|
462
|
-
if (SC.SANITY_CHECK_PARTIAL_RENDER && childSet[idx]) throw key + '(' + c.unread + ')'+ ' at index ' + idx ; // should not re-render a child in the index!
|
463
|
-
childSet[idx] = key ;
|
464
|
-
itemView.adjust(this.itemViewLayoutAtContentIndex(idx)) ;
|
465
|
-
context = context.begin(itemView.get('tagName')) ;
|
466
|
-
itemView.prepareContext(context, YES) ;
|
467
|
-
context = context.end() ;
|
468
|
-
}
|
365
|
+
// go forwards until bottom of row is after bottom edge
|
366
|
+
offset += this.rowHeightForContentIndex(end);
|
367
|
+
while(end<len && offset<=bottom) {
|
368
|
+
offset += this.rowHeightForContentIndex(end);
|
369
|
+
end++ ;
|
469
370
|
}
|
470
371
|
|
471
|
-
|
372
|
+
end++; // end should be after start
|
373
|
+
if (end<start) end = start;
|
374
|
+
if (end>len) end = len ;
|
472
375
|
|
473
|
-
|
474
|
-
|
475
|
-
if (SC.BENCHMARK_RENDER) SC.Benchmark.end(bkey);
|
376
|
+
// convert to IndexSet and return
|
377
|
+
return SC.IndexSet.create(start, end-start);
|
476
378
|
},
|
477
379
|
|
478
380
|
// ..........................................................
|
479
|
-
//
|
381
|
+
// DRAG AND ROP SUPPORT
|
480
382
|
//
|
481
383
|
|
482
|
-
insertionOrientation: SC.VERTICAL_ORIENTATION,
|
483
384
|
|
484
|
-
/**
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
var content = this.get('content') ;
|
490
|
-
var rows = (content) ? content.get('length') : 0 ;
|
491
|
-
|
492
|
-
// use this cached layout hash to avoid allocing memory...
|
493
|
-
var ret = this._cachedLayoutHash ;
|
494
|
-
if (!ret) ret = this._cachedLayoutHash = {};
|
385
|
+
/**
|
386
|
+
Default view class used to draw an insertion point. The default
|
387
|
+
view will show a vertical line. Any view you create
|
388
|
+
should expect an outlineLevel property set, which should impact your left
|
389
|
+
offset.
|
495
390
|
|
496
|
-
|
497
|
-
|
498
|
-
return ret;
|
499
|
-
},
|
500
|
-
|
501
|
-
/** @private
|
502
|
-
Calculates the visible content range in the specified frame. If
|
503
|
-
uniform rows are set, this will use some simple math. Otherwise it will
|
504
|
-
compute all row offsets leading up to the frame.
|
391
|
+
@property
|
392
|
+
@type {SC.View}
|
505
393
|
*/
|
506
|
-
|
507
|
-
|
508
|
-
var min, max, ret, rowHeight ;
|
509
|
-
var minY = SC.minY(frame), maxY = SC.maxY(frame);
|
510
|
-
// use some simple math...
|
511
|
-
if (this.get('hasUniformRowHeights')) {
|
512
|
-
rowHeight = this.get('rowHeight') || 20 ;
|
513
|
-
min = Math.max(0,Math.floor(minY / rowHeight)-1) ;
|
514
|
-
max = Math.ceil(maxY / rowHeight) ;
|
515
|
-
|
516
|
-
var content = this.get('content') ;
|
517
|
-
min = Math.min(min, content.get('length')) ;
|
518
|
-
max = Math.min(max, content.get('length')) ;
|
519
|
-
|
520
|
-
// convert to range...
|
521
|
-
ret = { start: min, length: max - min } ;
|
522
|
-
|
523
|
-
// otherwise, get the cached row offsets...
|
524
|
-
} else {
|
525
|
-
content = this.get('content');
|
526
|
-
var len = (content ? content.get('length') : 0), offset = 0;
|
527
|
-
|
528
|
-
// console.log('contentRangeInFrame content length is %@'.fmt(len));
|
529
|
-
|
530
|
-
// console.log('minY = ' + minY) ;
|
531
|
-
// console.log('maxY = ' + maxY) ;
|
532
|
-
|
533
|
-
min = null;
|
534
|
-
max = 0;
|
535
|
-
do {
|
536
|
-
offset = this.offsetForRowAtContentIndex(max); // add offset.
|
537
|
-
// console.log('offset is now %@'.fmt(offset));
|
538
|
-
if ((min===null) && (offset >= minY)) min = max; // set min
|
539
|
-
max++ ;
|
540
|
-
} while (max<len && offset < maxY);
|
541
|
-
|
542
|
-
// console.log('min = ' + min) ;
|
543
|
-
// console.log('max = ' + max) ;
|
544
|
-
|
545
|
-
// convert to range...
|
546
|
-
ret = { start: Math.max(min-1, 0), length: Math.min(max - min + 2, len) } ;
|
547
|
-
}
|
548
|
-
|
549
|
-
// console.log('contentRangeInFrame is {%@, %@}'.fmt(ret.start, ret.length));
|
550
|
-
return ret ;
|
551
|
-
},
|
552
|
-
|
553
|
-
/** @private */
|
554
|
-
itemViewLayoutAtContentIndex: function(contentIndex) {
|
555
|
-
// console.log('%@.itemViewLayoutAtContentIndex(%@)'.fmt(this, contentIndex));
|
556
|
-
var layout = { left: 0, right: 0 } ;
|
394
|
+
insertionPointView: SC.View.extend({
|
395
|
+
classNames: 'sc-list-insertion-point',
|
557
396
|
|
558
|
-
|
559
|
-
|
560
|
-
|
397
|
+
render: function(context, firstTime) {
|
398
|
+
if (firstTime) context.push('<div class="anchor"></div>');
|
399
|
+
}
|
561
400
|
|
562
|
-
return layout ;
|
563
|
-
},
|
564
|
-
|
565
|
-
insertionPointClass: SC.View.extend({
|
566
|
-
emptyElement: '<div><span class="anchor"></span></div>',
|
567
|
-
classNames: ['sc-list-insertion-point'],
|
568
|
-
layout: { top: -6, height: 2, left: 4, right: 2 }
|
569
401
|
}),
|
570
|
-
|
571
|
-
|
402
|
+
|
403
|
+
/**
|
404
|
+
Default implementation will show an insertion point
|
405
|
+
*/
|
572
406
|
showInsertionPoint: function(itemView, dropOperation) {
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
itemView = this.itemViewForContent(content) ;
|
578
|
-
|
579
|
-
if (!itemView) return ;
|
580
|
-
|
581
|
-
var f = itemView.get('frame') ;
|
582
|
-
var top = f.y, height = f.height ;
|
583
|
-
|
584
|
-
if (!this._insertionPointView) {
|
585
|
-
this._insertionPointView = this.insertionPointClass.create() ;
|
586
|
-
}
|
587
|
-
|
588
|
-
var insertionPoint = this._insertionPointView ;
|
589
|
-
if (insertionPoint.get('parentView') !== itemView.get('parentView')) {
|
590
|
-
itemView.get('parentView').appendChild(insertionPoint) ;
|
591
|
-
}
|
592
|
-
|
593
|
-
insertionPoint.adjust({ top: top + height }) ;
|
594
|
-
return ;
|
407
|
+
var view = this._insertionPointView;
|
408
|
+
if (!view) {
|
409
|
+
view = this._insertionPointView
|
410
|
+
= this.get('insertionPointView').create();
|
595
411
|
}
|
596
412
|
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
|
604
|
-
|
413
|
+
var layout = SC.clone(itemView.get('layout')),
|
414
|
+
level = itemView.get('outlineLevel'),
|
415
|
+
indent = itemView.get('outlineIndent') || 0;
|
416
|
+
if (SC.none(level)) level = -1;
|
417
|
+
|
418
|
+
if (dropOperation & SC.DROP_ON) {
|
419
|
+
this.hideInsertionPoint();
|
420
|
+
itemView.set('isSelected', YES);
|
421
|
+
this._lastDropOnView = itemView;
|
605
422
|
} else {
|
606
|
-
|
607
|
-
|
608
|
-
this.
|
609
|
-
|
610
|
-
|
611
|
-
if (!this._insertionPointView) {
|
612
|
-
this._insertionPointView = this.insertionPointClass.create() ;
|
423
|
+
|
424
|
+
if (this._lastDropOnView) {
|
425
|
+
this._lastDropOnView.set('isSelected', NO);
|
426
|
+
this._lastDropOnView = null;
|
613
427
|
}
|
614
428
|
|
615
|
-
|
616
|
-
if (insertionPoint.get('parentView') !== itemView.get('parentView')) {
|
617
|
-
itemView.get('parentView').appendChild(insertionPoint) ;
|
618
|
-
}
|
429
|
+
if (dropOperation & SC.DROP_AFTER) layout.top += layout.height;
|
619
430
|
|
620
|
-
|
621
|
-
|
431
|
+
layout.height = 2;
|
432
|
+
layout.right = 0;
|
433
|
+
layout.left = ((level+1) * indent) + 12;
|
434
|
+
delete layout.width;
|
435
|
+
|
436
|
+
view.set('layout', layout);
|
437
|
+
this.appendChild(view);
|
622
438
|
}
|
623
|
-
|
624
439
|
},
|
625
440
|
|
626
441
|
hideInsertionPoint: function() {
|
627
|
-
|
628
|
-
|
629
|
-
|
630
|
-
if (this._dropOnInsertionPoint) {
|
631
|
-
this._dropOnInsertionPoint.removeClassName('drop-target') ;
|
632
|
-
this._dropOnInsertionPoint = null ;
|
442
|
+
if (this._lastDropOnView) {
|
443
|
+
this._lastDropOnView.set('isSelected', NO);
|
444
|
+
this._lastDropOnView = null;
|
633
445
|
}
|
446
|
+
|
447
|
+
var view = this._insertionPointView;
|
448
|
+
if (view) view.removeFromParent().destroy();
|
449
|
+
this._insertionPointView = null;
|
634
450
|
},
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
// find the rowHeight and offset to work with
|
644
|
-
var offset = loc.y - f.y - sf.y ;
|
645
|
-
var rowOffset, rowHeight, idx ;
|
646
|
-
|
647
|
-
// do some simple math if we have uniform row heights...
|
648
|
-
if (this.get('hasUniformRowHeights')) {
|
649
|
-
rowHeight = this.get('rowHeight') || 0 ;
|
650
|
-
idx = Math.floor(offset / rowHeight) ;
|
651
|
-
rowOffset = idx * rowHeight ;
|
652
|
-
// otherwise, use the rowOffsets cache...
|
653
|
-
} else {
|
654
|
-
// get caches
|
655
|
-
var offsets = this._list_rowOffsets;
|
656
|
-
if (!offsets) offsets = this._list_rowOffsets = [] ;
|
657
|
-
|
658
|
-
// console.log('offset of pointer is %@'.fmt(offset));
|
659
|
-
// console.log('offsets are %@'.fmt(offsets.join(', ')));
|
660
|
-
|
661
|
-
// OK, now try the fast path...if undefined, loop backwards until we
|
662
|
-
// find an offset that IS cached...
|
663
|
-
var len = offsets.length, cur = len, ret;
|
664
|
-
|
665
|
-
// if the cached value was undefined, loop backwards through the offsets
|
666
|
-
// hash looking for a cached value to start from
|
667
|
-
while (cur>0) {
|
668
|
-
ret = offsets[--cur];
|
669
|
-
if (ret < offset) break ;
|
670
|
-
}
|
671
|
-
|
672
|
-
rowOffset = offset[cur] ;
|
673
|
-
rowHeight = this._list_heightForRowAtContentIndex(cur) ;
|
451
|
+
|
452
|
+
/**
|
453
|
+
Compute the insertion index for the passed location. The location is
|
454
|
+
a point, relative to the top/left corner of the receiver view. The return
|
455
|
+
value is an index plus a dropOperation, which is computed as such:
|
456
|
+
|
457
|
+
- if outlining is not used and you are within 5px of an edge, DROP_BEFORE
|
458
|
+
the item after the edge.
|
674
459
|
|
675
|
-
|
460
|
+
- if outlining is used and you are within 5px of an edge and the previous
|
461
|
+
item has a different outline level then the next item, then DROP_AFTER
|
462
|
+
the previous item if you are closer to that outline level.
|
676
463
|
|
677
|
-
|
464
|
+
- if dropOperation = SC.DROP_ON and you are over the middle of a row, then
|
465
|
+
use DROP_ON.
|
466
|
+
*/
|
467
|
+
insertionIndexForLocation: function(loc, dropOperation) {
|
468
|
+
var indexes = this.contentIndexesInRect(loc),
|
469
|
+
index = indexes.get('min'),
|
470
|
+
len = this.get('length'),
|
471
|
+
min, max, diff, clevel, cindent, plevel, pindent, itemView;
|
472
|
+
|
473
|
+
// if there are no indexes in the rect, then we need to either insert
|
474
|
+
// before the top item or after the last item. Figure that out by
|
475
|
+
// computing both.
|
476
|
+
if (SC.none(index) || index<0) {
|
477
|
+
if ((len===0) || (loc.y <= this.rowOffsetForContentIndex(0))) index = 0;
|
478
|
+
else if (loc.y >= this.rowOffsetForContentIndex(len)) index = len;
|
678
479
|
}
|
679
|
-
|
680
|
-
//
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
//
|
687
|
-
if
|
688
|
-
|
689
|
-
|
690
|
-
|
480
|
+
|
481
|
+
// figure the range of the row the location must be within.
|
482
|
+
min = this.rowOffsetForContentIndex(index);
|
483
|
+
max = min + this.rowHeightForContentIndex(index);
|
484
|
+
|
485
|
+
dropOperation = SC.DROP_BEFORE;
|
486
|
+
|
487
|
+
// now we know which index we are in. if dropOperation is DROP_ON, figure
|
488
|
+
// if we can drop on or not.
|
489
|
+
if (dropOperation == SC.DROP_ON) {
|
490
|
+
// editable size - reduce height by a bit to handle dropping
|
491
|
+
if (this.get('isEditable')) diff=Math.min(Math.floor((max-min)*0.2),5);
|
492
|
+
else diff = 0;
|
493
|
+
|
494
|
+
// if we're inside the range, then DROP_ON
|
495
|
+
if (loc.y >= (min+diff) || loc.y <= (max+diff)) {
|
496
|
+
return [index, SC.DROP_ON];
|
691
497
|
}
|
692
|
-
} else {
|
693
|
-
if (percentage > 0.45) idx++ ;
|
694
498
|
}
|
695
499
|
|
696
|
-
if
|
697
|
-
|
698
|
-
|
699
|
-
|
500
|
+
// ok, now if we are in last 10px, go to next item.
|
501
|
+
if ((index<len) && (loc.y >= max-10)) index++;
|
502
|
+
|
503
|
+
// finally, let's decide if we want to actually insert before/after. Only
|
504
|
+
// matters if we are using outlining.
|
505
|
+
if (index>0) {
|
506
|
+
itemView = this.itemViewForContentIndex(index);
|
507
|
+
clevel = itemView ? itemView.get('outlineLevel') : 0;
|
508
|
+
cindent = (itemView ? itemView.get('outlineIndent') : 0) || 0;
|
509
|
+
cindent *= clevel;
|
510
|
+
|
511
|
+
itemView = this.itemViewForContentIndex(index);
|
512
|
+
pindent = (itemView ? itemView.get('outlineIndent') : 0) || 0;
|
513
|
+
plevel = itemView ? itemView.get('outlineLevel') : 0;
|
514
|
+
pindent *= plevel;
|
515
|
+
|
516
|
+
// if indent levels are different, then try to figure out which level
|
517
|
+
// it should be on.
|
518
|
+
if ((clevel !== plevel) && (cindent !== pindent)) {
|
519
|
+
// use most inner indent as boundary
|
520
|
+
if (((pindent > cindent) && (loc.x >= pindent)) ||
|
521
|
+
((pindent < cindent) && (loc.x <= cindent))) {
|
522
|
+
index-- ;
|
523
|
+
dropOperation = SC.DROP_AFTER;
|
524
|
+
}
|
525
|
+
}
|
700
526
|
}
|
701
|
-
|
702
|
-
|
703
|
-
|
704
|
-
|
527
|
+
|
528
|
+
return [index, dropOperation];
|
529
|
+
},
|
530
|
+
|
531
|
+
// ..........................................................
|
532
|
+
// INTERNAL SUPPORT
|
533
|
+
//
|
534
|
+
|
535
|
+
init: function() {
|
536
|
+
sc_super();
|
537
|
+
this._sclv_rowDelegateDidChange();
|
538
|
+
}
|
705
539
|
|
706
540
|
});
|