sproutit-sproutcore 1.0.20090721145236 → 1.0.20090721145251
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/Rakefile +189 -54
- data/VERSION.yml +5 -0
- data/frameworks/sproutcore/Buildfile +64 -0
- data/frameworks/sproutcore/HISTORY +682 -0
- data/frameworks/sproutcore/README +23 -0
- data/frameworks/sproutcore/apps/docs/core.js +27 -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/docs/english.lproj/strings.js +15 -0
- 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 +86 -0
- data/frameworks/sproutcore/apps/tests/controllers/tests.js +33 -0
- data/frameworks/sproutcore/apps/tests/core.js +133 -0
- data/frameworks/sproutcore/apps/tests/data_source.js +96 -0
- data/frameworks/sproutcore/apps/tests/english.lproj/loading.rhtml +9 -0
- data/frameworks/sproutcore/apps/tests/english.lproj/main_page.css +39 -0
- data/frameworks/sproutcore/apps/tests/english.lproj/main_page.js +232 -0
- data/frameworks/sproutcore/apps/tests/english.lproj/strings.js +26 -0
- data/frameworks/sproutcore/apps/tests/fixtures/target.js +87 -0
- data/frameworks/sproutcore/apps/tests/fixtures/test.js +44 -0
- data/frameworks/sproutcore/apps/tests/main.js +28 -0
- data/frameworks/sproutcore/apps/tests/models/target.js +92 -0
- data/frameworks/sproutcore/apps/tests/models/test.js +48 -0
- data/frameworks/sproutcore/apps/tests/states/no_targets.js +26 -0
- 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/detail.js +15 -0
- 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 +15 -0
- data/frameworks/sproutcore/apps/tests/tests/controllers/tests.js +15 -0
- data/frameworks/sproutcore/apps/tests/tests/models/target.js +15 -0
- data/frameworks/sproutcore/apps/tests/tests/models/test.js +15 -0
- 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/apps/welcome/core.js +23 -0
- data/frameworks/sproutcore/apps/welcome/english.lproj/loading.rhtml +8 -0
- data/frameworks/sproutcore/apps/welcome/english.lproj/main_page.js +43 -0
- data/frameworks/sproutcore/apps/welcome/english.lproj/strings.js +15 -0
- data/frameworks/sproutcore/apps/welcome/main.js +36 -0
- data/frameworks/sproutcore/design/Record State Table.numbers +0 -0
- data/frameworks/sproutcore/frameworks/datastore/core.js +14 -0
- data/frameworks/sproutcore/frameworks/datastore/data_sources/cascade.js +113 -0
- data/frameworks/sproutcore/frameworks/datastore/data_sources/data_source.js +273 -0
- data/frameworks/sproutcore/frameworks/datastore/data_sources/fixtures.js +311 -0
- data/frameworks/sproutcore/frameworks/datastore/data_sources/fixtures_with_queries.js +238 -0
- data/frameworks/sproutcore/frameworks/datastore/debug/json.js +71 -0
- data/frameworks/sproutcore/frameworks/datastore/debug/standard_setup.js +96 -0
- data/frameworks/sproutcore/frameworks/datastore/fixtures/author_fixtures.js +2503 -0
- data/frameworks/sproutcore/frameworks/datastore/fixtures/sample.js +17 -0
- data/frameworks/sproutcore/frameworks/datastore/models/fetched_attribute.js +92 -0
- data/frameworks/sproutcore/frameworks/datastore/models/many_attribute.js +54 -0
- data/frameworks/sproutcore/frameworks/datastore/models/record.js +561 -0
- data/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +423 -0
- data/frameworks/sproutcore/frameworks/datastore/system/many_array.js +158 -0
- data/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +488 -0
- data/frameworks/sproutcore/frameworks/datastore/system/query.js +979 -0
- data/frameworks/sproutcore/frameworks/datastore/system/record_array.js +287 -0
- data/frameworks/sproutcore/frameworks/datastore/system/store.js +2007 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/data_sources/fixtures.js +121 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/integration/contact_model.js +114 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/integration/mail_model.js +91 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/integration/test_runner_model.js +56 -0
- 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/destroy.js +73 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/normalize.js +238 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/readAttribute.js +48 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/refresh.js +42 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/storeDidChangeProperties.js +138 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/unknownProperty.js +46 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/writeAttribute.js +71 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +204 -0
- 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 +40 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChanges.js +117 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChangesFromNestedStore.js +135 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/dataHashDidChange.js +110 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/discardChanges.js +99 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readDataHash.js +180 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readEditableDataHash.js +126 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/removeDataHash.js +163 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/writeDataHash.js +166 -0
- 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 +164 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/cancelRecord.js +54 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitChangesFromNestedStore.js +126 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitRecord.js +126 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/core_methods.js +73 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/createRecord.js +72 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/dataHashDidChange.js +78 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/dataSourceCallbacks.js +249 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/destroyRecord.js +106 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/init.js +21 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/pushChanges.js +61 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/readDataHash.js +74 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/readEditableDataHash.js +74 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/recordDidChange.js +74 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/removeDataHash.js +144 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/retrieveRecord.js +137 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/writeDataHash.js +130 -0
- data/frameworks/sproutcore/frameworks/debug/core.js +61 -0
- data/frameworks/sproutcore/frameworks/deprecated/core.js +59 -0
- data/frameworks/sproutcore/frameworks/deprecated/lib/button_views.rb +330 -0
- data/frameworks/sproutcore/frameworks/deprecated/lib/collection_view.rb +83 -0
- data/frameworks/sproutcore/frameworks/deprecated/lib/core_views.rb +326 -0
- data/frameworks/sproutcore/frameworks/deprecated/lib/form_views.rb +253 -0
- data/frameworks/sproutcore/frameworks/deprecated/lib/index.rhtml +75 -0
- data/frameworks/sproutcore/frameworks/deprecated/lib/menu_views.rb +93 -0
- data/frameworks/sproutcore/frameworks/deprecated/server/rails_server.js +80 -0
- data/frameworks/sproutcore/frameworks/deprecated/server/rest_server.js +178 -0
- data/frameworks/sproutcore/frameworks/deprecated/server/server.js +673 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/animator.js +679 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/binding.js +36 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/browser.js +75 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/classic_responder.js +312 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/event.js +58 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/globals.js +20 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/misc.js +58 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/node_descriptor.js +72 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/object.js +122 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/path_module.js +432 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/string.js +107 -0
- data/frameworks/sproutcore/frameworks/deprecated/tests/application/application.rhtml +125 -0
- data/frameworks/sproutcore/frameworks/deprecated/tests/views/classic_view/clippingFrame.rhtml +401 -0
- data/frameworks/sproutcore/frameworks/deprecated/tests/views/classic_view/frame.rhtml +357 -0
- data/frameworks/sproutcore/frameworks/deprecated/tests/views/classic_view/isVisibleInWindow.rhtml +147 -0
- data/frameworks/sproutcore/frameworks/deprecated/tests/views/collection/base.rhtml +298 -0
- data/frameworks/sproutcore/frameworks/deprecated/tests/views/collection/incremental_rendering.rhtml +260 -0
- data/frameworks/sproutcore/frameworks/deprecated/tests/views/collection/source_list_rendering.rhtml +143 -0
- data/frameworks/sproutcore/frameworks/deprecated/tests/views/popup_button.rhtml +128 -0
- data/frameworks/sproutcore/frameworks/deprecated/tests/views/text_field.rhtml +37 -0
- data/frameworks/sproutcore/frameworks/deprecated/views/collection.js +24 -0
- data/frameworks/sproutcore/frameworks/designer/coders/design.js +29 -0
- data/frameworks/sproutcore/frameworks/designer/coders/localization.js +27 -0
- data/frameworks/sproutcore/frameworks/designer/coders/object.js +347 -0
- data/frameworks/sproutcore/frameworks/designer/controllers/page_design.js +102 -0
- data/frameworks/sproutcore/frameworks/designer/css/css_rule.js +22 -0
- data/frameworks/sproutcore/frameworks/designer/css/css_style.js +29 -0
- data/frameworks/sproutcore/frameworks/designer/css/css_style_sheet.js +201 -0
- data/frameworks/sproutcore/frameworks/designer/ext/page.js +86 -0
- data/frameworks/sproutcore/frameworks/designer/ext/view.js +38 -0
- data/frameworks/sproutcore/frameworks/designer/views/controls/button.js +17 -0
- data/frameworks/sproutcore/frameworks/designer/views/designer.js +569 -0
- data/frameworks/sproutcore/frameworks/designer/views/label.js +16 -0
- data/frameworks/sproutcore/frameworks/designer/views/mixins/button.js +11 -0
- data/frameworks/sproutcore/frameworks/designer/views/tab.js +16 -0
- data/frameworks/sproutcore/frameworks/desktop/core.js +6 -0
- data/frameworks/sproutcore/frameworks/desktop/debug/drag.js +41 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/alert.css +56 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/debug/a_sample_image.jpg +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/debug/apple-logo1.jpeg +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/debug/iframe.html +23 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/disclosure.css +71 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/drag.css +6 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/icons.css +943 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/mini_222222.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/mini_454545.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/mini_888888.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/mini_ffffff.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/shared.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/indicator.gif +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/panels/sprite-x.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/panels/sprite-y.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/sc-theme-sprite.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/standard_fade/000000.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/standard_fade/ffffff.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/sticky-note.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/list_item.css +209 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/menu_item_view.css +100 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/modal.css +5 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/panel.css +95 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/picker.css +39 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/progress.css +31 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/radio.css +10 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/scroller.css +26 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/segmented.css +141 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/separator.css +19 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/slider.css +62 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/split.css +70 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/split_divider.css +9 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/strings.js +14 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/tab.css +12 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/toolbar.css +6 -0
- data/frameworks/sproutcore/frameworks/desktop/mixins/border.js +53 -0
- data/frameworks/sproutcore/frameworks/desktop/mixins/collection_group.js +22 -0
- data/frameworks/sproutcore/frameworks/desktop/mixins/collection_row_delegate.js +61 -0
- data/frameworks/sproutcore/frameworks/desktop/mixins/collection_view_delegate.js +283 -0
- data/frameworks/sproutcore/frameworks/desktop/mixins/scrollable.js +247 -0
- data/frameworks/sproutcore/frameworks/desktop/panes/alert.js +408 -0
- data/frameworks/sproutcore/frameworks/desktop/panes/menu.js +651 -0
- data/frameworks/sproutcore/frameworks/desktop/panes/modal.js +68 -0
- data/frameworks/sproutcore/frameworks/desktop/panes/palette.js +63 -0
- data/frameworks/sproutcore/frameworks/desktop/panes/panel.js +184 -0
- data/frameworks/sproutcore/frameworks/desktop/panes/picker.js +400 -0
- data/frameworks/sproutcore/frameworks/desktop/panes/sheet.js +46 -0
- data/frameworks/sproutcore/frameworks/desktop/protocols/drag_data_source.js +39 -0
- data/frameworks/sproutcore/frameworks/desktop/protocols/drag_source.js +81 -0
- data/frameworks/sproutcore/frameworks/desktop/protocols/drop_target.js +175 -0
- data/frameworks/sproutcore/frameworks/desktop/protocols/responder.js +280 -0
- data/frameworks/sproutcore/frameworks/desktop/system/drag.js +827 -0
- data/frameworks/sproutcore/frameworks/desktop/system/key_bindings.js +40 -0
- data/frameworks/sproutcore/frameworks/desktop/system/root_responder.js +641 -0
- data/frameworks/sproutcore/frameworks/desktop/system/undo_manager.js +187 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/integration/dialog.js +43 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +152 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/methods.js +55 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/ui.js +59 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/palette/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/palette/ui.js +35 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/ui.js +40 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/ui.js +84 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/sheet/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/sheet/ui.js +38 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/button/methods.js +45 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/button/ui.js +159 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +144 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/ui.js +99 -0
- 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 -0
- 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/disclosure/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/disclosure/ui.js +64 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/grid/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/grid/ui.js +10 -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 +284 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/menu_item/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/menu_item/ui.js +44 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/progress/methods.js +128 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +240 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/radio/methods.js +113 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/radio/ui.js +202 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/methods.js +139 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/ui.js +111 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/scroller/methods.js +102 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/scroller/ui.js +70 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/methods.js +95 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +222 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/methods.js +81 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/ui.js +100 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/separator.js +37 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/source_list/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/source_list/ui.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/split/methods.js +50 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/split/ui.js +52 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/stacked/ui_comments.js +231 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/tab/methods.js +54 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/tab/ui.js +88 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/web/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/web/ui.js +110 -0
- data/frameworks/sproutcore/frameworks/desktop/views/button.js +331 -0
- data/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +105 -0
- data/frameworks/sproutcore/frameworks/desktop/views/collection.js +2757 -0
- data/frameworks/sproutcore/frameworks/desktop/views/disclosure.js +44 -0
- data/frameworks/sproutcore/frameworks/desktop/views/form.js +594 -0
- data/frameworks/sproutcore/frameworks/desktop/views/grid.js +201 -0
- data/frameworks/sproutcore/frameworks/desktop/views/list.js +540 -0
- data/frameworks/sproutcore/frameworks/desktop/views/list_item.js +660 -0
- data/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +587 -0
- data/frameworks/sproutcore/frameworks/desktop/views/popup_button.js +68 -0
- data/frameworks/sproutcore/frameworks/desktop/views/progress.js +207 -0
- data/frameworks/sproutcore/frameworks/desktop/views/radio.js +332 -0
- data/frameworks/sproutcore/frameworks/desktop/views/scene.js +204 -0
- data/frameworks/sproutcore/frameworks/desktop/views/scroll.js +690 -0
- data/frameworks/sproutcore/frameworks/desktop/views/scroller.js +226 -0
- data/frameworks/sproutcore/frameworks/desktop/views/segmented.js +525 -0
- data/frameworks/sproutcore/frameworks/desktop/views/select_field.js +331 -0
- data/frameworks/sproutcore/frameworks/desktop/views/separator.js +37 -0
- data/frameworks/sproutcore/frameworks/desktop/views/slider.js +180 -0
- data/frameworks/sproutcore/frameworks/desktop/views/source_list.js +47 -0
- data/frameworks/sproutcore/frameworks/desktop/views/source_list_group.js +169 -0
- data/frameworks/sproutcore/frameworks/desktop/views/split.js +677 -0
- data/frameworks/sproutcore/frameworks/desktop/views/split_divider.js +55 -0
- data/frameworks/sproutcore/frameworks/desktop/views/stacked.js +101 -0
- data/frameworks/sproutcore/frameworks/desktop/views/tab.js +191 -0
- data/frameworks/sproutcore/frameworks/desktop/views/thumb.js +49 -0
- data/frameworks/sproutcore/frameworks/desktop/views/toolbar.js +49 -0
- data/frameworks/sproutcore/frameworks/desktop/views/web.js +86 -0
- data/frameworks/sproutcore/frameworks/foundation/TESTING +46 -0
- data/frameworks/sproutcore/frameworks/foundation/controllers/array.js +509 -0
- data/frameworks/sproutcore/frameworks/foundation/controllers/controller.js +45 -0
- data/frameworks/sproutcore/frameworks/foundation/controllers/object.js +323 -0
- data/frameworks/sproutcore/frameworks/foundation/controllers/tree.js +109 -0
- data/frameworks/sproutcore/frameworks/foundation/core.js +136 -0
- data/frameworks/sproutcore/frameworks/foundation/debug/control_test_pane.js +194 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/blank.gif +0 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/bootstrap.rhtml +68 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/button_view.css +55 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/core.css +221 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/debug/control-test-pane.css +9 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/images/sproutcore-logo.png +0 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/label.css +30 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/static_layout.css +5 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/strings.js +15 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/text_field.css +45 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/view.css +45 -0
- data/frameworks/sproutcore/frameworks/foundation/ext/object.js +81 -0
- data/frameworks/sproutcore/frameworks/foundation/ext/run_loop.js +158 -0
- data/frameworks/sproutcore/frameworks/foundation/fixtures/file_exists.json +1 -0
- data/frameworks/sproutcore/frameworks/foundation/license.js +19 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/button.js +299 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/collection_content.js +171 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/content_display.js +88 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/control.js +352 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/editable.js +146 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/inline_text_field.js +462 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/selection_support.js +232 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/static_layout.js +132 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/string.js +251 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/tree_item_content.js +159 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/validatable.js +176 -0
- data/frameworks/sproutcore/frameworks/foundation/panes/main.js +47 -0
- data/frameworks/sproutcore/frameworks/foundation/panes/pane.js +584 -0
- data/frameworks/sproutcore/frameworks/foundation/private/tree_item_observer.js +887 -0
- data/frameworks/sproutcore/frameworks/foundation/protocols/inline_editor_delegate.js +84 -0
- data/frameworks/sproutcore/frameworks/foundation/system/application.js +36 -0
- data/frameworks/sproutcore/frameworks/foundation/system/benchmark.js +492 -0
- data/frameworks/sproutcore/frameworks/foundation/system/browser.js +64 -0
- data/frameworks/sproutcore/frameworks/foundation/system/builder.js +210 -0
- data/frameworks/sproutcore/frameworks/foundation/system/core_query.js +2015 -0
- data/frameworks/sproutcore/frameworks/foundation/system/cursor.js +129 -0
- data/frameworks/sproutcore/frameworks/foundation/system/datetime.js +729 -0
- data/frameworks/sproutcore/frameworks/foundation/system/error.js +93 -0
- data/frameworks/sproutcore/frameworks/foundation/system/event.js +853 -0
- data/frameworks/sproutcore/frameworks/foundation/system/image_cache.js +433 -0
- data/frameworks/sproutcore/frameworks/foundation/system/json.js +440 -0
- data/frameworks/sproutcore/frameworks/foundation/system/locale.js +288 -0
- data/frameworks/sproutcore/frameworks/foundation/system/page.js +106 -0
- data/frameworks/sproutcore/frameworks/foundation/system/ready.js +195 -0
- data/frameworks/sproutcore/frameworks/foundation/system/render_context.js +904 -0
- data/frameworks/sproutcore/frameworks/foundation/system/request.js +380 -0
- 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 +391 -0
- data/frameworks/sproutcore/frameworks/foundation/system/routes.js +487 -0
- data/frameworks/sproutcore/frameworks/foundation/system/time.js +478 -0
- data/frameworks/sproutcore/frameworks/foundation/system/timer.js +549 -0
- data/frameworks/sproutcore/frameworks/foundation/system/user_defaults.js +165 -0
- data/frameworks/sproutcore/frameworks/foundation/system/utils.js +425 -0
- 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/debug/control_test_pane/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/debug/control_test_pane/ui.js +113 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/integration/creating_views.js +113 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/mixins/button/content.js +195 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/mixins/button/displayProperties.js +89 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/mixins/button/keyEquivalents.js +35 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/mixins/control/content.js +168 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/mixins/control/displayProperties.js +89 -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/builder.js +42 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_core.js +1323 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_dimensions.js +387 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_selector.js +405 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/setClass.js +49 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/within.js +66 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/datetime.js +151 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/error.js +41 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/json.js +14 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/locale.js +128 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/begin.js +47 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/element.js +44 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/end.js +119 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/get.js +51 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_attr.js +50 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_basic.js +28 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_className.js +179 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_style.js +100 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/init.js +55 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/join.js +28 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/push_text.js +74 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/tag.js +45 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/update.js +205 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/request.js +127 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/makeKeyPane.js +124 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/makeMainPane.js +68 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/root_responder.js +101 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/targetForAction.js +238 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/routes.js +33 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/invalidate.js +38 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/invokeLater.js +201 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/isPaused.js +71 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/performAction.js +67 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/schedule.js +170 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/user_defaults.js +27 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/utils/normalizeURL.js +18 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/utils/range.js +62 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/validators/credit_card.js +35 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/validators/date.js +23 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/validators/number.js +47 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/validators/password.js +13 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/container/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/container/ui.js +83 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/image/ui.js +39 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/label/ui.js +148 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/main_pane.js +31 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/pane/append_remove.js +89 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/pane/firstResponder.js +148 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/pane/keyPane.js +133 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/pane/sendEvent.js +165 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/methods.js +76 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +250 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/clippingFrame.js +133 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/convertFrames.js +246 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/createChildViews.js +122 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/createLayer.js +97 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/destroyLayer.js +85 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/findLayerInParentLayer.js +52 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/init.js +50 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/insertBefore.js +200 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/isVisible.js +51 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/isVisibleInWindow.js +113 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/layer.js +150 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/layoutChildViews.js +162 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/layoutDidChange.js +127 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/layoutStyle.js +328 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/parentViewDidChange.js +67 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/prepareContext.js +166 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/removeChild.js +189 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/render.js +83 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/replaceChild.js +29 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/updateLayer.js +146 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/updateLayerLocation.js +194 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/viewDidResize.js +185 -0
- data/frameworks/sproutcore/frameworks/foundation/validators/credit_card.js +125 -0
- data/frameworks/sproutcore/frameworks/foundation/validators/date.js +52 -0
- data/frameworks/sproutcore/frameworks/foundation/validators/email.js +45 -0
- data/frameworks/sproutcore/frameworks/foundation/validators/not_empty.js +33 -0
- data/frameworks/sproutcore/frameworks/foundation/validators/number.js +82 -0
- data/frameworks/sproutcore/frameworks/foundation/validators/password.js +86 -0
- data/frameworks/sproutcore/frameworks/foundation/validators/validator.js +311 -0
- data/frameworks/sproutcore/frameworks/foundation/views/container.js +136 -0
- data/frameworks/sproutcore/frameworks/foundation/views/field.js +287 -0
- data/frameworks/sproutcore/frameworks/foundation/views/image.js +161 -0
- data/frameworks/sproutcore/frameworks/foundation/views/label.js +271 -0
- data/frameworks/sproutcore/frameworks/foundation/views/text_field.js +257 -0
- data/frameworks/sproutcore/frameworks/foundation/views/view.js +2405 -0
- data/frameworks/sproutcore/frameworks/mobile/english.lproj/core.css +12 -0
- data/frameworks/sproutcore/frameworks/mobile/lib/index.rhtml +126 -0
- data/frameworks/sproutcore/frameworks/mobile/system/root_responder.js +109 -0
- data/frameworks/sproutcore/frameworks/mobile/tests/views/button/ui.js +9 -0
- data/frameworks/sproutcore/frameworks/mobile/views/button.js +190 -0
- data/frameworks/sproutcore/frameworks/runtime/README +12 -0
- data/frameworks/sproutcore/frameworks/runtime/core.js +856 -0
- 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/license.js +28 -0
- data/frameworks/sproutcore/frameworks/runtime/mixins/array.js +613 -0
- data/frameworks/sproutcore/frameworks/runtime/mixins/copyable.js +64 -0
- data/frameworks/sproutcore/frameworks/runtime/mixins/delegate_support.js +108 -0
- data/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +1258 -0
- data/frameworks/sproutcore/frameworks/runtime/mixins/freezable.js +104 -0
- data/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +1305 -0
- data/frameworks/sproutcore/frameworks/runtime/private/chain_observer.js +141 -0
- data/frameworks/sproutcore/frameworks/runtime/private/observer_queue.js +148 -0
- data/frameworks/sproutcore/frameworks/runtime/private/observer_set.js +152 -0
- data/frameworks/sproutcore/frameworks/runtime/protocols/observable_protocol.js +40 -0
- data/frameworks/sproutcore/frameworks/runtime/protocols/sparse_array_delegate.js +131 -0
- data/frameworks/sproutcore/frameworks/runtime/system/binding.js +915 -0
- data/frameworks/sproutcore/frameworks/runtime/system/enumerator.js +107 -0
- data/frameworks/sproutcore/frameworks/runtime/system/index_set.js +1166 -0
- data/frameworks/sproutcore/frameworks/runtime/system/object.js +801 -0
- data/frameworks/sproutcore/frameworks/runtime/system/range_observer.js +265 -0
- data/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +241 -0
- data/frameworks/sproutcore/frameworks/runtime/system/selection_set.js +649 -0
- data/frameworks/sproutcore/frameworks/runtime/system/set.js +375 -0
- data/frameworks/sproutcore/frameworks/runtime/system/sparse_array.js +295 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/core/IsEqual.js +56 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/core/beget.js +23 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/core/clone.js +66 -0
- 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/guidFor.js +147 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/core/isArray.js +25 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/core/itemType.js +38 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/core/keys.js +20 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/core/makeArray.js +30 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/core/objectForPropertyPath.js +19 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/core/tupleForPropertyPath.js +37 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/mixins/array.js +57 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/mixins/enumerable.js +611 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/observable.js +587 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/propertyChanges.js +132 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/registerDependentKeys.js +79 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/mixins/propertyChanges.js +80 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/private/observer_queue/isObservingSuspended.js +55 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/binding.js +265 -0
- 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 +135 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/object/bindings.js +339 -0
- 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 +120 -0
- 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 +292 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/sparse_array.js +122 -0
- data/frameworks/sproutcore/frameworks/testing/core.js +196 -0
- data/frameworks/sproutcore/frameworks/testing/english.lproj/additions.css +8 -0
- data/frameworks/sproutcore/frameworks/testing/english.lproj/runner.css +126 -0
- data/frameworks/sproutcore/frameworks/testing/english.lproj/testsuite.css +131 -0
- data/frameworks/sproutcore/frameworks/testing/extras.js +17 -0
- data/frameworks/sproutcore/frameworks/testing/jquery.js +3559 -0
- data/frameworks/sproutcore/frameworks/testing/qunit.js +827 -0
- 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 +62 -0
- data/frameworks/sproutcore/lib/index.rhtml +121 -0
- data/frameworks/sproutcore/license.js +28 -0
- data/frameworks/sproutcore/themes/empty_theme/tests/mini_icons.rhtml +69 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/button.css +41 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/core.css +8 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/backButton.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/blueButton.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/cancel.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/grayButton.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/leftButton.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/listArrow.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/listArrowSel.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/listGroup.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/loading.gif +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/pinstripes.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/rightButton.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/selection.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/thumb.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/toggle.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/toggleOn.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/toolButton.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/toolbar.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/whiteButton.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/strings.js +15 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/button.css +331 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/checkbox.css +91 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/collection.css +134 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/core.css +60 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/disclosure.css +55 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/images/sc-theme-repeat-x.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/images/sc-theme-sprite.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/images/sc-theme-ysprite.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/images/sc-toolbar-view.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/label.css +11 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/list_item.css +30 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/pane.css +8 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/background-fat.jpg +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/background-thin.jpg +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/bottom-edge.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/bottom-left-corner.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/bottom-right-corner.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/left-edge.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/overlay.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/right-edge.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/top-edge.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/top-left-corner.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/top-right-corner.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/progress.css +26 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/radio.css +122 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/segmented.css +279 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/slider.css +94 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/split_view.css +27 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/tab.css +18 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/text_field.css +10 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/toolbar.css +7 -0
- data/lib/sproutcore.rb +9 -1
- data/lib/sproutcore/tools/build.rb +1 -1
- data/lib/thor/CHANGELOG.rdoc +52 -0
- data/lib/thor/LICENSE +20 -0
- data/lib/thor/README.markdown +76 -0
- data/lib/thor/Rakefile +6 -0
- data/lib/thor/Thorfile +45 -0
- data/lib/thor/bin/rake2thor +83 -0
- data/lib/thor/bin/thor +7 -0
- data/lib/thor/lib/thor.rb +170 -0
- data/lib/thor/lib/thor/error.rb +3 -0
- data/lib/thor/lib/thor/options.rb +267 -0
- data/lib/thor/lib/thor/ordered_hash.rb +64 -0
- data/lib/thor/lib/thor/runner.rb +305 -0
- data/lib/thor/lib/thor/task.rb +83 -0
- data/lib/thor/lib/thor/task_hash.rb +22 -0
- data/lib/thor/lib/thor/tasks.rb +77 -0
- data/lib/thor/lib/thor/tasks/package.rb +18 -0
- data/lib/thor/lib/thor/util.rb +75 -0
- data/lib/thor/script/destroy +14 -0
- data/lib/thor/script/generate +14 -0
- data/lib/thor/task.thor +15 -0
- metadata +664 -351
- data/VERSION +0 -1
- data/spec/buildtasks/build/copy_spec.rb +0 -60
- data/spec/buildtasks/build/spec_helper.rb +0 -36
- data/spec/buildtasks/manifest/catalog_spec.rb +0 -48
- data/spec/buildtasks/manifest/hide_buildfiles_spec.rb +0 -125
- data/spec/buildtasks/manifest/localize_spec.rb +0 -97
- data/spec/buildtasks/manifest/prepare_build_tasks/combine_spec.rb +0 -246
- data/spec/buildtasks/manifest/prepare_build_tasks/css_spec.rb +0 -87
- data/spec/buildtasks/manifest/prepare_build_tasks/html_spec.rb +0 -175
- data/spec/buildtasks/manifest/prepare_build_tasks/javascript_spec.rb +0 -65
- data/spec/buildtasks/manifest/prepare_build_tasks/minify_spec.rb +0 -70
- data/spec/buildtasks/manifest/prepare_build_tasks/packed_spec.rb +0 -152
- data/spec/buildtasks/manifest/prepare_build_tasks/sass_spec.rb +0 -98
- data/spec/buildtasks/manifest/prepare_build_tasks/strings_spec.rb +0 -64
- data/spec/buildtasks/manifest/prepare_build_tasks/tests_spec.rb +0 -163
- data/spec/buildtasks/manifest/prepare_spec.rb +0 -43
- 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/entry.txt +0 -0
- 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/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/sproutcore-abbot.gemspec +0 -640
- data/vendor/jsdoc/templates/jsdoc/allclasses.tmpl +0 -17
- data/vendor/jsdoc/templates/jsdoc/allfiles.tmpl +0 -56
- data/vendor/jsdoc/templates/jsdoc/class.tmpl +0 -487
- data/vendor/jsdoc/templates/jsdoc/index.tmpl +0 -38
- data/vendor/jsdoc/templates/jsdoc/symbol.tmpl +0 -35
- data/vendor/jsdoc/templates/sproutcore/allclasses.tmpl +0 -0
- data/vendor/jsdoc/templates/sproutcore/allfiles.tmpl +0 -56
- data/vendor/jsdoc/templates/sproutcore/class.tmpl +0 -674
- data/vendor/jsdoc/templates/sproutcore/index.tmpl +0 -55
- data/vendor/jsdoc/templates/sproutcore/symbol.tmpl +0 -35
@@ -0,0 +1,107 @@
|
|
1
|
+
// ==========================================================================
|
2
|
+
// Project: SproutCore Costello - Property Observing Library
|
3
|
+
// Copyright: ©2006-2009 Sprout Systems, Inc. and contributors.
|
4
|
+
// Portions ©2008-2009 Apple, Inc. All rights reserved.
|
5
|
+
// License: Licened under MIT license (see license.js)
|
6
|
+
// ==========================================================================
|
7
|
+
|
8
|
+
/**
|
9
|
+
@class
|
10
|
+
|
11
|
+
An object that iterates over all of the values in an object.
|
12
|
+
|
13
|
+
An instance of this object is returned everytime you call the
|
14
|
+
enumerator() method on an object that implements the SC.Enumerable mixin.
|
15
|
+
|
16
|
+
Once you create an enumerator instance, you can call nextObject() on it
|
17
|
+
until you can iterated through the entire collection. Once you have
|
18
|
+
exhausted the enumerator, you can reuse it if you want by calling reset().
|
19
|
+
|
20
|
+
@extends Object
|
21
|
+
@since SproutCore 1.0
|
22
|
+
*/
|
23
|
+
SC.Enumerator = function(enumerableObject) {
|
24
|
+
this.enumerable = enumerableObject ;
|
25
|
+
this.reset() ;
|
26
|
+
return this ;
|
27
|
+
} ;
|
28
|
+
|
29
|
+
SC.Enumerator.prototype = {
|
30
|
+
|
31
|
+
/**
|
32
|
+
Returns the next object in the enumeration or undefined when complete.
|
33
|
+
|
34
|
+
@returns {Object} the next object or undefined
|
35
|
+
*/
|
36
|
+
nextObject: function() {
|
37
|
+
var index = this._index ;
|
38
|
+
var len = this._length;
|
39
|
+
if (index >= len) return undefined ; // nothing to do
|
40
|
+
|
41
|
+
// get the value
|
42
|
+
var ret = this.enumerable.nextObject(index, this._previousObject, this._context) ;
|
43
|
+
this._previousObject = ret ;
|
44
|
+
this._index = index + 1 ;
|
45
|
+
|
46
|
+
if (index >= len) {
|
47
|
+
this._context = SC.Enumerator._pushContext(this._context);
|
48
|
+
}
|
49
|
+
|
50
|
+
return ret ;
|
51
|
+
},
|
52
|
+
|
53
|
+
/**
|
54
|
+
Resets the enumerator to the beginning. This is a nice way to reuse
|
55
|
+
an existing enumerator.
|
56
|
+
|
57
|
+
@returns {Object} this
|
58
|
+
*/
|
59
|
+
reset: function() {
|
60
|
+
var e = this.enumerable ;
|
61
|
+
if (!e) throw SC.$error("Enumerator has been destroyed");
|
62
|
+
|
63
|
+
var len = this._length = (e.get) ? e.get('length') : e.length ;
|
64
|
+
this._index = 0;
|
65
|
+
this._previousObject = null ;
|
66
|
+
this._context = (len > 0) ? SC.Enumerator._popContext() : null;
|
67
|
+
},
|
68
|
+
|
69
|
+
/**
|
70
|
+
Releases the enumerators enumerable object. You cannot use this object
|
71
|
+
anymore. This is not often needed but it is useful when you need to
|
72
|
+
make sure memory gets cleared.
|
73
|
+
|
74
|
+
@returns {Object} null
|
75
|
+
*/
|
76
|
+
destroy: function() {
|
77
|
+
this.enumerable = this._length = this._index = this._previousObject = this._context = null;
|
78
|
+
}
|
79
|
+
|
80
|
+
} ;
|
81
|
+
|
82
|
+
/**
|
83
|
+
Use this method to manually create a new Enumerator object. Usually you
|
84
|
+
will not access this method directly but instead call enumerator() on the
|
85
|
+
item you want to enumerate.
|
86
|
+
|
87
|
+
@param {SC.Enumerable} The enumerable object.
|
88
|
+
@returns {SC.Enumerator} the enumerator
|
89
|
+
*/
|
90
|
+
SC.Enumerator.create = function(enumerableObject) {
|
91
|
+
return new SC.Enumerator(enumerableObject) ;
|
92
|
+
};
|
93
|
+
|
94
|
+
// Private context caching methods. This avoids recreating lots of context
|
95
|
+
// objects.
|
96
|
+
|
97
|
+
SC.Enumerator._popContext = function() {
|
98
|
+
var ret = (this._contextCache) ? this._contextCache.pop() : null ;
|
99
|
+
return ret || {} ;
|
100
|
+
} ;
|
101
|
+
|
102
|
+
SC.Enumerator._pushContext = function(context) {
|
103
|
+
var cache = this._contextCache = this._contextCache || [] ;
|
104
|
+
cache.push(context);
|
105
|
+
return null ;
|
106
|
+
};
|
107
|
+
|
@@ -0,0 +1,1166 @@
|
|
1
|
+
// ==========================================================================
|
2
|
+
// Project: SproutCore Costello - Property Observing Library
|
3
|
+
// Copyright: ©2006-2009 Sprout Systems, Inc. and contributors.
|
4
|
+
// Portions ©2008-2009 Apple, Inc. All rights reserved.
|
5
|
+
// License: Licened under MIT license (see license.js)
|
6
|
+
// ==========================================================================
|
7
|
+
|
8
|
+
sc_require('mixins/enumerable') ;
|
9
|
+
sc_require('mixins/observable') ;
|
10
|
+
sc_require('mixins/freezable');
|
11
|
+
sc_require('mixins/copyable');
|
12
|
+
|
13
|
+
/**
|
14
|
+
@class
|
15
|
+
|
16
|
+
A collection of ranges. You can use an IndexSet to keep track of non-
|
17
|
+
continuous ranges of items in a parent array. IndexSet's are used for
|
18
|
+
selection, for managing invalidation ranges and other data-propogation.
|
19
|
+
|
20
|
+
h2. Examples
|
21
|
+
|
22
|
+
{{{
|
23
|
+
var set = SC.IndexSet.create(ranges) ;
|
24
|
+
set.contains(index);
|
25
|
+
set.add(index, length);
|
26
|
+
set.remove(index, length);
|
27
|
+
|
28
|
+
// uses a backing SC.Array object to return each index
|
29
|
+
set.forEach(function(object) { .. })
|
30
|
+
|
31
|
+
// returns the index
|
32
|
+
set.forEachIndex(function(index) { ... });
|
33
|
+
|
34
|
+
// returns ranges
|
35
|
+
set.forEachRange(function(start, length) { .. });
|
36
|
+
}}}
|
37
|
+
|
38
|
+
h2. Implementation Notes
|
39
|
+
|
40
|
+
An IndexSet stores indices on the object. A positive value great than the
|
41
|
+
index tells you the end of an occupied range. A negative values tells you
|
42
|
+
the end of an empty range. A value less than the index is a search
|
43
|
+
accelerator. It tells you the start of the nearest range.
|
44
|
+
|
45
|
+
@extends Object
|
46
|
+
@extends SC.Enumerable
|
47
|
+
@extends SC.Observable
|
48
|
+
@extends SC.Copyable
|
49
|
+
@extends SC.Freezable
|
50
|
+
@since SproutCore 1.0
|
51
|
+
*/
|
52
|
+
SC.IndexSet = SC.mixin({},
|
53
|
+
SC.Enumerable, SC.Observable, SC.Freezable, SC.Copyable,
|
54
|
+
/** @scope SC.IndexSet.prototype */ {
|
55
|
+
|
56
|
+
/** @private
|
57
|
+
Walks a content array and copies its contents to a new array. For large
|
58
|
+
content arrays this is faster than using slice()
|
59
|
+
*/
|
60
|
+
_sc_sliceContent: function(c) {
|
61
|
+
if (c.length < 1000) return c.slice(); // use native when faster
|
62
|
+
var cur = 0, ret = [], next = c[0];
|
63
|
+
while(next !== 0) {
|
64
|
+
ret[cur] = next ;
|
65
|
+
cur = (next<0) ? (0-next) : next ;
|
66
|
+
next = c[cur];
|
67
|
+
}
|
68
|
+
ret[cur] = 0;
|
69
|
+
this._hint(0, cur, ret); // hints are not copied manually - add them
|
70
|
+
return ret ;
|
71
|
+
},
|
72
|
+
|
73
|
+
/**
|
74
|
+
To create a set, pass either a start and index or another IndexSet.
|
75
|
+
*/
|
76
|
+
create: function(start, length) {
|
77
|
+
var ret = SC.beget(this);
|
78
|
+
ret.initObservable();
|
79
|
+
|
80
|
+
// optimized method to clone an index set.
|
81
|
+
if (start && start.isIndexSet) {
|
82
|
+
ret._content = this._sc_sliceContent(start._content);
|
83
|
+
ret.max = start.max;
|
84
|
+
ret.length = start.length;
|
85
|
+
ret.source = start.source ;
|
86
|
+
|
87
|
+
// otherwise just do a regular add
|
88
|
+
} else {
|
89
|
+
ret._content = [0];
|
90
|
+
if (start !== undefined) ret.add(start, length);
|
91
|
+
}
|
92
|
+
return ret ;
|
93
|
+
},
|
94
|
+
|
95
|
+
isIndexSet: YES,
|
96
|
+
|
97
|
+
HINT_SIZE: 256,
|
98
|
+
|
99
|
+
/**
|
100
|
+
Total number of indexes contained in the set
|
101
|
+
|
102
|
+
@type number
|
103
|
+
*/
|
104
|
+
length: 0,
|
105
|
+
|
106
|
+
/**
|
107
|
+
One greater than the largest index currently stored in the set. This
|
108
|
+
is sometimes useful when determining the total range of items covering
|
109
|
+
the index set.
|
110
|
+
*/
|
111
|
+
max: 0,
|
112
|
+
|
113
|
+
/**
|
114
|
+
The first index included in the set or -1.
|
115
|
+
|
116
|
+
@property
|
117
|
+
@type {Number}
|
118
|
+
*/
|
119
|
+
min: function() {
|
120
|
+
var content = this._content,
|
121
|
+
cur = content[0];
|
122
|
+
return (cur === 0) ? -1 : (cur>0) ? 0 : Math.abs(cur);
|
123
|
+
|
124
|
+
}.property('[]').cacheable(),
|
125
|
+
|
126
|
+
firstObject: function() {
|
127
|
+
return (this.get('length')>0) ? this.get('min') : undefined;
|
128
|
+
}.property(),
|
129
|
+
|
130
|
+
/**
|
131
|
+
Returns the starting index of the nearest range for the specified
|
132
|
+
index.
|
133
|
+
|
134
|
+
@param {Number} index
|
135
|
+
@returns {Number} starting index
|
136
|
+
*/
|
137
|
+
rangeStartForIndex: function(index) {
|
138
|
+
var content = this._content,
|
139
|
+
max = this.get('max'),
|
140
|
+
ret, next, accel;
|
141
|
+
|
142
|
+
// fast cases
|
143
|
+
if (index >= max) return max ;
|
144
|
+
if (Math.abs(content[index]) > index) return index ; // we hit a border
|
145
|
+
|
146
|
+
// use accelerator to find nearest content range
|
147
|
+
accel = index - (index % SC.IndexSet.HINT_SIZE);
|
148
|
+
ret = content[accel];
|
149
|
+
if (ret<0 || ret>index) ret = accel;
|
150
|
+
next = Math.abs(content[ret]);
|
151
|
+
|
152
|
+
// now step forward through ranges until we find one that includes the
|
153
|
+
// index.
|
154
|
+
while (next < index) {
|
155
|
+
ret = next ;
|
156
|
+
next = Math.abs(content[ret]);
|
157
|
+
}
|
158
|
+
return ret ;
|
159
|
+
},
|
160
|
+
|
161
|
+
/**
|
162
|
+
Returns YES if the passed index set contains the exact same indexes as
|
163
|
+
the receiver. If you pass any object other than an index set, returns NO.
|
164
|
+
|
165
|
+
@param {Object} obj another object.
|
166
|
+
@returns {Boolean}
|
167
|
+
*/
|
168
|
+
isEqual: function(obj) {
|
169
|
+
|
170
|
+
// optimize for some special cases
|
171
|
+
if (obj === this) return YES ;
|
172
|
+
if (!obj || !obj.isIndexSet || (obj.max !== this.max) || (obj.length !== this.length)) return NO;
|
173
|
+
|
174
|
+
// ok, now we need to actually compare the ranges of the two.
|
175
|
+
var lcontent = this._content,
|
176
|
+
rcontent = obj._content,
|
177
|
+
cur = 0,
|
178
|
+
next = lcontent[cur];
|
179
|
+
|
180
|
+
do {
|
181
|
+
if (rcontent[cur] !== next) return NO ;
|
182
|
+
cur = Math.abs(next) ;
|
183
|
+
next = lcontent[cur];
|
184
|
+
} while (cur !== 0);
|
185
|
+
return YES ;
|
186
|
+
},
|
187
|
+
|
188
|
+
/**
|
189
|
+
Returns the first index in the set before the passed index or null if
|
190
|
+
there are no previous indexes in the set.
|
191
|
+
|
192
|
+
@param {Number} index index to check
|
193
|
+
@returns {Number} index or -1
|
194
|
+
*/
|
195
|
+
indexBefore: function(index) {
|
196
|
+
|
197
|
+
if (index===0) return -1; // fast path
|
198
|
+
index--; // start with previous index
|
199
|
+
|
200
|
+
var content = this._content,
|
201
|
+
max = this.get('max'),
|
202
|
+
start = this.rangeStartForIndex(index);
|
203
|
+
if (!content) return null;
|
204
|
+
|
205
|
+
// loop backwards until we find a range that is in the set.
|
206
|
+
while((start===max) || (content[start]<0)) {
|
207
|
+
if (start === 0) return -1 ; // nothing before; just quit
|
208
|
+
index = start -1 ;
|
209
|
+
start = this.rangeStartForIndex(index);
|
210
|
+
}
|
211
|
+
|
212
|
+
return index;
|
213
|
+
},
|
214
|
+
|
215
|
+
/**
|
216
|
+
Returns the first index in the set after the passed index or null if
|
217
|
+
there are no additional indexes in the set.
|
218
|
+
|
219
|
+
@param {Number} index index to check
|
220
|
+
@returns {Number} index or -1
|
221
|
+
*/
|
222
|
+
indexAfter: function(index) {
|
223
|
+
var content = this._content,
|
224
|
+
max = this.get('max'),
|
225
|
+
start, next ;
|
226
|
+
if (!content || (index>=max)) return -1; // fast path
|
227
|
+
index++; // start with next index
|
228
|
+
|
229
|
+
|
230
|
+
// loop forwards until we find a range that is in the set.
|
231
|
+
start = this.rangeStartForIndex(index);
|
232
|
+
next = content[start];
|
233
|
+
while(next<0) {
|
234
|
+
if (next === 0) return -1 ; //nothing after; just quit
|
235
|
+
index = start = Math.abs(next);
|
236
|
+
next = content[start];
|
237
|
+
}
|
238
|
+
|
239
|
+
return index;
|
240
|
+
},
|
241
|
+
|
242
|
+
/**
|
243
|
+
Returns YES if the index set contains the named index
|
244
|
+
|
245
|
+
@param {Number} start index or range
|
246
|
+
@param {Number} length optional range length
|
247
|
+
@returns {Boolean}
|
248
|
+
*/
|
249
|
+
contains: function(start, length) {
|
250
|
+
var content, cur, next, rstart, rnext;
|
251
|
+
|
252
|
+
// normalize input
|
253
|
+
if (length === undefined) {
|
254
|
+
if (start === null || start === undefined) return NO ;
|
255
|
+
|
256
|
+
if (typeof start === SC.T_NUMBER) {
|
257
|
+
length = 1 ;
|
258
|
+
|
259
|
+
// if passed an index set, check each receiver range
|
260
|
+
} else if (start && start.isIndexSet) {
|
261
|
+
if (start === this) return YES ; // optimization
|
262
|
+
|
263
|
+
content = start._content ;
|
264
|
+
cur = 0 ;
|
265
|
+
next = content[cur];
|
266
|
+
while (next !== 0) {
|
267
|
+
if ((next>0) && !this.contains(cur, next-cur)) return NO ;
|
268
|
+
cur = Math.abs(next);
|
269
|
+
next = content[cur];
|
270
|
+
}
|
271
|
+
return YES ;
|
272
|
+
|
273
|
+
} else {
|
274
|
+
length = start.length;
|
275
|
+
start = start.start;
|
276
|
+
}
|
277
|
+
}
|
278
|
+
|
279
|
+
rstart = this.rangeStartForIndex(start);
|
280
|
+
rnext = this._content[rstart];
|
281
|
+
|
282
|
+
return (rnext>0) && (rstart <= start) && (rnext >= (start+length));
|
283
|
+
},
|
284
|
+
|
285
|
+
/**
|
286
|
+
Returns YES if the index set contains any of the passed indexes. You
|
287
|
+
can pass a single index, a range or an index set.
|
288
|
+
|
289
|
+
@param {Number} start index, range, or IndexSet
|
290
|
+
@param {Number} length optional range length
|
291
|
+
@returns {Boolean}
|
292
|
+
*/
|
293
|
+
intersects: function(start, length) {
|
294
|
+
var content, cur, next, lim;
|
295
|
+
|
296
|
+
// normalize input
|
297
|
+
if (length === undefined) {
|
298
|
+
if (typeof start === SC.T_NUMBER) {
|
299
|
+
length = 1 ;
|
300
|
+
|
301
|
+
// if passed an index set, check each receiver range
|
302
|
+
} else if (start && start.isIndexSet) {
|
303
|
+
if (start === this) return YES ; // optimization
|
304
|
+
|
305
|
+
content = start._content ;
|
306
|
+
cur = 0 ;
|
307
|
+
next = content[cur];
|
308
|
+
while (next !== 0) {
|
309
|
+
if ((next>0) && this.intersects(cur, next-cur)) return YES ;
|
310
|
+
cur = Math.abs(next);
|
311
|
+
next = content[cur];
|
312
|
+
}
|
313
|
+
return NO ;
|
314
|
+
|
315
|
+
} else {
|
316
|
+
length = start.length;
|
317
|
+
start = start.start;
|
318
|
+
}
|
319
|
+
}
|
320
|
+
|
321
|
+
cur = this.rangeStartForIndex(start);
|
322
|
+
content = this._content;
|
323
|
+
next = content[cur];
|
324
|
+
lim = start + length;
|
325
|
+
while (cur < lim) {
|
326
|
+
if (next === 0) return NO; // no match and at end!
|
327
|
+
if ((next > 0) && (next > start)) return YES ; // found a match
|
328
|
+
cur = Math.abs(next);
|
329
|
+
next = content[cur];
|
330
|
+
}
|
331
|
+
return NO ; // no match
|
332
|
+
},
|
333
|
+
|
334
|
+
/**
|
335
|
+
Returns a new IndexSet without the passed range or indexes. This is a
|
336
|
+
convenience over simply cloning and removing. Does some optimizations.
|
337
|
+
|
338
|
+
@param {Number} start index, range, or IndexSet
|
339
|
+
@param {Number} length optional range length
|
340
|
+
@returns {SC.IndexSet} new index set
|
341
|
+
*/
|
342
|
+
without: function(start, length) {
|
343
|
+
if (start === this) return SC.IndexSet.create(); // just need empty set
|
344
|
+
return this.clone().remove(start, length);
|
345
|
+
},
|
346
|
+
|
347
|
+
/**
|
348
|
+
Replace the index set's current content with the passed index set. This
|
349
|
+
is faster than clearing the index set adding the values again.
|
350
|
+
|
351
|
+
@param {Number} start index, Range, or another IndexSet
|
352
|
+
@param {Number} length optional length of range.
|
353
|
+
@returns {SC.IndexSet} receiver
|
354
|
+
*/
|
355
|
+
replace: function(start, length) {
|
356
|
+
|
357
|
+
if (length === undefined) {
|
358
|
+
if (typeof start === SC.T_NUMBER) {
|
359
|
+
length = 1 ;
|
360
|
+
} else if (start && start.isIndexSet) {
|
361
|
+
this._content = this._sc_sliceContent(start._content);
|
362
|
+
this.beginPropertyChanges()
|
363
|
+
.set('max', start.max)
|
364
|
+
.set('length', start.length)
|
365
|
+
.set('source', start.source)
|
366
|
+
.enumerableContentDidChange()
|
367
|
+
.endPropertyChanges();
|
368
|
+
return this ;
|
369
|
+
|
370
|
+
} else {
|
371
|
+
length = start.length;
|
372
|
+
start = start.start;
|
373
|
+
}
|
374
|
+
}
|
375
|
+
|
376
|
+
var oldlen = this.length;
|
377
|
+
this._content.length=1;
|
378
|
+
this._content[0] = 0;
|
379
|
+
this.length = this.max = 0 ; // reset without notifying since add()
|
380
|
+
return this.add(start, length);
|
381
|
+
},
|
382
|
+
|
383
|
+
/**
|
384
|
+
Adds the specified range of indexes to the set. You can also pass another
|
385
|
+
IndexSet to union the contents of the index set with the receiver.
|
386
|
+
|
387
|
+
@param {Number} start index, Range, or another IndexSet
|
388
|
+
@param {Number} length optional length of range.
|
389
|
+
@returns {SC.IndexSet} receiver
|
390
|
+
*/
|
391
|
+
add: function(start, length) {
|
392
|
+
|
393
|
+
if (this.isFrozen) throw SC.FROZEN_ERROR;
|
394
|
+
|
395
|
+
var content, cur, next;
|
396
|
+
|
397
|
+
// normalize IndexSet input
|
398
|
+
if (start && start.isIndexSet) {
|
399
|
+
|
400
|
+
content = start._content;
|
401
|
+
|
402
|
+
if (!content) return this; // nothing to do
|
403
|
+
|
404
|
+
cur = 0 ;
|
405
|
+
next = content[0];
|
406
|
+
while(next !== 0) {
|
407
|
+
if (next>0) this.add(cur, next-cur);
|
408
|
+
cur = next<0 ? 0-next : next;
|
409
|
+
next = content[cur];
|
410
|
+
}
|
411
|
+
return this ;
|
412
|
+
|
413
|
+
} else if (length === undefined) {
|
414
|
+
|
415
|
+
if (start === null || start === undefined) {
|
416
|
+
return this; // nothing to do
|
417
|
+
} else if (typeof start === SC.T_NUMBER) {
|
418
|
+
length = 1 ;
|
419
|
+
} else {
|
420
|
+
length = start.length;
|
421
|
+
start = start.start;
|
422
|
+
}
|
423
|
+
} else if (length === null) length = 1 ;
|
424
|
+
|
425
|
+
// special case - appending to end of set
|
426
|
+
var max = this.get('max'),
|
427
|
+
oldmax = max,
|
428
|
+
delta, value ;
|
429
|
+
|
430
|
+
content = this._content ;
|
431
|
+
|
432
|
+
if (start === max) {
|
433
|
+
|
434
|
+
// if adding to the end and the end is in set, merge.
|
435
|
+
if (start > 0) {
|
436
|
+
cur = this.rangeStartForIndex(start-1);
|
437
|
+
next = content[cur];
|
438
|
+
|
439
|
+
// just extend range at end
|
440
|
+
if (next > 0) {
|
441
|
+
delete content[max]; // no 0
|
442
|
+
content[cur] = max = start + length ;
|
443
|
+
start = cur ;
|
444
|
+
|
445
|
+
// previous range was not in set, just tack onto the end
|
446
|
+
} else {
|
447
|
+
content[max] = max = start + length;
|
448
|
+
}
|
449
|
+
} else {
|
450
|
+
content[start] = max = length;
|
451
|
+
}
|
452
|
+
|
453
|
+
content[max] = 0 ;
|
454
|
+
this.set('max', max);
|
455
|
+
this.set('length', this.length + length) ;
|
456
|
+
length = max - start ;
|
457
|
+
|
458
|
+
} else if (start > max) {
|
459
|
+
content[max] = 0-start; // empty!
|
460
|
+
content[start] = start+length ;
|
461
|
+
content[start+length] = 0; // set end
|
462
|
+
this.set('max', start + length) ;
|
463
|
+
this.set('length', this.length + length) ;
|
464
|
+
|
465
|
+
// affected range goes from starting range to end of content.
|
466
|
+
length = start + length - max ;
|
467
|
+
start = max ;
|
468
|
+
|
469
|
+
// otherwise, merge into existing range
|
470
|
+
} else {
|
471
|
+
|
472
|
+
// find nearest starting range. split or join that range
|
473
|
+
cur = this.rangeStartForIndex(start);
|
474
|
+
next = content[cur];
|
475
|
+
max = start + length ;
|
476
|
+
delta = 0 ;
|
477
|
+
|
478
|
+
// we are right on a boundary and we had a range or were the end, then
|
479
|
+
// go back one more.
|
480
|
+
if ((start>0) && (cur === start) && (next <= 0)) {
|
481
|
+
cur = this.rangeStartForIndex(start-1);
|
482
|
+
next = content[cur] ;
|
483
|
+
}
|
484
|
+
|
485
|
+
// previous range is not in set. splice it here
|
486
|
+
if (next < 0) {
|
487
|
+
content[cur] = 0-start ;
|
488
|
+
|
489
|
+
// if previous range extends beyond this range, splice afterwards also
|
490
|
+
if (Math.abs(next) > max) {
|
491
|
+
content[start] = 0-max;
|
492
|
+
content[max] = next ;
|
493
|
+
} else content[start] = next;
|
494
|
+
|
495
|
+
// previous range is in set. merge the ranges
|
496
|
+
} else {
|
497
|
+
start = cur ;
|
498
|
+
if (next > max) {
|
499
|
+
delta -= next - max ;
|
500
|
+
max = next ;
|
501
|
+
}
|
502
|
+
}
|
503
|
+
|
504
|
+
// at this point there should be clean starting point for the range.
|
505
|
+
// just walk the ranges, adding up the length delta and then removing
|
506
|
+
// the range until we find a range that passes last
|
507
|
+
cur = start;
|
508
|
+
while (cur < max) {
|
509
|
+
// get next boundary. splice if needed - if value is 0, we are at end
|
510
|
+
// just skip to last
|
511
|
+
value = content[cur];
|
512
|
+
if (value === 0) {
|
513
|
+
content[max] = 0;
|
514
|
+
next = max ;
|
515
|
+
delta += max - cur ;
|
516
|
+
} else {
|
517
|
+
next = Math.abs(value);
|
518
|
+
if (next > max) {
|
519
|
+
content[max] = value ;
|
520
|
+
next = max ;
|
521
|
+
}
|
522
|
+
|
523
|
+
// ok, cur range is entirely inside top range.
|
524
|
+
// add to delta if needed
|
525
|
+
if (value < 0) delta += next - cur ;
|
526
|
+
}
|
527
|
+
|
528
|
+
delete content[cur] ; // and remove range
|
529
|
+
cur = next;
|
530
|
+
}
|
531
|
+
|
532
|
+
// cur should always === last now. if the following range is in set,
|
533
|
+
// merge in also - don't adjust delta because these aren't new indexes
|
534
|
+
if ((cur = content[max]) > 0) {
|
535
|
+
delete content[max];
|
536
|
+
max = cur ;
|
537
|
+
}
|
538
|
+
|
539
|
+
// finally set my own range.
|
540
|
+
content[start] = max ;
|
541
|
+
if (max > oldmax) this.set('max', max) ;
|
542
|
+
|
543
|
+
// adjust length
|
544
|
+
this.set('length', this.get('length') + delta);
|
545
|
+
|
546
|
+
// compute hint range
|
547
|
+
length = max - start ;
|
548
|
+
}
|
549
|
+
|
550
|
+
this._hint(start, length);
|
551
|
+
if (delta !== 0) this.enumerableContentDidChange();
|
552
|
+
return this;
|
553
|
+
},
|
554
|
+
|
555
|
+
/**
|
556
|
+
Removes the specified range of indexes from the set
|
557
|
+
|
558
|
+
@param {Number} start index, Range, or IndexSet
|
559
|
+
@param {Number} length optional length of range.
|
560
|
+
@returns {SC.IndexSet} receiver
|
561
|
+
*/
|
562
|
+
remove: function(start, length) {
|
563
|
+
|
564
|
+
if (this.isFrozen) throw SC.FROZEN_ERROR;
|
565
|
+
|
566
|
+
// normalize input
|
567
|
+
if (length === undefined) {
|
568
|
+
if (start === null || start === undefined) {
|
569
|
+
return this; // nothing to do
|
570
|
+
|
571
|
+
} else if (typeof start === SC.T_NUMBER) {
|
572
|
+
length = 1 ;
|
573
|
+
|
574
|
+
// if passed an index set, just add each range in the index set.
|
575
|
+
} else if (start.isIndexSet) {
|
576
|
+
start.forEachRange(this.remove, this);
|
577
|
+
return this;
|
578
|
+
|
579
|
+
} else {
|
580
|
+
length = start.length;
|
581
|
+
start = start.start;
|
582
|
+
}
|
583
|
+
}
|
584
|
+
|
585
|
+
// special case - appending to end of set
|
586
|
+
var max = this.get('max'),
|
587
|
+
oldmax = max,
|
588
|
+
content = this._content,
|
589
|
+
cur, next, delta, value, last ;
|
590
|
+
|
591
|
+
// if we're past the end, do nothing.
|
592
|
+
if (start >= max) return this;
|
593
|
+
|
594
|
+
// find nearest starting range. split or join that range
|
595
|
+
cur = this.rangeStartForIndex(start);
|
596
|
+
next = content[cur];
|
597
|
+
last = start + length ;
|
598
|
+
delta = 0 ;
|
599
|
+
|
600
|
+
// we are right on a boundary and we had a range or were the end, then
|
601
|
+
// go back one more.
|
602
|
+
if ((start>0) && (cur === start) && (next > 0)) {
|
603
|
+
cur = this.rangeStartForIndex(start-1);
|
604
|
+
next = content[cur] ;
|
605
|
+
}
|
606
|
+
|
607
|
+
// previous range is in set. splice it here
|
608
|
+
if (next > 0) {
|
609
|
+
content[cur] = start ;
|
610
|
+
|
611
|
+
// if previous range extends beyond this range, splice afterwards also
|
612
|
+
if (next > last) {
|
613
|
+
content[start] = last;
|
614
|
+
content[last] = next ;
|
615
|
+
} else content[start] = next;
|
616
|
+
|
617
|
+
// previous range is not in set. merge the ranges
|
618
|
+
} else {
|
619
|
+
start = cur ;
|
620
|
+
next = Math.abs(next);
|
621
|
+
if (next > last) {
|
622
|
+
last = next ;
|
623
|
+
}
|
624
|
+
}
|
625
|
+
|
626
|
+
// at this point there should be clean starting point for the range.
|
627
|
+
// just walk the ranges, adding up the length delta and then removing
|
628
|
+
// the range until we find a range that passes last
|
629
|
+
cur = start;
|
630
|
+
while (cur < last) {
|
631
|
+
// get next boundary. splice if needed - if value is 0, we are at end
|
632
|
+
// just skip to last
|
633
|
+
value = content[cur];
|
634
|
+
if (value === 0) {
|
635
|
+
content[last] = 0;
|
636
|
+
next = last ;
|
637
|
+
|
638
|
+
} else {
|
639
|
+
next = Math.abs(value);
|
640
|
+
if (next > last) {
|
641
|
+
content[last] = value ;
|
642
|
+
next = last ;
|
643
|
+
}
|
644
|
+
|
645
|
+
// ok, cur range is entirely inside top range.
|
646
|
+
// add to delta if needed
|
647
|
+
if (value > 0) delta += next - cur ;
|
648
|
+
}
|
649
|
+
|
650
|
+
delete content[cur] ; // and remove range
|
651
|
+
cur = next;
|
652
|
+
}
|
653
|
+
|
654
|
+
// cur should always === last now. if the following range is not in set,
|
655
|
+
// merge in also - don't adjust delta because these aren't new indexes
|
656
|
+
if ((cur = content[last]) < 0) {
|
657
|
+
delete content[last];
|
658
|
+
last = Math.abs(cur) ;
|
659
|
+
}
|
660
|
+
|
661
|
+
// set my own range - if the next item is 0, then clear it.
|
662
|
+
if (content[last] === 0) {
|
663
|
+
delete content[last];
|
664
|
+
content[start] = 0 ;
|
665
|
+
this.set('max', start); //max has changed
|
666
|
+
|
667
|
+
} else {
|
668
|
+
content[start] = 0-last ;
|
669
|
+
}
|
670
|
+
|
671
|
+
// adjust length
|
672
|
+
this.set('length', this.get('length') - delta);
|
673
|
+
|
674
|
+
// compute hint range
|
675
|
+
length = last - start ;
|
676
|
+
|
677
|
+
this._hint(start, length);
|
678
|
+
if (delta !== 0) this.enumerableContentDidChange();
|
679
|
+
return this;
|
680
|
+
},
|
681
|
+
|
682
|
+
/** @private
|
683
|
+
iterates through a named range, setting hints every HINT_SIZE indexes
|
684
|
+
pointing to the nearest range start. The passed range must start on a
|
685
|
+
range boundary. It can end anywhere.
|
686
|
+
*/
|
687
|
+
_hint: function(start, length, content) {
|
688
|
+
if (content === undefined) content = this._content;
|
689
|
+
|
690
|
+
var skip = SC.IndexSet.HINT_SIZE,
|
691
|
+
next = Math.abs(content[start]), // start of next range
|
692
|
+
loc = start - (start % skip) + skip, // next hint loc
|
693
|
+
lim = start + length ; // stop
|
694
|
+
|
695
|
+
while (loc < lim) {
|
696
|
+
// make sure we are in current rnage
|
697
|
+
while ((next !== 0) && (next <= loc)) {
|
698
|
+
start = next ;
|
699
|
+
next = Math.abs(content[start]) ;
|
700
|
+
}
|
701
|
+
|
702
|
+
// past end
|
703
|
+
if (next === 0) {
|
704
|
+
delete content[loc];
|
705
|
+
|
706
|
+
// do not change if on actual boundary
|
707
|
+
} else if (loc !== start) {
|
708
|
+
content[loc] = start ; // set hint
|
709
|
+
}
|
710
|
+
|
711
|
+
loc += skip;
|
712
|
+
}
|
713
|
+
},
|
714
|
+
|
715
|
+
/**
|
716
|
+
Clears the set
|
717
|
+
*/
|
718
|
+
clear: function() {
|
719
|
+
if (this.isFrozen) throw SC.FROZEN_ERROR;
|
720
|
+
|
721
|
+
var oldlen = this.length;
|
722
|
+
this._content.length=1;
|
723
|
+
this._content[0] = 0;
|
724
|
+
this.set('length', 0).set('max', 0);
|
725
|
+
if (oldlen > 0) this.enumerableContentDidChange();
|
726
|
+
},
|
727
|
+
|
728
|
+
/**
|
729
|
+
Add all the ranges in the passed array.
|
730
|
+
*/
|
731
|
+
addEach: function(objects) {
|
732
|
+
if (this.isFrozen) throw SC.FROZEN_ERROR;
|
733
|
+
|
734
|
+
var idx = objects.get('length') ;
|
735
|
+
if (objects.objectAt) {
|
736
|
+
while(--idx >= 0) this.add(objects.objectAt(idx)) ;
|
737
|
+
} else {
|
738
|
+
while(--idx >= 0) this.add(objects[idx]) ;
|
739
|
+
}
|
740
|
+
return this ;
|
741
|
+
},
|
742
|
+
|
743
|
+
/**
|
744
|
+
Removes all the ranges in the passed array.
|
745
|
+
*/
|
746
|
+
removeEach: function(objects) {
|
747
|
+
if (this.isFrozen) throw SC.FROZEN_ERROR;
|
748
|
+
|
749
|
+
var idx = objects.get('length') ;
|
750
|
+
if (objects.objectAt) {
|
751
|
+
while(--idx >= 0) this.remove(objects.objectAt(idx)) ;
|
752
|
+
} else {
|
753
|
+
while(--idx >= 0) this.remove(objects[idx]) ;
|
754
|
+
}
|
755
|
+
return this ;
|
756
|
+
},
|
757
|
+
|
758
|
+
/**
|
759
|
+
Clones the set into a new set.
|
760
|
+
*/
|
761
|
+
clone: function() {
|
762
|
+
return SC.IndexSet.create(this);
|
763
|
+
},
|
764
|
+
|
765
|
+
/**
|
766
|
+
Returns a string describing the internal range structure. Useful for
|
767
|
+
debugging.
|
768
|
+
|
769
|
+
@returns {String}
|
770
|
+
*/
|
771
|
+
inspect: function() {
|
772
|
+
var content = this._content,
|
773
|
+
len = content.length,
|
774
|
+
idx = 0,
|
775
|
+
ret = [],
|
776
|
+
item;
|
777
|
+
|
778
|
+
for(idx=0;idx<len;idx++) {
|
779
|
+
item = content[idx];
|
780
|
+
if (item !== undefined) ret.push("%@:%@".fmt(idx,item));
|
781
|
+
}
|
782
|
+
return "SC.IndexSet<%@>".fmt(ret.join(' , '));
|
783
|
+
},
|
784
|
+
|
785
|
+
/**
|
786
|
+
Invoke the callback, passing each occuppied range instead of each
|
787
|
+
index. This can be a more efficient way to iterate in some cases. The
|
788
|
+
callback should have the signature:
|
789
|
+
|
790
|
+
{{{
|
791
|
+
callback(start, length, indexSet, source) { ... }
|
792
|
+
}}}
|
793
|
+
|
794
|
+
If you pass a target as a second option, the callback will be called in
|
795
|
+
the target context.
|
796
|
+
|
797
|
+
@param {Function} callback the iterator callback
|
798
|
+
@param {Object} target the target
|
799
|
+
@returns {SC.IndexSet} receiver
|
800
|
+
*/
|
801
|
+
forEachRange: function(callback, target) {
|
802
|
+
var content = this._content,
|
803
|
+
cur = 0,
|
804
|
+
next = content[cur],
|
805
|
+
source = this.source;
|
806
|
+
|
807
|
+
if (target === undefined) target = null ;
|
808
|
+
while (next !== 0) {
|
809
|
+
if (next > 0) callback.call(target, cur, next - cur, this, source);
|
810
|
+
cur = Math.abs(next);
|
811
|
+
next = content[cur];
|
812
|
+
}
|
813
|
+
|
814
|
+
return this ;
|
815
|
+
},
|
816
|
+
|
817
|
+
/**
|
818
|
+
Invokes the callback for each index within the passed start/length range.
|
819
|
+
Otherwise works just like regular forEach().
|
820
|
+
|
821
|
+
@param {Number} start starting index
|
822
|
+
@param {Number} length length of range
|
823
|
+
@param {Function} callback
|
824
|
+
@param {Object} target
|
825
|
+
@returns {SC.IndexSet} receiver
|
826
|
+
*/
|
827
|
+
forEachIn: function(start, length, callback, target) {
|
828
|
+
var content = this._content,
|
829
|
+
cur = 0,
|
830
|
+
idx = 0,
|
831
|
+
lim = start + length,
|
832
|
+
source = this.source,
|
833
|
+
next = content[cur];
|
834
|
+
|
835
|
+
if (target === undefined) target = null ;
|
836
|
+
while (next !== 0) {
|
837
|
+
if (cur < start) cur = start ; // skip forward
|
838
|
+
while((cur < next) && (cur < lim)) {
|
839
|
+
callback.call(target, cur++, idx++, this, source);
|
840
|
+
}
|
841
|
+
|
842
|
+
if (cur >= lim) {
|
843
|
+
cur = next = 0 ;
|
844
|
+
} else {
|
845
|
+
cur = Math.abs(next);
|
846
|
+
next = content[cur];
|
847
|
+
}
|
848
|
+
}
|
849
|
+
return this ;
|
850
|
+
},
|
851
|
+
|
852
|
+
/**
|
853
|
+
Total number of indexes within the specified range.
|
854
|
+
|
855
|
+
@param {Number|SC.IndexSet} start index, range object or IndexSet
|
856
|
+
@param {Number} length optional range length
|
857
|
+
@returns {Number} count of indexes
|
858
|
+
*/
|
859
|
+
lengthIn: function(start, length) {
|
860
|
+
|
861
|
+
var ret = 0 ;
|
862
|
+
|
863
|
+
// normalize input
|
864
|
+
if (length === undefined) {
|
865
|
+
if (start === null || start === undefined) {
|
866
|
+
return 0; // nothing to do
|
867
|
+
|
868
|
+
} else if (typeof start === SC.T_NUMBER) {
|
869
|
+
length = 1 ;
|
870
|
+
|
871
|
+
// if passed an index set, just add each range in the index set.
|
872
|
+
} else if (start.isIndexSet) {
|
873
|
+
start.forEachRange(function(start, length) {
|
874
|
+
ret += this.lengthIn(start, length);
|
875
|
+
}, this);
|
876
|
+
return ret;
|
877
|
+
|
878
|
+
} else {
|
879
|
+
length = start.length;
|
880
|
+
start = start.start;
|
881
|
+
}
|
882
|
+
}
|
883
|
+
|
884
|
+
// fast path
|
885
|
+
if (this.get('length') === 0) return 0;
|
886
|
+
|
887
|
+
var content = this._content,
|
888
|
+
cur = 0,
|
889
|
+
next = content[cur],
|
890
|
+
lim = start + length ;
|
891
|
+
|
892
|
+
while (cur<lim && next !== 0) {
|
893
|
+
if (next>0) {
|
894
|
+
ret += (next>lim) ? lim-cur : next-cur;
|
895
|
+
}
|
896
|
+
cur = Math.abs(next);
|
897
|
+
next = content[cur];
|
898
|
+
}
|
899
|
+
|
900
|
+
return ret ;
|
901
|
+
},
|
902
|
+
|
903
|
+
// ..........................................................
|
904
|
+
// OBJECT API
|
905
|
+
//
|
906
|
+
|
907
|
+
/**
|
908
|
+
Optionally set the source property on an index set and then you can
|
909
|
+
iterate over the actual object values referenced by the index set. See
|
910
|
+
indexOf(), lastIndexOf(), forEachObject(), addObject() and removeObject().
|
911
|
+
*/
|
912
|
+
source: null,
|
913
|
+
|
914
|
+
/**
|
915
|
+
Returns the first index in the set that matches the passed object. You
|
916
|
+
must have a source property on the set for this to work.
|
917
|
+
|
918
|
+
@param {Object} object the object to check
|
919
|
+
@param {Number} startAt optional starting point
|
920
|
+
@returns {Number} found index or -1 if not in set
|
921
|
+
*/
|
922
|
+
indexOf: function(object, startAt) {
|
923
|
+
var source = this.source;
|
924
|
+
if (!source) throw "%@.indexOf() requires source".fmt(this);
|
925
|
+
|
926
|
+
var len = source.get('length'),
|
927
|
+
|
928
|
+
// start with the first index in the set
|
929
|
+
content = this._content,
|
930
|
+
cur = content[0]<0 ? Math.abs(content[0]) : 0,
|
931
|
+
idx ;
|
932
|
+
|
933
|
+
while(cur>=0 && cur<len) {
|
934
|
+
idx = source.indexOf(object, cur);
|
935
|
+
if (idx<0) return -1 ; // not found in source
|
936
|
+
if (this.contains(idx)) return idx; // found in source and in set.
|
937
|
+
cur = idx+1;
|
938
|
+
}
|
939
|
+
|
940
|
+
return -1; // not found
|
941
|
+
},
|
942
|
+
|
943
|
+
/**
|
944
|
+
Returns the last index in the set that matches the passed object. You
|
945
|
+
must have a source property on the set for this to work.
|
946
|
+
|
947
|
+
@param {Object} object the object to check
|
948
|
+
@param {Number} startAt optional starting point
|
949
|
+
@returns {Number} found index or -1 if not in set
|
950
|
+
*/
|
951
|
+
lastIndexOf: function(object, startAt) {
|
952
|
+
var source = this.source;
|
953
|
+
if (!source) throw "%@.lastIndexOf() requires source".fmt(this);
|
954
|
+
|
955
|
+
// start with the last index in the set
|
956
|
+
var len = source.get('length'),
|
957
|
+
cur = this.max-1,
|
958
|
+
idx ;
|
959
|
+
|
960
|
+
if (cur >= len) cur = len-1;
|
961
|
+
while (cur>=0) {
|
962
|
+
idx = source.lastIndexOf(object, cur);
|
963
|
+
if (idx<0) return -1 ; // not found in source
|
964
|
+
if (this.contains(idx)) return idx; // found in source and in set.
|
965
|
+
cur = idx+1;
|
966
|
+
}
|
967
|
+
|
968
|
+
return -1; // not found
|
969
|
+
},
|
970
|
+
|
971
|
+
/**
|
972
|
+
Iterates through the objects at each index location in the set. You must
|
973
|
+
have a source property on the set for this to work. The callback you pass
|
974
|
+
will be invoked for each object in the set with the following signature:
|
975
|
+
|
976
|
+
{{{
|
977
|
+
function callback(object, index, source, indexSet) { ... }
|
978
|
+
}}}
|
979
|
+
|
980
|
+
If you pass a target, it will be used when the callback is called.
|
981
|
+
|
982
|
+
@param {Function} callback function to invoke.
|
983
|
+
@param {Object} target optional content. otherwise uses window
|
984
|
+
@returns {SC.IndexSet} receiver
|
985
|
+
*/
|
986
|
+
forEachObject: function(callback, target) {
|
987
|
+
var source = this.source;
|
988
|
+
if (!source) throw "%@.forEachObject() requires source".fmt(this);
|
989
|
+
|
990
|
+
var content = this._content,
|
991
|
+
cur = 0,
|
992
|
+
idx = 0,
|
993
|
+
next = content[cur];
|
994
|
+
|
995
|
+
if (target === undefined) target = null ;
|
996
|
+
while (next !== 0) {
|
997
|
+
|
998
|
+
while(cur < next) {
|
999
|
+
callback.call(target, source.objectAt(cur), cur, source, this);
|
1000
|
+
cur++;
|
1001
|
+
}
|
1002
|
+
|
1003
|
+
cur = Math.abs(next);
|
1004
|
+
next = content[cur];
|
1005
|
+
}
|
1006
|
+
return this ;
|
1007
|
+
},
|
1008
|
+
|
1009
|
+
/**
|
1010
|
+
Adds all indexes where the object appears to the set. If firstOnly is
|
1011
|
+
passed, then it will find only the first index and add it. If you know
|
1012
|
+
the object only appears in the source array one time, firstOnly may make
|
1013
|
+
this method faster.
|
1014
|
+
|
1015
|
+
Requires source to work.
|
1016
|
+
|
1017
|
+
@param {Object} object the object to add
|
1018
|
+
@returns {SC.IndexSet} receiver
|
1019
|
+
*/
|
1020
|
+
addObject: function(object, firstOnly) {
|
1021
|
+
var source = this.source;
|
1022
|
+
if (!source) throw "%@.addObject() requires source".fmt(this);
|
1023
|
+
|
1024
|
+
var len = source.get('length'),
|
1025
|
+
cur = 0, idx;
|
1026
|
+
|
1027
|
+
while(cur>=0 && cur<len) {
|
1028
|
+
idx = source.indexOf(object, cur);
|
1029
|
+
if (idx >= 0) {
|
1030
|
+
this.add(idx);
|
1031
|
+
if (firstOnly) return this ;
|
1032
|
+
cur = idx++;
|
1033
|
+
} else return this ;
|
1034
|
+
}
|
1035
|
+
return this ;
|
1036
|
+
},
|
1037
|
+
|
1038
|
+
/**
|
1039
|
+
Adds any indexes matching the passed objects. If firstOnly is passed,
|
1040
|
+
then only finds the first index for each object.
|
1041
|
+
|
1042
|
+
@param {SC.Enumerable} objects the objects to add
|
1043
|
+
@returns {SC.IndexSet} receiver
|
1044
|
+
*/
|
1045
|
+
addObjects: function(objects, firstOnly) {
|
1046
|
+
objects.forEach(function(object) {
|
1047
|
+
this.addObject(object, firstOnly);
|
1048
|
+
}, this);
|
1049
|
+
return this;
|
1050
|
+
},
|
1051
|
+
|
1052
|
+
/**
|
1053
|
+
Removes all indexes where the object appears to the set. If firstOnly is
|
1054
|
+
passed, then it will find only the first index and add it. If you know
|
1055
|
+
the object only appears in the source array one time, firstOnly may make
|
1056
|
+
this method faster.
|
1057
|
+
|
1058
|
+
Requires source to work.
|
1059
|
+
|
1060
|
+
@param {Object} object the object to add
|
1061
|
+
@returns {SC.IndexSet} receiver
|
1062
|
+
*/
|
1063
|
+
removeObject: function(object, firstOnly) {
|
1064
|
+
var source = this.source;
|
1065
|
+
if (!source) throw "%@.removeObject() requires source".fmt(this);
|
1066
|
+
|
1067
|
+
var len = source.get('length'),
|
1068
|
+
cur = 0, idx;
|
1069
|
+
|
1070
|
+
while(cur>=0 && cur<len) {
|
1071
|
+
idx = source.indexOf(object, cur);
|
1072
|
+
if (idx >= 0) {
|
1073
|
+
this.remove(idx);
|
1074
|
+
if (firstOnly) return this ;
|
1075
|
+
cur = idx+1;
|
1076
|
+
} else return this ;
|
1077
|
+
}
|
1078
|
+
return this ;
|
1079
|
+
},
|
1080
|
+
|
1081
|
+
/**
|
1082
|
+
Removes any indexes matching the passed objects. If firstOnly is passed,
|
1083
|
+
then only finds the first index for each object.
|
1084
|
+
|
1085
|
+
@param {SC.Enumerable} objects the objects to add
|
1086
|
+
@returns {SC.IndexSet} receiver
|
1087
|
+
*/
|
1088
|
+
removeObjects: function(objects, firstOnly) {
|
1089
|
+
objects.forEach(function(object) {
|
1090
|
+
this.removeObject(object, firstOnly);
|
1091
|
+
}, this);
|
1092
|
+
return this;
|
1093
|
+
},
|
1094
|
+
|
1095
|
+
|
1096
|
+
// .......................................
|
1097
|
+
// PRIVATE
|
1098
|
+
//
|
1099
|
+
|
1100
|
+
/**
|
1101
|
+
Usually observing notifications from IndexSet are not useful, so
|
1102
|
+
supress them by default.
|
1103
|
+
*/
|
1104
|
+
LOG_OBSERVING: NO,
|
1105
|
+
|
1106
|
+
/** @private - optimized call to forEach() */
|
1107
|
+
forEach: function(callback, target) {
|
1108
|
+
var content = this._content,
|
1109
|
+
cur = 0,
|
1110
|
+
idx = 0,
|
1111
|
+
source = this.source,
|
1112
|
+
next = content[cur];
|
1113
|
+
|
1114
|
+
if (target === undefined) target = null ;
|
1115
|
+
while (next !== 0) {
|
1116
|
+
while(cur < next) {
|
1117
|
+
callback.call(target, cur++, idx++, this, source);
|
1118
|
+
}
|
1119
|
+
cur = Math.abs(next);
|
1120
|
+
next = content[cur];
|
1121
|
+
}
|
1122
|
+
return this ;
|
1123
|
+
},
|
1124
|
+
|
1125
|
+
/** @private - support iterators */
|
1126
|
+
nextObject: function(ignore, idx, context) {
|
1127
|
+
var content = this._content,
|
1128
|
+
next = context.next,
|
1129
|
+
max = this.get('max'); // next boundary
|
1130
|
+
|
1131
|
+
// seed.
|
1132
|
+
if (idx === null) {
|
1133
|
+
idx = next = 0 ;
|
1134
|
+
|
1135
|
+
} else if (idx >= max) {
|
1136
|
+
delete context.next; // cleanup context
|
1137
|
+
return null ; // nothing left to do
|
1138
|
+
|
1139
|
+
} else idx++; // look on next index
|
1140
|
+
|
1141
|
+
// look for next non-empty range if needed.
|
1142
|
+
if (idx === next) {
|
1143
|
+
do {
|
1144
|
+
idx = Math.abs(next);
|
1145
|
+
next = content[idx];
|
1146
|
+
} while(next < 0);
|
1147
|
+
context.next = next;
|
1148
|
+
}
|
1149
|
+
|
1150
|
+
return idx;
|
1151
|
+
},
|
1152
|
+
|
1153
|
+
toString: function() {
|
1154
|
+
var str = [];
|
1155
|
+
this.forEachRange(function(start, length) {
|
1156
|
+
str.push(length === 1 ? start : "%@..%@".fmt(start, start + length - 1));
|
1157
|
+
}, this);
|
1158
|
+
return "SC.IndexSet<%@>".fmt(str.join(',')) ;
|
1159
|
+
},
|
1160
|
+
|
1161
|
+
max: 0
|
1162
|
+
|
1163
|
+
}) ;
|
1164
|
+
|
1165
|
+
SC.IndexSet.slice = SC.IndexSet.copy = SC.IndexSet.clone ;
|
1166
|
+
SC.IndexSet.EMPTY = SC.IndexSet.create().freeze();
|