sproutcore 1.7.1.beta → 1.8.0
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/CHANGELOG +44 -0
- data/README.rdoc +20 -20
- data/VERSION.yml +3 -3
- data/lib/Buildfile +1 -1
- data/lib/buildtasks/build.rake +5 -0
- data/lib/buildtasks/manifest.rake +19 -1
- data/lib/frameworks/sproutcore/Buildfile +19 -17
- data/lib/frameworks/sproutcore/CHANGELOG.md +163 -29
- data/lib/frameworks/sproutcore/README.md +29 -8
- data/lib/frameworks/sproutcore/apps/statechart_routing/Buildfile +12 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/controllers/login_controller.js +11 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/controllers/main_controller.js +7 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/controllers/statechart_controller.js +17 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/core.js +25 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/main.js +15 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/resources/_theme.css +18 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/resources/bar_page.js +14 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/resources/foo_page.js +14 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/resources/loading.rhtml +9 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/resources/login_page.js +61 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/resources/main_page.js +46 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/statechart.js +76 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/theme.js +27 -0
- data/lib/frameworks/sproutcore/apps/tests/controllers/targets.js +1 -1
- data/lib/frameworks/sproutcore/apps/tests/states/no_targets.js +1 -1
- data/lib/frameworks/sproutcore/apps/tests/states/ready_detail.js +1 -1
- data/lib/frameworks/sproutcore/apps/tests/states/ready_empty.js +1 -1
- data/lib/frameworks/sproutcore/apps/tests/states/ready_list.js +1 -1
- data/lib/frameworks/sproutcore/apps/tests/states/ready_no_tests.js +1 -1
- data/lib/frameworks/sproutcore/apps/welcome/controllers/targets.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/ajax/system/request.js +14 -1
- data/lib/frameworks/sproutcore/frameworks/ajax/system/response.js +15 -15
- data/lib/frameworks/sproutcore/frameworks/ajax/tests/system/request.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/animation/core.js +8 -5
- data/lib/frameworks/sproutcore/frameworks/bootstrap/system/browser.js +302 -70
- data/lib/frameworks/sproutcore/frameworks/bootstrap/system/loader.js +19 -14
- data/lib/frameworks/sproutcore/frameworks/bootstrap/tests/system/browser.js +471 -149
- data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/array.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/object.js +42 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/run_loop.js +3 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/string.js +7 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/action_support.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/delegate_support.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/responder_context.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/selection_support.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/body_overflow.js +63 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/keyboard.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/layout.js +37 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/main.js +28 -6
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/pane.js +10 -3
- data/lib/frameworks/sproutcore/frameworks/core_foundation/protocols/sparse_array_delegate.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/browser.js +66 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/builder.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/cursor.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/event.js +58 -57
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/locale.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/locale.js.orig +445 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/platform.js +51 -31
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/ready.js +5 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/render_context.js +53 -69
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/responder.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/root_responder.js +98 -72
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/string.js +37 -3
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/timer.js +7 -4
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/array_case.js +21 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/object/content_destroyed.js +7 -7
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/string.js +23 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/browser.js +66 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/event.js +22 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/locale.js +11 -11
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/end.js +4 -4
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/escape_html.js +41 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/helpers_className.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/helpers_style.js +8 -8
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/update.js +17 -16
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/selection_set/remove.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/build_children.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/class_name_bindings_test.js +15 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/createChildViews.js +5 -5
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +50 -30
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/acceleration.js +46 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/animation.js +1 -43
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/keyboard.js +8 -34
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout.js +3 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout_style.js +10 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/manipulation.js +6 -5
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/theming.js +22 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/data_sources/data_source.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/mixins/relationship_support.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/models/child_attribute.js +0 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/models/children_attribute.js +35 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +46 -19
- data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +23 -9
- data/lib/frameworks/sproutcore/frameworks/datastore/models/single_attribute.js +2 -3
- data/lib/frameworks/sproutcore/frameworks/datastore/system/many_array.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/system/query.js +294 -302
- data/lib/frameworks/sproutcore/frameworks/datastore/system/query.js.orig +1531 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/system/record_array.js +4 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +14 -11
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/many_array.js +63 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/many_attribute.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record.js +4 -4
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array.js +50 -10
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array_complex.js +4 -4
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_complex.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/destroy.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/refresh.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/single_attribute.js +114 -67
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChangesFromNestedStore.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readDataHash.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/compare.js +54 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/evaluation.js +29 -9
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/parse.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/core_methods.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/flush.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/cancelRecord.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitChangesFromNestedStore.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitRecord.js +37 -45
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/find.js +127 -127
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/pushChanges.js +16 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/pushRelationships.js +42 -4
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/readDataHash.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/system/datetime.js +13 -7
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/tests/system/datetime.js +8 -0
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/localized/resources/strings.js +2 -1
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/localized/system/datetime.js +1 -0
- data/lib/frameworks/sproutcore/frameworks/debug/core.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/core.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_row_delegate.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_view_delegate.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/alert.js +1 -4
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/menu.js +19 -6
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/modal.js +30 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/palette.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/panel.js +24 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/picker.js +121 -28
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/sheet.js +15 -15
- data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drag_data_source.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drop_target.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/protocols/responder.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/button.js +39 -15
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/collection.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/disclosure.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/image_button.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/panel.js +14 -6
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/popup_button.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/progress.js +11 -11
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segment.js +4 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segmented.js +1 -51
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/slider.js +11 -16
- data/lib/frameworks/sproutcore/frameworks/desktop/resources/images/icons/sc-icon-error-48.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/resources/slider.css +0 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/system/drag.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/system/undo_manager.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +9 -9
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/content.js +11 -11
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/ui.js +2 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/reload.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/date_field/ui.js +107 -81
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowDelegate.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +68 -60
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/radio/methods.js +57 -12
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/integration.js +21 -19
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroller.js +5 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select/ui.js +32 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/split/methods.js +12 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/stacked/ui_comments.js +12 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/tab/methods.js +0 -8
- data/lib/frameworks/sproutcore/frameworks/desktop/views/button.js +77 -132
- data/lib/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +5 -6
- data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +16 -15
- data/lib/frameworks/sproutcore/frameworks/desktop/views/date_field.js +52 -52
- data/lib/frameworks/sproutcore/frameworks/desktop/views/disclosure.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/views/grid.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/views/list.js +147 -147
- data/lib/frameworks/sproutcore/frameworks/desktop/views/list_item.js +11 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_scroll.js +5 -5
- data/lib/frameworks/sproutcore/frameworks/desktop/views/popup_button.js +22 -12
- data/lib/frameworks/sproutcore/frameworks/desktop/views/radio.js +13 -7
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scene.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll.js +462 -441
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scroller.js +48 -62
- data/lib/frameworks/sproutcore/frameworks/desktop/views/segment.js +22 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/views/segmented.js +150 -32
- data/lib/frameworks/sproutcore/frameworks/desktop/views/select.js +104 -45
- data/lib/frameworks/sproutcore/frameworks/desktop/views/select_button.js +42 -20
- data/lib/frameworks/sproutcore/frameworks/desktop/views/slider.js +24 -24
- data/lib/frameworks/sproutcore/frameworks/desktop/views/split.js +148 -154
- data/lib/frameworks/sproutcore/frameworks/desktop/views/stacked.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/views/static_content.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/views/tab.js +8 -7
- data/lib/frameworks/sproutcore/frameworks/desktop/views/web.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/experimental/Buildfile +2 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/files.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/library.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/targets.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/view_configs.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/mixins/drop_down.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/states/ready.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/views/plist_item.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/views/web.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/controllers/page_design.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/css/css_style_sheet.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/designers/object_designer.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/designers/view_designer.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/mixins/snap_lines.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/views/designer_drop_target.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/views/drawing.js +21 -21
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/views/page_item_view.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/views/form.js +59 -53
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/menu/views/menu/scroll.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/tests/models/polymorphism/simple.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/core_scroll.js +6 -6
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/desktop/scroll.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/touch/scroll.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/ext/menu.js +14 -10
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/ext/menu_item.js +17 -6
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/views/popup_button.js +38 -14
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/views/select.js +5 -13
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/mixins/split_child.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/mixins/split_thumb.js +5 -3
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/children.js +19 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/methods.js +20 -2
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/split_thumb.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/views/split.js +35 -12
- data/lib/frameworks/sproutcore/frameworks/formatters/README +6 -0
- data/lib/frameworks/sproutcore/frameworks/formatters/english.lproj/strings.js +174 -0
- data/lib/frameworks/sproutcore/frameworks/formatters/formatters/date_formatter.js +351 -0
- data/lib/frameworks/sproutcore/frameworks/formatters/tests/date_formatter.js +517 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/core.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_resize.js +345 -138
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/button.js +5 -3
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/content_value_support.js +176 -42
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/editable.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/flowed_layout.js +137 -105
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/gestureable.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editable.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editor.js +16 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/static_layout.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/validatable.js +47 -47
- data/lib/frameworks/sproutcore/frameworks/foundation/private/tree_item_observer.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/helpers/sizing.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/label.js +28 -6
- data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/render_delegate.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/resources/benchmark.css +0 -5
- data/lib/frameworks/sproutcore/frameworks/foundation/resources/bootstrap.rhtml +34 -19
- data/lib/frameworks/sproutcore/frameworks/foundation/resources/button_view.css +0 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/resources/label.css +1 -5
- data/lib/frameworks/sproutcore/frameworks/foundation/resources/text_field.css +8 -9
- data/lib/frameworks/sproutcore/frameworks/foundation/system/benchmark.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/system/module.js +179 -47
- data/lib/frameworks/sproutcore/frameworks/foundation/system/task_queue.js +34 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/system/text_selection.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/system/user_defaults.js +26 -12
- data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/misc.js +7 -7
- data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/string_measurement.js +12 -4
- data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/string_metric_optimization.js +202 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/content_value_support/content.js +77 -8
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/flowed_layout/tests.js +1 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editable/beginEditing.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editable/commitEditing.js +4 -3
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editable/discardEditing.js +4 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editor/beginEditing.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editor/commitEditing.js +4 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editor/discardEditing.js +4 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/utils/pointInElement.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/label/ui.js +0 -8
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +163 -149
- data/lib/frameworks/sproutcore/frameworks/foundation/validators/credit_card.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/validators/date.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/validators/date_time.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/validators/password.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/validators/validator.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/foundation/views/field.js +16 -43
- data/lib/frameworks/sproutcore/frameworks/foundation/views/image.js +4 -3
- data/lib/frameworks/sproutcore/frameworks/foundation/views/inline_text_field.js +67 -54
- data/lib/frameworks/sproutcore/frameworks/foundation/views/label.js +49 -38
- data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +285 -242
- data/lib/frameworks/sproutcore/frameworks/jquery/jquery-buffer.js +13 -13
- data/lib/frameworks/sproutcore/frameworks/jquery/jquery-buffered.js +19 -22
- data/lib/frameworks/sproutcore/frameworks/jquery/jquery-sc.js +9 -3
- data/lib/frameworks/sproutcore/frameworks/jquery/jquery.js +231 -186
- data/lib/frameworks/sproutcore/frameworks/media/views/audio.js +145 -143
- data/lib/frameworks/sproutcore/frameworks/media/views/video.js +156 -154
- data/lib/frameworks/sproutcore/frameworks/qunit/qunit/qunit.js +5 -5
- data/lib/frameworks/sproutcore/frameworks/routing/system/routes.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/routing/system/routes.js.orig +540 -0
- data/lib/frameworks/sproutcore/frameworks/routing/tests/system/routes.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/core.js +15 -8
- data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/base.js +5 -5
- data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/replace.js +12 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/ext/function.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/array.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/copyable.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +7 -7
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +98 -32
- data/lib/frameworks/sproutcore/frameworks/runtime/private/chain_observer.js +7 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/private/observer_queue.js +14 -3
- data/lib/frameworks/sproutcore/frameworks/runtime/private/observer_set.js +98 -13
- data/lib/frameworks/sproutcore/frameworks/runtime/system/binding.js +8 -14
- data/lib/frameworks/sproutcore/frameworks/runtime/system/enumerator.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/system/error.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/system/index_set.js +23 -6
- data/lib/frameworks/sproutcore/frameworks/runtime/system/logger.js +69 -18
- data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +57 -31
- data/lib/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +189 -14
- data/lib/frameworks/sproutcore/frameworks/runtime/system/string.js +82 -22
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/chained.js +20 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/observable.js +125 -4
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/private/observer_queue.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/binding.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/rangeStartForIndex.js +37 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/remove.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/logger.js +16 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/run_loop.js +75 -4
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/string.js +41 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/mixins/statechart_delegate.js +113 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/private/state_path_matcher.js +312 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/system/async.js +18 -22
- data/lib/frameworks/sproutcore/frameworks/statechart/system/state.js +508 -131
- data/lib/frameworks/sproutcore/frameworks/statechart/system/state_route_handler_context.js +78 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/system/statechart.js +265 -44
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/basic/with_concurrent_states.js +16 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/responder/responder_chain.js +11 -3
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/private/state_path_matcher.js +116 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/add_substate.js +108 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/find_first_relative_current_state/with_concurrent.js +179 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/find_first_relative_current_state/without_concurrent.js +74 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/get_state.js +141 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/get_substate.js +340 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/route_triggered.js +161 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/try_to_handle_event.js +288 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/history_state/standard/without_concurrent_states/context.js +5 -33
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/routing/with_concurrent_states/basic.js +213 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/routing/without_concurrent_states/basic.js +212 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/standard/without_concurrent_states/core.js +8 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/{state/namespacing.js → statechart/methods/get_state.js} +3 -41
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/statechart/{invoke_state_method.js → methods/invoke_state_method.js} +1 -1
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/{event_handling/advanced → statechart}/respond_to_event.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/system/state_route_handler_context/methods/retry.js +64 -0
- data/lib/frameworks/sproutcore/frameworks/table/core.js +2 -0
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/controls/button.js +0 -1
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/ext/handlebars.js +29 -5
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/ext/handlebars/bind.js +4 -3
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/ext/handlebars/collection.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/ext/handlebars/localization.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/ext/handlebars/view.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{handlebars → template_view}/handlebars.js +493 -357
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/mixins/template_helpers/checkbox_support.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/mixins/template_helpers/text_field_support.js +13 -2
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/panes/template.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/controls/button.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/mixins/template_helpers/checkbox_support.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/mixins/template_helpers/text_field_support.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/panes/template.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/views/template/collection.js +39 -14
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/views/template/core.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/views/template/handlebars.js +57 -6
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/views/bindable_span.js +21 -6
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/views/template.js +9 -3
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/views/template_collection.js +55 -26
- data/lib/frameworks/sproutcore/frameworks/testing/system/equiv.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/testing/system/plan.js +122 -122
- data/lib/frameworks/sproutcore/frameworks/testing/system/runner.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/testing/system/suite.js +4 -4
- data/lib/frameworks/sproutcore/frameworks/yuireset/resources/base.css +1 -1
- data/lib/frameworks/sproutcore/frameworks/yuireset/resources/reset.css +0 -1
- data/lib/frameworks/sproutcore/frameworks/yuireset/resources/view.css +4 -4
- data/lib/frameworks/sproutcore/lib/index.rhtml +55 -32
- data/lib/frameworks/sproutcore/license.js +2 -4
- data/lib/frameworks/sproutcore/themes/ace/resources/body.css +5 -1
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/18px/button.css +2 -2
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/button.css +21 -13
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/button.css +17 -10
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/44px/button.css +4 -3
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/button.css +20 -12
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/button.css +16 -8
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/jumbo/button.css +17 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/small/button.css +17 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/disclosure/ace/disclosure.css +2 -2
- data/lib/frameworks/sproutcore/themes/ace/resources/master-detail/master-detail.css +2 -2
- data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover.css +5 -3
- data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/core.css +1 -1
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/toolbar.css +1 -1
- data/lib/gen/app/USAGE +17 -4
- data/lib/gen/language/Buildfile +4 -4
- data/lib/gen/language/USAGE +4 -4
- data/lib/gen/page/templates/pages/@target_name@/Buildfile +7 -7
- data/lib/gen/{html_app → statechart_app}/Buildfile +0 -0
- data/lib/gen/{html_app → statechart_app}/README +0 -0
- data/lib/gen/statechart_app/USAGE +21 -0
- data/lib/gen/statechart_app/templates/apps/@target_name@/Buildfile +9 -0
- data/lib/gen/statechart_app/templates/apps/@target_name@/core.js +24 -0
- data/lib/gen/statechart_app/templates/apps/@target_name@/main.js +26 -0
- data/lib/gen/statechart_app/templates/apps/@target_name@/resources/_theme.css +18 -0
- data/lib/gen/statechart_app/templates/apps/@target_name@/resources/loading.rhtml +9 -0
- data/lib/gen/statechart_app/templates/apps/@target_name@/resources/main_page.js +21 -0
- data/lib/gen/statechart_app/templates/apps/@target_name@/statechart.js +8 -0
- data/lib/gen/statechart_app/templates/apps/@target_name@/states/ready_state.js +12 -0
- data/lib/gen/statechart_app/templates/apps/@target_name@/theme.js +24 -0
- data/lib/sproutcore/builders.rb +1 -0
- data/lib/sproutcore/builders/base.rb +19 -1
- data/lib/sproutcore/builders/chance_file.rb +6 -1
- data/lib/sproutcore/builders/handlebars.rb +1 -9
- data/lib/sproutcore/builders/javascript.rb +1 -10
- data/lib/sproutcore/builders/json.rb +25 -0
- data/lib/sproutcore/builders/less.rb +1 -1
- data/lib/sproutcore/builders/sass.rb +1 -1
- data/lib/sproutcore/builders/stylesheet.rb +1 -9
- data/lib/sproutcore/helpers/html5_manifest.rb +1 -1
- data/lib/sproutcore/helpers/static_helper.rb +42 -0
- data/lib/sproutcore/rack/proxy.rb +21 -3
- data/lib/sproutcore/rack/service.rb +3 -2
- data/lib/sproutcore/tools.rb +18 -25
- data/lib/sproutcore/tools/gen.rb +10 -3
- data/lib/sproutcore/tools/init.rb +11 -10
- data/spec/buildtasks/manifest/prepare_build_tasks/json_spec.rb +62 -0
- data/spec/fixtures/builder_tests/apps/handlebars_test/Buildfile +1 -1
- data/spec/fixtures/builder_tests/apps/json_test/sc_static.json +2 -0
- data/spec/lib/builders/json_spec.rb +53 -0
- data/sproutcore.gemspec +2 -2
- data/vendor/chance/lib/chance/parser.rb +1 -1
- metadata +222 -177
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/datetime.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/debug/invoke_once_last_debugging.js +0 -259
- data/lib/frameworks/sproutcore/frameworks/documentation/core.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/system/chance.js +0 -69
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/editable/ui.js +0 -44
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/ui.js +0 -64
- data/lib/frameworks/sproutcore/frameworks/mini/license.js +0 -30
- data/lib/gen/html_app/USAGE +0 -15
- data/lib/gen/html_app/templates/apps/@target_name@/@target_name@.js +0 -11
- data/lib/gen/html_app/templates/apps/@target_name@/resources/images/.gitkeep +0 -0
- data/lib/gen/html_app/templates/apps/@target_name@/resources/stylesheets/@target_name@.css +0 -6
- data/lib/gen/html_app/templates/apps/@target_name@/resources/templates/@target_name@.handlebars +0 -1
- data/lib/gen/html_project/Buildfile +0 -45
- data/lib/gen/html_project/INIT +0 -3
- data/lib/gen/html_project/README +0 -1
- data/lib/gen/html_project/USAGE +0 -2
- data/lib/gen/html_project/templates/@filename@/Buildfile +0 -5
- data/lib/gen/html_project/templates/@filename@/README +0 -4
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
// License: Licensed under MIT license (see license.js)
|
|
6
6
|
// ==========================================================================
|
|
7
7
|
|
|
8
|
-
SC.Button
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
if(SC.Button) {
|
|
9
|
+
SC.Button.initMixin = function(){
|
|
10
|
+
throw "SC.Button is deprecated as a mixin and is now a subclass of SC.TemplateView. Subclass SC.ButtonView instead.";
|
|
11
|
+
};
|
|
12
|
+
}
|
|
11
13
|
|
|
@@ -24,7 +24,6 @@
|
|
|
24
24
|
only have primitive values, consider using SC.Control instead.
|
|
25
25
|
*/
|
|
26
26
|
SC.ContentValueSupport = {
|
|
27
|
-
|
|
28
27
|
/**
|
|
29
28
|
Walk like a duck.
|
|
30
29
|
|
|
@@ -35,7 +34,8 @@ SC.ContentValueSupport = {
|
|
|
35
34
|
|
|
36
35
|
/** @private */
|
|
37
36
|
initMixin: function() {
|
|
38
|
-
|
|
37
|
+
// setup content observing if needed.
|
|
38
|
+
this._control_contentKeysDidChange();
|
|
39
39
|
},
|
|
40
40
|
|
|
41
41
|
/**
|
|
@@ -76,6 +76,22 @@ SC.ContentValueSupport = {
|
|
|
76
76
|
@default null
|
|
77
77
|
*/
|
|
78
78
|
content: null,
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
Keys that should be observed on the content object and mapped to values on
|
|
82
|
+
this object. Should be a hash of local keys that point to keys on the content to
|
|
83
|
+
map to local values. For example, the default is {'contentValueKey': 'value'}.
|
|
84
|
+
This means that the value of this.contentValueKey will be observed as a key on
|
|
85
|
+
the content object and its value will be mapped to this.value.
|
|
86
|
+
|
|
87
|
+
@type Hash
|
|
88
|
+
@default null
|
|
89
|
+
*/
|
|
90
|
+
contentKeys: null,
|
|
91
|
+
|
|
92
|
+
_default_contentKeys: {
|
|
93
|
+
contentValueKey: 'value'
|
|
94
|
+
},
|
|
79
95
|
|
|
80
96
|
/**
|
|
81
97
|
The property on the content object that would want to represent the
|
|
@@ -105,9 +121,21 @@ SC.ContentValueSupport = {
|
|
|
105
121
|
@test in content
|
|
106
122
|
*/
|
|
107
123
|
contentPropertyDidChange: function(target, key) {
|
|
108
|
-
|
|
124
|
+
var contentKeys = this.get('contentKeys');
|
|
125
|
+
|
|
126
|
+
if(contentKeys) {
|
|
127
|
+
var contentKey;
|
|
128
|
+
|
|
129
|
+
for(contentKey in contentKeys) {
|
|
130
|
+
if(key === '*' || key === this.getDelegateProperty(contentKey, this, this.get('displayDelegate'), contentKeys)) return this.updatePropertyFromContent(contentKeys[contentKey], key, contentKey, target);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
else {
|
|
135
|
+
return this.updatePropertyFromContent('value', key, 'contentValueKey', target);
|
|
136
|
+
}
|
|
109
137
|
},
|
|
110
|
-
|
|
138
|
+
|
|
111
139
|
/**
|
|
112
140
|
Helper method you can use from your own implementation of
|
|
113
141
|
contentPropertyDidChange(). This method will look up the content key to
|
|
@@ -124,24 +152,24 @@ SC.ContentValueSupport = {
|
|
|
124
152
|
*/
|
|
125
153
|
updatePropertyFromContent: function(prop, key, contentKey, content) {
|
|
126
154
|
var del, v;
|
|
127
|
-
|
|
155
|
+
|
|
128
156
|
if (contentKey === undefined) contentKey = "content"+prop.capitalize()+"Key";
|
|
129
157
|
|
|
130
158
|
// prefer our own definition of contentKey
|
|
131
159
|
if(this[contentKey]) contentKey = this.get(contentKey);
|
|
132
160
|
// if we don't have one defined check the delegate
|
|
133
|
-
else if((del = this.displayDelegate) && (v = del[contentKey])) contentKey = del.get ? del.get(contentKey) : v;
|
|
161
|
+
else if((del = this.get('displayDelegate')) && (v = del[contentKey])) contentKey = del.get ? del.get(contentKey) : v;
|
|
134
162
|
// if we have no key we can't do anything so just short circuit out
|
|
135
163
|
else return this;
|
|
136
|
-
|
|
164
|
+
|
|
137
165
|
// only bother setting value if the observer triggered for the correct key
|
|
138
166
|
if (key === '*' || key === contentKey) {
|
|
139
167
|
if (content === undefined) content = this.get('content');
|
|
140
168
|
|
|
141
169
|
if(content) v = content.get ? content.get(contentKey) : content[contentKey];
|
|
142
170
|
else v = null;
|
|
143
|
-
|
|
144
|
-
this.
|
|
171
|
+
|
|
172
|
+
this.setIfChanged(prop, v) ;
|
|
145
173
|
}
|
|
146
174
|
|
|
147
175
|
return this ;
|
|
@@ -162,66 +190,172 @@ SC.ContentValueSupport = {
|
|
|
162
190
|
|
|
163
191
|
@returns {void}
|
|
164
192
|
*/
|
|
165
|
-
updateContentWithValueObserver: function() {
|
|
166
|
-
var
|
|
167
|
-
this.get('contentValueKey') :
|
|
168
|
-
this.getDelegateProperty('contentValueKey', this.displayDelegate),
|
|
169
|
-
content = this.get('content');
|
|
193
|
+
updateContentWithValueObserver: function(target, key) {
|
|
194
|
+
var reverseContentKeys = this._reverseContentKeys;
|
|
170
195
|
|
|
171
|
-
if
|
|
196
|
+
// if everything changed, iterate through and update them all
|
|
197
|
+
if(!key || key === '*') {
|
|
198
|
+
for(key in reverseContentKeys) {
|
|
199
|
+
this.updateContentWithValueObserver(this, key);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
172
202
|
|
|
173
203
|
// get value -- set on content if changed
|
|
174
|
-
var value = this.get(
|
|
204
|
+
var value = this.get(key);
|
|
205
|
+
|
|
206
|
+
var content = this.get('content'),
|
|
207
|
+
// get the key we should be setting on content, asking displayDelegate if
|
|
208
|
+
// necessary
|
|
209
|
+
contentKey = this.getDelegateProperty(reverseContentKeys[key], this, this.displayDelegate);
|
|
210
|
+
|
|
211
|
+
// do nothing if disabled
|
|
212
|
+
if (!contentKey || !content) return this;
|
|
175
213
|
|
|
176
214
|
if (typeof content.setIfChanged === SC.T_FUNCTION) {
|
|
177
|
-
content.setIfChanged(
|
|
215
|
+
content.setIfChanged(contentKey, value);
|
|
178
216
|
}
|
|
179
217
|
|
|
180
218
|
// avoid re-writing inherited props
|
|
181
|
-
else if (content[
|
|
182
|
-
content[
|
|
219
|
+
else if (content[contentKey] !== value) {
|
|
220
|
+
content[contentKey] = value ;
|
|
183
221
|
}
|
|
184
|
-
}
|
|
185
|
-
|
|
222
|
+
},
|
|
223
|
+
|
|
186
224
|
/** @private
|
|
187
225
|
This should be null so that if content is also null, the
|
|
188
226
|
_contentDidChange won't do anything on init.
|
|
189
227
|
*/
|
|
190
228
|
_control_content: null,
|
|
229
|
+
_old_contentValueKeys: null,
|
|
230
|
+
_old_contentKeys: null,
|
|
191
231
|
|
|
192
232
|
/** @private
|
|
193
233
|
Observes when a content object has changed and handles notifying
|
|
194
234
|
changes to the value of the content object.
|
|
235
|
+
|
|
236
|
+
Optimized for the default case of only observing contentValueKey. If you use
|
|
237
|
+
a custom value for contentKeys it will switch to using a CoreSet to track
|
|
238
|
+
observed keys.
|
|
195
239
|
*/
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
240
|
+
_control_contentDidChange: function(target, key) {
|
|
241
|
+
var content = this.get('content'),
|
|
242
|
+
contentKeys = this.get('contentKeys'), contentKey,
|
|
243
|
+
old = this._control_content,
|
|
244
|
+
oldKeys = this._old_contentValueKeys,
|
|
245
|
+
oldType = SC.typeOf(oldKeys),
|
|
246
|
+
f = this.contentPropertyDidChange;
|
|
247
|
+
|
|
203
248
|
// remove an observer from the old content if necessary
|
|
204
|
-
|
|
249
|
+
if (old && old.removeObserver && oldKeys) {
|
|
250
|
+
// default case
|
|
251
|
+
if(oldType === SC.T_STRING) {
|
|
252
|
+
old.removeObserver(oldKeys, this, f);
|
|
253
|
+
|
|
254
|
+
oldKeys = null;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// set case
|
|
258
|
+
else {
|
|
259
|
+
var i, len = oldKeys.get('length');
|
|
260
|
+
|
|
261
|
+
for(i = 0; i < len; i++) {
|
|
262
|
+
contentKey = oldKeys[i];
|
|
263
|
+
|
|
264
|
+
old.removeObserver(contentKey, this, f);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
oldKeys.clear();
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// add observer to new content if necessary.
|
|
272
|
+
if (content && content.addObserver) {
|
|
273
|
+
// set case
|
|
274
|
+
if(contentKeys) {
|
|
275
|
+
// lazily create the key set
|
|
276
|
+
if(!oldKeys) oldKeys = SC.CoreSet.create();
|
|
277
|
+
|
|
278
|
+
// add observers to each key
|
|
279
|
+
for(contentKey in contentKeys) {
|
|
280
|
+
contentKey = this.getDelegateProperty(contentKey, this, this.get('displayDelegate'));
|
|
281
|
+
|
|
282
|
+
if(contentKey) {
|
|
283
|
+
content.addObserver(contentKey, this, f);
|
|
284
|
+
|
|
285
|
+
oldKeys.add(contentKey);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
// default case hardcoded for contentValueKey
|
|
291
|
+
else {
|
|
292
|
+
contentKey = this.getDelegateProperty('contentValueKey', this, this.get('displayDelegate'));
|
|
293
|
+
|
|
294
|
+
if(contentKey) {
|
|
295
|
+
content.addObserver(contentKey, this, f);
|
|
296
|
+
|
|
297
|
+
// if we had a set before, continue using it
|
|
298
|
+
if(oldKeys) oldKeys.add(contentKey);
|
|
299
|
+
// otherwise just use a string
|
|
300
|
+
else oldKeys = contentKey;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
205
304
|
|
|
206
|
-
if (old && old.removeObserver) old.removeObserver('*', this, f) ;
|
|
207
|
-
|
|
208
305
|
// update previous values
|
|
209
306
|
this._control_content = content ;
|
|
210
|
-
|
|
211
|
-
// add observer to new content if necessary.
|
|
212
|
-
if (content && content.addObserver) content.addObserver('*', this, f) ;
|
|
307
|
+
this._old_contentValueKeys = oldKeys;
|
|
213
308
|
|
|
214
309
|
// notify that value did change.
|
|
215
|
-
|
|
216
|
-
|
|
310
|
+
key = (!key || key === 'content') ? '*' : this.get(key);
|
|
311
|
+
if(key) this.contentPropertyDidChange(content, key) ;
|
|
217
312
|
}.observes('content'),
|
|
218
|
-
|
|
313
|
+
|
|
314
|
+
// holds the previous value of contentKeys
|
|
315
|
+
_old_contentKeys: null,
|
|
316
|
+
|
|
219
317
|
/** @private
|
|
220
|
-
|
|
318
|
+
Observes changes to contentKeys and sets up observers on the local keys to
|
|
319
|
+
update the observers on the content object.
|
|
221
320
|
*/
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
321
|
+
_control_contentKeysDidChange: function() {
|
|
322
|
+
var key, reverse = {},
|
|
323
|
+
// if no hash is present, use the default contentValueKey -> value
|
|
324
|
+
contentKeys = this.get('contentKeys') || this._default_contentKeys, contentKey,
|
|
325
|
+
oldContentKeys = this._old_contentKeys,
|
|
326
|
+
f = this._control_contentDidChange,
|
|
327
|
+
reverseF = this.updateContentWithValueObserver;
|
|
328
|
+
|
|
329
|
+
// remove old observers
|
|
330
|
+
for(key in oldContentKeys) {
|
|
331
|
+
contentKey = oldContentKeys[key];
|
|
332
|
+
|
|
333
|
+
this.removeObserver(contentKey, this, reverseF);
|
|
334
|
+
|
|
335
|
+
this.removeObserver(key, this, f);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// add new observers
|
|
339
|
+
for(key in contentKeys) {
|
|
340
|
+
contentKey = contentKeys[key];
|
|
341
|
+
|
|
342
|
+
// build reverse mapping to update content with value
|
|
343
|
+
reverse[contentKey] = key;
|
|
344
|
+
|
|
345
|
+
// add value observer
|
|
346
|
+
this.addObserver(contentKey, this, reverseF);
|
|
347
|
+
|
|
348
|
+
// add content key observer
|
|
349
|
+
this.addObserver(key, this, f);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
// store reverse map for later use
|
|
353
|
+
this._reverseContentKeys = reverse;
|
|
354
|
+
|
|
355
|
+
this._old_contentKeys = contentKeys;
|
|
356
|
+
|
|
357
|
+
// call the other observer now to update all the observers
|
|
358
|
+
this._control_contentDidChange();
|
|
359
|
+
}.observes('contentKeys')
|
|
226
360
|
};
|
|
227
361
|
|
|
@@ -135,7 +135,7 @@ SC.Editable = {
|
|
|
135
135
|
changes.
|
|
136
136
|
|
|
137
137
|
If this method is called on a view that is not currently editing, you
|
|
138
|
-
should always just
|
|
138
|
+
should always just return YES.
|
|
139
139
|
|
|
140
140
|
The default implementation sets isEditing to NO, resigns first responder
|
|
141
141
|
and returns YES.
|
|
@@ -41,7 +41,7 @@ SC.ALIGN_JUSTIFY = "justify";
|
|
|
41
41
|
@since SproutCore 1.0
|
|
42
42
|
*/
|
|
43
43
|
SC.FlowedLayout = {
|
|
44
|
-
|
|
44
|
+
isFlowedLayout: YES,
|
|
45
45
|
/**
|
|
46
46
|
The direction of flow. Possible values:
|
|
47
47
|
|
|
@@ -133,27 +133,27 @@ SC.FlowedLayout = {
|
|
|
133
133
|
return ret;
|
|
134
134
|
}.property('flowPadding').cacheable(),
|
|
135
135
|
|
|
136
|
-
concatenatedProperties: [
|
|
136
|
+
concatenatedProperties: ['childMixins'],
|
|
137
137
|
|
|
138
138
|
/** @private */
|
|
139
139
|
initMixin: function() {
|
|
140
|
-
this.
|
|
140
|
+
this._scfl_tileOnce();
|
|
141
141
|
},
|
|
142
142
|
|
|
143
143
|
/** @private
|
|
144
144
|
Detects when the child views change.
|
|
145
145
|
*/
|
|
146
146
|
_scfl_childViewsDidChange: function(c) {
|
|
147
|
-
this.
|
|
148
|
-
}.observes(
|
|
147
|
+
this._scfl_tileOnce();
|
|
148
|
+
}.observes('childViews'),
|
|
149
149
|
|
|
150
150
|
/** @private */
|
|
151
|
-
_scfl_layoutPropertyDidChange: function(){
|
|
152
|
-
this.
|
|
153
|
-
}.observes('layoutDirection', 'align', 'flowPadding', 'canWrap', 'defaultFlowSpacing'),
|
|
151
|
+
_scfl_layoutPropertyDidChange: function(childView) {
|
|
152
|
+
this._scfl_tileOnce();
|
|
153
|
+
}.observes('layoutDirection', 'align', 'flowPadding', 'canWrap', 'defaultFlowSpacing', 'isVisibleInWindow'),
|
|
154
154
|
|
|
155
155
|
/** @private
|
|
156
|
-
|
|
156
|
+
Overridden to only update if it is a view we do not manage, or the width or height has changed
|
|
157
157
|
since our last record of it.
|
|
158
158
|
*/
|
|
159
159
|
layoutDidChangeFor: function(c) {
|
|
@@ -177,7 +177,7 @@ SC.FlowedLayout = {
|
|
|
177
177
|
}
|
|
178
178
|
|
|
179
179
|
// nothing has changed. This is where we do something
|
|
180
|
-
this.
|
|
180
|
+
this._scfl_tileOnce();
|
|
181
181
|
sc_super();
|
|
182
182
|
},
|
|
183
183
|
|
|
@@ -192,15 +192,16 @@ SC.FlowedLayout = {
|
|
|
192
192
|
observeChildLayout: function(c) {
|
|
193
193
|
if (c._scfl_isBeingObserved) return;
|
|
194
194
|
c._scfl_isBeingObserved = YES;
|
|
195
|
-
c.addObserver('flowSpacing', this, '
|
|
196
|
-
c.addObserver('isVisible', this, '
|
|
197
|
-
c.addObserver('useAbsoluteLayout', this, '
|
|
198
|
-
c.addObserver('calculatedWidth', this, '
|
|
199
|
-
c.addObserver('calculatedHeight', this, '
|
|
200
|
-
c.addObserver('startsNewRow', this, '
|
|
201
|
-
c.addObserver('isSpacer', this, '
|
|
202
|
-
c.addObserver('
|
|
203
|
-
c.addObserver('
|
|
195
|
+
c.addObserver('flowSpacing', this, '_scfl_tileOnce');
|
|
196
|
+
c.addObserver('isVisible', this, '_scfl_tileOnce');
|
|
197
|
+
c.addObserver('useAbsoluteLayout', this, '_scfl_tileOnce');
|
|
198
|
+
c.addObserver('calculatedWidth', this, '_scfl_tileOnce');
|
|
199
|
+
c.addObserver('calculatedHeight', this, '_scfl_tileOnce');
|
|
200
|
+
c.addObserver('startsNewRow', this, '_scfl_tileOnce');
|
|
201
|
+
c.addObserver('isSpacer', this, '_scfl_tileOnce');
|
|
202
|
+
c.addObserver('maxSpacerLength', this, '_scfl_tileOnce');
|
|
203
|
+
c.addObserver('fillWidth', this, '_scfl_tileOnce');
|
|
204
|
+
c.addObserver('fillHeight', this, '_scfl_tileOnce');
|
|
204
205
|
},
|
|
205
206
|
|
|
206
207
|
/** @private
|
|
@@ -208,15 +209,16 @@ SC.FlowedLayout = {
|
|
|
208
209
|
*/
|
|
209
210
|
unobserveChildLayout: function(c) {
|
|
210
211
|
c._scfl_isBeingObserved = NO;
|
|
211
|
-
c.removeObserver('flowSpacing', this, '
|
|
212
|
-
c.removeObserver('isVisible', this, '
|
|
213
|
-
c.removeObserver('useAbsoluteLayout', this, '
|
|
214
|
-
c.removeObserver('calculatedWidth', this, '
|
|
215
|
-
c.removeObserver('calculatedHeight', this, '
|
|
216
|
-
c.removeObserver('startsNewRow', this, '
|
|
217
|
-
c.removeObserver('isSpacer', this, '
|
|
218
|
-
c.removeObserver('
|
|
219
|
-
c.removeObserver('
|
|
212
|
+
c.removeObserver('flowSpacing', this, '_scfl_tileOnce');
|
|
213
|
+
c.removeObserver('isVisible', this, '_scfl_tileOnce');
|
|
214
|
+
c.removeObserver('useAbsoluteLayout', this, '_scfl_tileOnce');
|
|
215
|
+
c.removeObserver('calculatedWidth', this, '_scfl_tileOnce');
|
|
216
|
+
c.removeObserver('calculatedHeight', this, '_scfl_tileOnce');
|
|
217
|
+
c.removeObserver('startsNewRow', this, '_scfl_tileOnce');
|
|
218
|
+
c.removeObserver('isSpacer', this, '_scfl_tileOnce');
|
|
219
|
+
c.removeObserver('maxSpacerLength', this, '_scfl_tileOnce');
|
|
220
|
+
c.removeObserver('fillWidth', this, '_scfl_tileOnce');
|
|
221
|
+
c.removeObserver('fillHeight', this, '_scfl_tileOnce');
|
|
220
222
|
},
|
|
221
223
|
|
|
222
224
|
/**
|
|
@@ -239,8 +241,8 @@ SC.FlowedLayout = {
|
|
|
239
241
|
@type Hash
|
|
240
242
|
*/
|
|
241
243
|
flowSpacingForChild: function(idx, view) {
|
|
242
|
-
var spacing = view.get(
|
|
243
|
-
if (SC.none(spacing)) spacing = this.get(
|
|
244
|
+
var spacing = view.get('flowSpacing');
|
|
245
|
+
if (SC.none(spacing)) spacing = this.get('defaultFlowSpacing');
|
|
244
246
|
if (SC.none(spacing)) spacing = 0;
|
|
245
247
|
|
|
246
248
|
if (SC.typeOf(spacing) === SC.T_NUMBER) {
|
|
@@ -266,9 +268,9 @@ SC.FlowedLayout = {
|
|
|
266
268
|
@default {width: 0, height: 0}
|
|
267
269
|
*/
|
|
268
270
|
flowSizeForChild: function(idx, view) {
|
|
269
|
-
var cw = view.get('calculatedWidth'), ch = view.get('calculatedHeight')
|
|
270
|
-
|
|
271
|
-
|
|
271
|
+
var cw = view.get('calculatedWidth'), ch = view.get('calculatedHeight'),
|
|
272
|
+
layoutDirection = this.get('layoutDirection'),
|
|
273
|
+
calc = {}, f = view.get('frame'), l = view.get('layout');
|
|
272
274
|
view._scfl_lastFrame = f;
|
|
273
275
|
|
|
274
276
|
// if there is a calculated width, use that. NOTE: if calculatedWidth === 0,
|
|
@@ -276,20 +278,26 @@ SC.FlowedLayout = {
|
|
|
276
278
|
if (cw) {
|
|
277
279
|
calc.width = cw;
|
|
278
280
|
} else {
|
|
279
|
-
|
|
281
|
+
// we should use the layout width if available to avoid breaking layouts
|
|
282
|
+
// that have borders
|
|
283
|
+
calc.width = l.width || f.width;
|
|
280
284
|
}
|
|
281
285
|
|
|
282
286
|
// same for calculated height
|
|
283
287
|
if (ch) {
|
|
284
288
|
calc.height = ch;
|
|
285
289
|
} else {
|
|
286
|
-
|
|
290
|
+
// we should use the layout width if available to avoid breaking layouts
|
|
291
|
+
// that have borders
|
|
292
|
+
calc.height = l.height || f.height;
|
|
287
293
|
}
|
|
288
|
-
|
|
294
|
+
|
|
289
295
|
// if it is a spacer, we must set the dimension that it
|
|
290
296
|
// expands in to 0.
|
|
291
297
|
if (view.get('isSpacer')) {
|
|
292
|
-
|
|
298
|
+
calc.maxSpacerLength = view.get('maxSpacerLength');
|
|
299
|
+
|
|
300
|
+
if (layoutDirection === SC.LAYOUT_HORIZONTAL) {
|
|
293
301
|
calc.width = l.minWidth || 0;
|
|
294
302
|
} else {
|
|
295
303
|
calc.height = l.minHeight || 0;
|
|
@@ -297,26 +305,12 @@ SC.FlowedLayout = {
|
|
|
297
305
|
}
|
|
298
306
|
|
|
299
307
|
// if it has a fillWidth/Height, clear it for later
|
|
300
|
-
if (
|
|
301
|
-
this.get('layoutDirection') === SC.LAYOUT_HORIZONTAL && view.get('fillHeight')
|
|
302
|
-
) {
|
|
308
|
+
if (layoutDirection === SC.LAYOUT_HORIZONTAL && view.get('fillHeight')) {
|
|
303
309
|
calc.height = l.minHeight || 0;
|
|
304
|
-
} else if (
|
|
305
|
-
this.get('layoutDirection') === SC.LAYOUT_VERTICAL && view.get('fillWidth')
|
|
306
|
-
) {
|
|
310
|
+
} else if (layoutDirection === SC.LAYOUT_VERTICAL && view.get('fillWidth')) {
|
|
307
311
|
calc.width = l.minWidth || 0;
|
|
308
312
|
}
|
|
309
313
|
|
|
310
|
-
// finally, RECREATE the view's layout if it is invalid (lacks a width or a height)
|
|
311
|
-
if (l.width == undefined) {
|
|
312
|
-
view.adjust('width', f.width);
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
if (l.height == undefined) {
|
|
316
|
-
view.adjust('height', f.height);
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
// return
|
|
320
314
|
return calc;
|
|
321
315
|
},
|
|
322
316
|
|
|
@@ -439,7 +433,7 @@ SC.FlowedLayout = {
|
|
|
439
433
|
lastIdx = idx;
|
|
440
434
|
|
|
441
435
|
var row = {
|
|
442
|
-
// always a
|
|
436
|
+
// always a reference to the plan
|
|
443
437
|
plan: plan,
|
|
444
438
|
|
|
445
439
|
// the combined size of the items in the row. This is used, for instance,
|
|
@@ -476,13 +470,13 @@ SC.FlowedLayout = {
|
|
|
476
470
|
at the given index, and returning the index of the next item, if any.
|
|
477
471
|
*/
|
|
478
472
|
_scfl_distributeChildrenIntoRow: function(children, startingAt, row) {
|
|
479
|
-
var idx, len = children.length, plan = row.plan, child, childSize, spacing,
|
|
473
|
+
var idx, len = children.length, plan = row.plan, child, childSize, spacing,
|
|
480
474
|
items = [], itemOffset = 0, isVertical = plan.isVertical, itemSize, itemLength,
|
|
475
|
+
maxSpacerLength,
|
|
481
476
|
canWrap = this.get('canWrap'),
|
|
482
|
-
newRowPending = NO
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
var max = row.plan.maximumRowLength;
|
|
477
|
+
newRowPending = NO,
|
|
478
|
+
maxItemLength = 0,
|
|
479
|
+
max = row.plan.maximumRowLength;
|
|
486
480
|
|
|
487
481
|
for (idx = startingAt; idx < len; idx++) {
|
|
488
482
|
child = children[idx];
|
|
@@ -497,14 +491,13 @@ SC.FlowedLayout = {
|
|
|
497
491
|
childSize = this.flowSizeForChild(idx, child);
|
|
498
492
|
spacing = this.flowSpacingForChild(idx, child);
|
|
499
493
|
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
494
|
+
childSize.width += spacing.left + spacing.right;
|
|
495
|
+
childSize.height += spacing.top + spacing.bottom;
|
|
496
|
+
|
|
497
|
+
itemLength = childSize[isVertical ? 'height' : 'width'];
|
|
498
|
+
if(!SC.none(childSize.maxSpacerLength)) maxSpacerLength = childSize.maxSpacerLength + (isVertical ? spacing.top + spacing.bottom : spacing.left + spacing.right);
|
|
499
|
+
itemSize = childSize[isVertical ? 'width' : 'height'];
|
|
500
|
+
|
|
508
501
|
// there are two cases where we must start a new row: if the child or a
|
|
509
502
|
// previous child in the row that wasn't included has
|
|
510
503
|
// startsNewRow === YES, and if the item cannot fit. Neither applies if there
|
|
@@ -517,6 +510,7 @@ SC.FlowedLayout = {
|
|
|
517
510
|
child: child,
|
|
518
511
|
|
|
519
512
|
itemLength: itemLength,
|
|
513
|
+
maxSpacerLength: maxSpacerLength,
|
|
520
514
|
itemSize: itemSize,
|
|
521
515
|
|
|
522
516
|
spacing: spacing,
|
|
@@ -537,6 +531,7 @@ SC.FlowedLayout = {
|
|
|
537
531
|
left: undefined, top: undefined,
|
|
538
532
|
width: undefined, height: undefined
|
|
539
533
|
};
|
|
534
|
+
|
|
540
535
|
|
|
541
536
|
items.push(item);
|
|
542
537
|
itemOffset += itemLength;
|
|
@@ -575,14 +570,17 @@ SC.FlowedLayout = {
|
|
|
575
570
|
*/
|
|
576
571
|
_scfl_positionChildrenInRow: function(row) {
|
|
577
572
|
var items = row.items, len = items.length, idx, item, position, rowSize = 0,
|
|
578
|
-
spacerCount = 0, spacerSize, align = row.plan.align, shouldExpand = YES
|
|
579
|
-
|
|
573
|
+
spacerCount = 0, spacerSize, align = row.plan.align, shouldExpand = YES,
|
|
574
|
+
leftOver = 0, noMaxWidth = NO;
|
|
575
|
+
|
|
580
576
|
//
|
|
581
577
|
// STEP ONE: DETERMINE SPACER SIZE + COUNT
|
|
582
578
|
//
|
|
583
579
|
for (idx = 0; idx < len; idx++) {
|
|
584
580
|
item = items[idx];
|
|
585
|
-
if (item.isSpacer)
|
|
581
|
+
if (item.isSpacer) {
|
|
582
|
+
spacerCount += item.child.get('spaceUnits') || 1;
|
|
583
|
+
}
|
|
586
584
|
}
|
|
587
585
|
|
|
588
586
|
// justification is like adding a spacer between every item. We'll actually account for
|
|
@@ -591,6 +589,31 @@ SC.FlowedLayout = {
|
|
|
591
589
|
|
|
592
590
|
// calculate spacer size
|
|
593
591
|
spacerSize = Math.max(0, row.plan.maximumRowLength - row.rowLength) / spacerCount;
|
|
592
|
+
|
|
593
|
+
// determine individual spacer sizes using spacerSize and limited by
|
|
594
|
+
// each spacer's maxWidth (if they have one)
|
|
595
|
+
while(spacerSize > 0) {
|
|
596
|
+
for (idx = 0; idx < len; idx++) {
|
|
597
|
+
item = items[idx];
|
|
598
|
+
|
|
599
|
+
if (item.isSpacer) {
|
|
600
|
+
item.itemLength += spacerSize * (item.child.get('spaceUnits') || 1);
|
|
601
|
+
if(item.itemLength > item.maxSpacerLength) {
|
|
602
|
+
leftOver += item.itemLength - item.maxSpacerLength;
|
|
603
|
+
item.itemLength = item.maxSpacerLength;
|
|
604
|
+
}
|
|
605
|
+
else {
|
|
606
|
+
noMaxWidth = YES;
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
// if none of the spacers can expand further, stop
|
|
612
|
+
if(!noMaxWidth) break;
|
|
613
|
+
|
|
614
|
+
spacerSize = Math.round(leftOver / spacerCount);
|
|
615
|
+
leftOver = 0;
|
|
616
|
+
}
|
|
594
617
|
|
|
595
618
|
//
|
|
596
619
|
// STEP TWO: ADJUST FOR ALIGNMENT
|
|
@@ -610,17 +633,17 @@ SC.FlowedLayout = {
|
|
|
610
633
|
//
|
|
611
634
|
for (idx = 0; idx < len; idx++) {
|
|
612
635
|
item = items[idx];
|
|
613
|
-
|
|
614
|
-
if
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
636
|
+
|
|
637
|
+
// if this item has fillWidth or fillHeight set, the row should expand
|
|
638
|
+
// laterally
|
|
639
|
+
if(!item.fillRow) shouldExpand = NO;
|
|
640
|
+
|
|
618
641
|
// if the item is not a fill-row item, this row has a size that all fill-row
|
|
619
642
|
// items should expand to
|
|
620
|
-
if (!item.fillRow) shouldExpand = NO;
|
|
621
643
|
rowSize = Math.max(item.itemSize, rowSize);
|
|
622
644
|
|
|
623
645
|
item.position = position;
|
|
646
|
+
|
|
624
647
|
position += item.itemLength;
|
|
625
648
|
|
|
626
649
|
// if justification is on, we have one more spacer
|
|
@@ -628,7 +651,7 @@ SC.FlowedLayout = {
|
|
|
628
651
|
if (align === SC.ALIGN_JUSTIFY && idx < len - 1) position += spacerSize;
|
|
629
652
|
}
|
|
630
653
|
|
|
631
|
-
row.shouldExpand = shouldExpand;
|
|
654
|
+
row.shouldExpand = len > 0 ? shouldExpand : NO;
|
|
632
655
|
row.rowLength = position - row.plan.rowStartPadding; // row length does not include padding
|
|
633
656
|
row.rowSize = rowSize;
|
|
634
657
|
|
|
@@ -671,7 +694,7 @@ SC.FlowedLayout = {
|
|
|
671
694
|
*/
|
|
672
695
|
_scfl_applyPlan: function(plan) {
|
|
673
696
|
var rows = plan.rows, rowIdx, rowsLen, row, longestRow = 0, totalSize = 0,
|
|
674
|
-
items, itemIdx, itemsLen, item, layout,
|
|
697
|
+
items, itemIdx, itemsLen, item, layout, itemSize,
|
|
675
698
|
|
|
676
699
|
isVertical = plan.isVertical;
|
|
677
700
|
|
|
@@ -686,30 +709,20 @@ SC.FlowedLayout = {
|
|
|
686
709
|
for (itemIdx = 0; itemIdx < itemsLen; itemIdx++) {
|
|
687
710
|
item = items[itemIdx];
|
|
688
711
|
item.child.beginPropertyChanges();
|
|
712
|
+
|
|
713
|
+
itemSize = item.fillRow ? row.rowSize : item.itemSize;
|
|
714
|
+
|
|
715
|
+
layout = {
|
|
716
|
+
left: item.spacing.left + (isVertical ? row.position : item.position),
|
|
717
|
+
top: item.spacing.top + (isVertical ? item.position : row.position),
|
|
718
|
+
width: isVertical ? itemSize : item.itemLength,
|
|
719
|
+
height: isVertical ? item.itemLength : itemSize
|
|
720
|
+
};
|
|
689
721
|
|
|
690
|
-
layout
|
|
691
|
-
|
|
692
|
-
// we are _going_ to set position. that much is certain.
|
|
693
|
-
layout.left = item.spacing.left + (isVertical ? row.position : item.position);
|
|
694
|
-
layout.top = item.spacing.top + (isVertical ? item.position : row.position);
|
|
695
|
-
|
|
696
|
-
// the size is more questionable: we only change that if the
|
|
697
|
-
// item wants.
|
|
698
|
-
if (item.fillRow) {
|
|
699
|
-
layout[isVertical ? 'width' : 'height'] = row.rowSize;
|
|
700
|
-
}
|
|
701
|
-
if (item.isSpacer) {
|
|
702
|
-
layout[isVertical ? 'height' : 'width'] = item.itemLength;
|
|
703
|
-
}
|
|
704
|
-
|
|
705
|
-
if (layout.width !== undefined) {
|
|
706
|
-
layout.width -= item.spacing.left + item.spacing.right;
|
|
707
|
-
}
|
|
708
|
-
if (layout.height !== undefined) {
|
|
709
|
-
layout.height -= item.spacing.top + item.spacing.bottom;
|
|
710
|
-
}
|
|
722
|
+
layout.width -= item.spacing.left + item.spacing.right;
|
|
723
|
+
layout.height -= item.spacing.top + item.spacing.bottom;
|
|
711
724
|
|
|
712
|
-
item.child
|
|
725
|
+
this.applyPlanToView(item.child, layout);
|
|
713
726
|
item.child._scfl_lastLayout = layout;
|
|
714
727
|
|
|
715
728
|
item.child.endPropertyChanges();
|
|
@@ -728,15 +741,33 @@ SC.FlowedLayout = {
|
|
|
728
741
|
|
|
729
742
|
this.endPropertyChanges();
|
|
730
743
|
},
|
|
744
|
+
|
|
745
|
+
/**
|
|
746
|
+
Applies the given layout to the view.
|
|
747
|
+
Override this if you would like your view to, for example, animate to a new position.
|
|
748
|
+
*/
|
|
749
|
+
applyPlanToView: function(view, layout) {
|
|
750
|
+
view.adjust(layout);
|
|
751
|
+
},
|
|
731
752
|
|
|
732
753
|
/** @private */
|
|
754
|
+
_scfl_tileOnce: function() {
|
|
755
|
+
this.invokeLast(this._scfl_tile);
|
|
756
|
+
},
|
|
757
|
+
|
|
733
758
|
_scfl_tile: function() {
|
|
759
|
+
// short circuit when hidden
|
|
760
|
+
if(!this.get('isVisibleInWindow')) return;
|
|
761
|
+
|
|
734
762
|
// first, do the plan
|
|
735
763
|
var plan = this._scfl_createPlan();
|
|
736
764
|
this._scfl_distributeChildrenIntoRows(plan);
|
|
737
765
|
this._scfl_positionChildrenInRows(plan);
|
|
738
766
|
this._scfl_positionRows(plan);
|
|
739
767
|
this._scfl_applyPlan(plan);
|
|
768
|
+
|
|
769
|
+
// save so it can be observed
|
|
770
|
+
this.setIfChanged('numberOfRows', plan.rows.length);
|
|
740
771
|
|
|
741
772
|
// second, observe all children, and stop observing any children we no longer
|
|
742
773
|
// should be observing.
|
|
@@ -764,8 +795,6 @@ SC.FlowedLayout = {
|
|
|
764
795
|
|
|
765
796
|
/** @private */
|
|
766
797
|
_scfl_frameDidChange: function() {
|
|
767
|
-
if (this._scfl_isChangingSize) return;
|
|
768
|
-
|
|
769
798
|
var frame = this.get("frame"), lf = this._scfl_lastFrameSize || {};
|
|
770
799
|
this._scfl_lastFrameSize = SC.clone(frame);
|
|
771
800
|
|
|
@@ -773,8 +802,8 @@ SC.FlowedLayout = {
|
|
|
773
802
|
return;
|
|
774
803
|
}
|
|
775
804
|
|
|
776
|
-
this.
|
|
777
|
-
}.observes(
|
|
805
|
+
this._scfl_tileOnce();
|
|
806
|
+
}.observes('frame'),
|
|
778
807
|
|
|
779
808
|
/** @private */
|
|
780
809
|
destroyMixin: function() {
|
|
@@ -788,7 +817,7 @@ SC.FlowedLayout = {
|
|
|
788
817
|
},
|
|
789
818
|
|
|
790
819
|
/** @private
|
|
791
|
-
Reorders childViews so that the passed views are at the beginning in the order they are passed. Needed because childViews are
|
|
820
|
+
Reorders childViews so that the passed views are at the beginning in the order they are passed. Needed because childViews are laid out in the order they appear in childViews.
|
|
792
821
|
*/
|
|
793
822
|
reorder: function(views) {
|
|
794
823
|
if(!SC.typeOf(views) === SC.T_ARRAY) views = arguments;
|
|
@@ -800,6 +829,8 @@ SC.FlowedLayout = {
|
|
|
800
829
|
|
|
801
830
|
while(i-- > 0) {
|
|
802
831
|
view = views[i];
|
|
832
|
+
|
|
833
|
+
if(SC.typeOf(view) === SC.T_STRING) view = this.get(view);
|
|
803
834
|
|
|
804
835
|
childViews.removeObject(view);
|
|
805
836
|
childViews.unshiftObject(view);
|
|
@@ -812,3 +843,4 @@ SC.FlowedLayout = {
|
|
|
812
843
|
return this;
|
|
813
844
|
}
|
|
814
845
|
};
|
|
846
|
+
|