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
|
@@ -39,8 +39,11 @@ SC.platform = SC.Object.create({
|
|
|
39
39
|
|
|
40
40
|
/*
|
|
41
41
|
NOTES
|
|
42
|
-
-
|
|
43
|
-
|
|
42
|
+
- Chrome would incorrectly indicate support for touch events. This has been fixed:
|
|
43
|
+
http://code.google.com/p/chromium/issues/detail?id=36415
|
|
44
|
+
- Android is assumed to support touch, but incorrectly reports that it does not.
|
|
45
|
+
- See: https://github.com/Modernizr/Modernizr/issues/84 for a discussion on detecting
|
|
46
|
+
touch capability.
|
|
44
47
|
*/
|
|
45
48
|
/**
|
|
46
49
|
YES if the current device supports touch events, NO otherwise.
|
|
@@ -50,11 +53,25 @@ SC.platform = SC.Object.create({
|
|
|
50
53
|
|
|
51
54
|
@property {Boolean}
|
|
52
55
|
*/
|
|
53
|
-
touch:
|
|
54
|
-
|
|
55
|
-
bounceOnScroll: SC.browser.iOS,
|
|
56
|
-
pinchToZoom: SC.browser.iOS,
|
|
56
|
+
touch: 'ontouchstart' in window || SC.browser.name === SC.BROWSER.android,
|
|
57
57
|
|
|
58
|
+
/**
|
|
59
|
+
YES if the current browser supports bounce on scroll.
|
|
60
|
+
|
|
61
|
+
@property {Boolean}
|
|
62
|
+
*/
|
|
63
|
+
bounceOnScroll: SC.browser.os === SC.OS.ios,
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
YES if the current browser supports pinch to zoom.
|
|
67
|
+
|
|
68
|
+
@property {Boolean}
|
|
69
|
+
*/
|
|
70
|
+
pinchToZoom: SC.browser.os === SC.OS.ios,
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
YES if the current browser supports the `placeholder` attribute in `input` elements.
|
|
74
|
+
*/
|
|
58
75
|
input: {
|
|
59
76
|
placeholder: ('placeholder' in document.createElement('input'))
|
|
60
77
|
},
|
|
@@ -98,7 +115,7 @@ SC.platform = SC.Object.create({
|
|
|
98
115
|
cssPrefix: null,
|
|
99
116
|
|
|
100
117
|
/**
|
|
101
|
-
Prefix for
|
|
118
|
+
Prefix for browser specific CSS attributes when used in the DOM. Calculated later.
|
|
102
119
|
*/
|
|
103
120
|
domCSSPrefix: null,
|
|
104
121
|
|
|
@@ -116,7 +133,7 @@ SC.platform = SC.Object.create({
|
|
|
116
133
|
// @endif
|
|
117
134
|
return;
|
|
118
135
|
}
|
|
119
|
-
|
|
136
|
+
|
|
120
137
|
SC.Logger.log("Simulating touch events");
|
|
121
138
|
|
|
122
139
|
// Tell the app that we now "speak" touch
|
|
@@ -171,7 +188,7 @@ SC.platform = SC.Object.create({
|
|
|
171
188
|
When simulating touch events, this method is called when mousemove events
|
|
172
189
|
are received.
|
|
173
190
|
|
|
174
|
-
If the altKey is
|
|
191
|
+
If the altKey is depressed and pinch center not yet established, we will capture the mouse position.
|
|
175
192
|
*/
|
|
176
193
|
_simtouch_mousemove: function(evt) {
|
|
177
194
|
if (!this._mousedown) {
|
|
@@ -179,7 +196,7 @@ SC.platform = SC.Object.create({
|
|
|
179
196
|
we need to capture when was the first spot that the altKey was pressed and use it as
|
|
180
197
|
the center point of a pinch
|
|
181
198
|
*/
|
|
182
|
-
if(evt.altKey && this._pinchCenter
|
|
199
|
+
if(evt.altKey && this._pinchCenter === null) {
|
|
183
200
|
this._pinchCenter = {
|
|
184
201
|
pageX: evt.pageX,
|
|
185
202
|
pageY: evt.pageY,
|
|
@@ -188,7 +205,7 @@ SC.platform = SC.Object.create({
|
|
|
188
205
|
clientX: evt.clientX,
|
|
189
206
|
clientY: evt.clientY
|
|
190
207
|
};
|
|
191
|
-
} else if(!evt.altKey && this._pinchCenter
|
|
208
|
+
} else if(!evt.altKey && this._pinchCenter !== null){
|
|
192
209
|
this._pinchCenter = null;
|
|
193
210
|
}
|
|
194
211
|
return NO;
|
|
@@ -256,7 +273,7 @@ SC.platform = SC.Object.create({
|
|
|
256
273
|
/*
|
|
257
274
|
simulate pinch gesture
|
|
258
275
|
*/
|
|
259
|
-
if(evt.altKey && this._pinchCenter
|
|
276
|
+
if(evt.altKey && this._pinchCenter !== null)
|
|
260
277
|
{
|
|
261
278
|
//calculate the mirror position of the virtual touch
|
|
262
279
|
var pageX = this._pinchCenter.pageX + this._pinchCenter.pageX - evt.pageX ,
|
|
@@ -316,37 +333,37 @@ SC.platform = SC.Object.create({
|
|
|
316
333
|
supportsAcceleratedLayers: NO,
|
|
317
334
|
|
|
318
335
|
/**
|
|
319
|
-
|
|
336
|
+
Whether the browser supports the hashchange event.
|
|
320
337
|
*/
|
|
321
338
|
supportsHashChange: function() {
|
|
322
339
|
// Code copied from Modernizr which copied code from YUI (MIT licenses)
|
|
323
340
|
// documentMode logic from YUI to filter out IE8 Compat Mode which false positives
|
|
324
341
|
return ('onhashchange' in window) && (document.documentMode === undefined || document.documentMode > 7);
|
|
325
342
|
}(),
|
|
326
|
-
|
|
343
|
+
|
|
327
344
|
/**
|
|
328
|
-
|
|
345
|
+
Whether the browser supports HTML5 history.
|
|
329
346
|
*/
|
|
330
347
|
supportsHistory: function() {
|
|
331
348
|
return !!(window.history && window.history.pushState);
|
|
332
349
|
}(),
|
|
333
|
-
|
|
350
|
+
|
|
334
351
|
supportsCanvas: function() {
|
|
335
352
|
return !!document.createElement('canvas').getContext;
|
|
336
353
|
}(),
|
|
337
|
-
|
|
354
|
+
|
|
338
355
|
supportsOrientationChange: ('onorientationchange' in window),
|
|
339
|
-
|
|
356
|
+
|
|
340
357
|
/**
|
|
341
358
|
Because iOS is slow to dispatch the window.onorientationchange event,
|
|
342
359
|
we use the window size to determine the orientation on iOS devices
|
|
343
360
|
and desktop environments when SC.platform.touch is YES (ie. when
|
|
344
361
|
SC.platform.simulateTouchEvents has been called)
|
|
345
|
-
|
|
362
|
+
|
|
346
363
|
@property {Boolean}
|
|
347
364
|
@default NO
|
|
348
365
|
*/
|
|
349
|
-
windowSizeDeterminesOrientation: SC.browser.
|
|
366
|
+
windowSizeDeterminesOrientation: SC.browser.os === SC.OS.ios || !('onorientationchange' in window)
|
|
350
367
|
|
|
351
368
|
});
|
|
352
369
|
|
|
@@ -376,26 +393,29 @@ SC.platform = SC.Object.create({
|
|
|
376
393
|
var el = document.createElement("div");
|
|
377
394
|
|
|
378
395
|
// the css and javascript to test
|
|
379
|
-
var css_browsers = ["-moz-", "-moz-", "-o-", "-ms-", "-webkit-"]
|
|
380
|
-
|
|
396
|
+
var css_browsers = ["-moz-", "-moz-", "-o-", "-ms-", "-webkit-"],
|
|
397
|
+
test_browsers = ["moz", "Moz", "o", "ms", "webkit"];
|
|
381
398
|
|
|
382
399
|
// prepare css
|
|
383
|
-
var css = "", i = null;
|
|
384
|
-
for (i = 0
|
|
385
|
-
|
|
386
|
-
css +=
|
|
387
|
-
css +=
|
|
400
|
+
var css = "", i = null, cssBrowser, iLen;
|
|
401
|
+
for (i = 0, iLen = css_browsers.length; i < iLen; i++) {
|
|
402
|
+
cssBrowser = css_browsers[i];
|
|
403
|
+
css += cssBrowser + "transition:all 1s linear;";
|
|
404
|
+
css += cssBrowser + "transform: translate(1px, 1px);";
|
|
405
|
+
css += cssBrowser + "perspective: 500px;";
|
|
388
406
|
}
|
|
389
407
|
|
|
390
408
|
// set css text
|
|
391
409
|
el.style.cssText = css;
|
|
392
410
|
|
|
393
411
|
// test
|
|
394
|
-
|
|
412
|
+
var testBrowser;
|
|
413
|
+
for (i = 0, iLen=test_browsers.length; i < iLen; i++)
|
|
395
414
|
{
|
|
396
|
-
|
|
397
|
-
if (el.style[
|
|
398
|
-
if (el.style[
|
|
415
|
+
testBrowser = test_browsers[i];
|
|
416
|
+
if (el.style[testBrowser + "TransitionProperty"] !== undefined) SC.platform.supportsCSSTransitions = YES;
|
|
417
|
+
if (el.style[testBrowser + "Transform"] !== undefined) SC.platform.supportsCSSTransforms = YES;
|
|
418
|
+
if (el.style[testBrowser + "Perspective"] !== undefined || el.style[testBrowser + "PerspectiveProperty"] !== undefined) {
|
|
399
419
|
SC.platform.understandsCSS3DTransforms = YES;
|
|
400
420
|
SC.platform.supportsCSS3DTransforms = YES;
|
|
401
421
|
}
|
|
@@ -67,12 +67,16 @@ SC.mixin({
|
|
|
67
67
|
onReady: {
|
|
68
68
|
done: function() {
|
|
69
69
|
if(SC.isReady) return;
|
|
70
|
+
|
|
70
71
|
SC.isReady = true;
|
|
71
72
|
|
|
72
73
|
SC.RunLoop.begin();
|
|
73
74
|
|
|
74
75
|
SC.Locale.createCurrentLocale();
|
|
75
|
-
|
|
76
|
+
var loc = SC.Locale.currentLanguage.toLowerCase();
|
|
77
|
+
jQuery("body").addClass(loc);
|
|
78
|
+
|
|
79
|
+
jQuery("html").attr("lang", loc);
|
|
76
80
|
|
|
77
81
|
jQuery("#loading").remove();
|
|
78
82
|
|
|
@@ -152,7 +152,7 @@ SC.RenderContext = SC.Builder.create(
|
|
|
152
152
|
managed code (such as in CollectionView) can append or prepend content
|
|
153
153
|
instead.
|
|
154
154
|
|
|
155
|
-
You probably do not want to change this
|
|
155
|
+
You probably do not want to change this property unless you know what you
|
|
156
156
|
are doing.
|
|
157
157
|
|
|
158
158
|
@property {String}
|
|
@@ -307,10 +307,6 @@ SC.RenderContext = SC.Builder.create(
|
|
|
307
307
|
|
|
308
308
|
cq = this.$();
|
|
309
309
|
|
|
310
|
-
// console.log('%@#update() called'.fmt(this));
|
|
311
|
-
// if (this.length>0) console.log(this.join());
|
|
312
|
-
// else console.log('<no length>');
|
|
313
|
-
|
|
314
310
|
// replace innerHTML
|
|
315
311
|
if (this.length>0) {
|
|
316
312
|
this._innerHTMLReplaced = YES;
|
|
@@ -329,7 +325,7 @@ SC.RenderContext = SC.Builder.create(
|
|
|
329
325
|
}
|
|
330
326
|
}
|
|
331
327
|
|
|
332
|
-
// attributes, styles, and class
|
|
328
|
+
// attributes, styles, and class names will already have been set.
|
|
333
329
|
|
|
334
330
|
// id="foo"
|
|
335
331
|
if (this._idDidChange && (value = this._id)) {
|
|
@@ -347,9 +343,6 @@ SC.RenderContext = SC.Builder.create(
|
|
|
347
343
|
|
|
348
344
|
// these are temporary objects are reused by end() to avoid memory allocs.
|
|
349
345
|
_DEFAULT_ATTRS: {},
|
|
350
|
-
_TAG_ARRAY: [],
|
|
351
|
-
_JOIN_ARRAY: [],
|
|
352
|
-
_STYLE_PAIR_ARRAY: [],
|
|
353
346
|
|
|
354
347
|
/**
|
|
355
348
|
Ends the current tag editing context. This will generate the tag string
|
|
@@ -371,48 +364,41 @@ SC.RenderContext = SC.Builder.create(
|
|
|
371
364
|
// generate opening tag.
|
|
372
365
|
|
|
373
366
|
// get attributes first. Copy in className + styles...
|
|
374
|
-
var tag =
|
|
367
|
+
var tag = '', styleStr='', pair, joined, key , value,
|
|
375
368
|
attrs = this._attrs, className = this._classNames,
|
|
376
|
-
id = this._id, styles = this._styles;
|
|
369
|
+
id = this._id, styles = this._styles, strings, selfClosing;
|
|
377
370
|
|
|
378
371
|
// add tag to tag array
|
|
379
|
-
tag
|
|
372
|
+
tag = '<' + this._tagName ;
|
|
380
373
|
|
|
381
374
|
// add any attributes...
|
|
382
375
|
if (attrs || className || styles || id) {
|
|
383
376
|
if (!attrs) attrs = this._DEFAULT_ATTRS ;
|
|
384
377
|
if (id) attrs.id = id ;
|
|
378
|
+
// old versions of safari (5.0)!!!! throw an error if we access
|
|
379
|
+
// attrs.class. meh...
|
|
385
380
|
if (className) attrs['class'] = className.join(' ');
|
|
386
381
|
|
|
387
382
|
// add in styles. note how we avoid memory allocs here to keep things
|
|
388
383
|
// fast...
|
|
389
384
|
if (styles) {
|
|
390
|
-
joined = this._JOIN_ARRAY ;
|
|
391
|
-
pair = this._STYLE_PAIR_ARRAY;
|
|
392
385
|
for(key in styles) {
|
|
393
386
|
if(!styles.hasOwnProperty(key)) continue ;
|
|
394
387
|
value = styles[key];
|
|
395
388
|
if (value === null) continue; // skip empty styles
|
|
396
389
|
if (typeof value === SC.T_NUMBER && !SC.NON_PIXEL_PROPERTIES.contains(key)) value += "px";
|
|
397
|
-
|
|
398
|
-
pair[0] = this._dasherizeStyleName(key);
|
|
399
|
-
pair[1] = value;
|
|
400
|
-
joined.push(pair.join(': '));
|
|
390
|
+
styleStr = styleStr + this._dasherizeStyleName(key)+": "+value + "; ";
|
|
401
391
|
}
|
|
402
|
-
attrs.style =
|
|
403
|
-
|
|
404
|
-
// reset temporary object. pair does not need to be reset since it
|
|
405
|
-
// is always overwritten
|
|
406
|
-
joined.length = 0;
|
|
392
|
+
attrs.style = styleStr;
|
|
407
393
|
}
|
|
408
394
|
|
|
409
395
|
// now convert attrs hash to tag array...
|
|
410
|
-
tag
|
|
396
|
+
tag = tag + ' '; // add space for joining0
|
|
411
397
|
for(key in attrs) {
|
|
412
398
|
if (!attrs.hasOwnProperty(key)) continue ;
|
|
413
399
|
value = attrs[key];
|
|
414
400
|
if (value === null) continue ; // skip empty attrs
|
|
415
|
-
tag
|
|
401
|
+
tag = tag + key + '="' + value + '" ';
|
|
416
402
|
}
|
|
417
403
|
|
|
418
404
|
// if we are using the DEFAULT_ATTRS temporary object, make sure we
|
|
@@ -425,25 +411,20 @@ SC.RenderContext = SC.Builder.create(
|
|
|
425
411
|
|
|
426
412
|
// this is self closing if there is no content in between and selfClosing
|
|
427
413
|
// is not set to false.
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
tag
|
|
414
|
+
strings = this.strings;
|
|
415
|
+
selfClosing = (this._selfClosing === NO) ? NO : (this.length === 1) ;
|
|
416
|
+
tag = tag + (selfClosing ? ' />' : '>') ;
|
|
431
417
|
|
|
432
418
|
// console.log('selfClosing == %@'.fmt(selfClosing));
|
|
433
|
-
strings[this.offset] = tag
|
|
434
|
-
tag.length = 0 ; // reset temporary object
|
|
419
|
+
strings[this.offset] = tag;
|
|
435
420
|
|
|
436
421
|
// now generate closing tag if needed...
|
|
437
422
|
if (!selfClosing) {
|
|
438
|
-
|
|
439
|
-
tag[1] = this._tagName;
|
|
440
|
-
tag[2] = '>';
|
|
441
|
-
strings.push(tag.join(''));
|
|
423
|
+
strings.push('</' + this._tagName + '>');
|
|
442
424
|
|
|
443
425
|
// increase length of receiver and all parents
|
|
444
426
|
var c = this;
|
|
445
427
|
while(c) { c.length++; c = c.prevObject; }
|
|
446
|
-
tag.length = 0; // reset temporary object again
|
|
447
428
|
}
|
|
448
429
|
|
|
449
430
|
// if there was a source element, cleanup to avoid memory leaks
|
|
@@ -748,7 +729,8 @@ SC.RenderContext = SC.Builder.create(
|
|
|
748
729
|
attr = this.$().attr('style');
|
|
749
730
|
|
|
750
731
|
if (attr && (attr = attr.toString()).length>0) {
|
|
751
|
-
|
|
732
|
+
// Ensure attributes are lower case for IE
|
|
733
|
+
if(SC.browser.name === SC.BROWSER.ie) {
|
|
752
734
|
attr = attr.toLowerCase();
|
|
753
735
|
}
|
|
754
736
|
styles = {};
|
|
@@ -791,13 +773,14 @@ SC.RenderContext = SC.Builder.create(
|
|
|
791
773
|
|
|
792
774
|
_deleteComboStyles: function(styles, key) {
|
|
793
775
|
var comboStyles = SC.COMBO_STYLES[key],
|
|
794
|
-
didChange = NO;
|
|
776
|
+
didChange = NO, tmp;
|
|
795
777
|
|
|
796
778
|
if (comboStyles) {
|
|
797
|
-
|
|
798
|
-
for (idx=0
|
|
799
|
-
|
|
800
|
-
|
|
779
|
+
|
|
780
|
+
for (var idx=0, idxLen = comboStyles.length; idx < idxLen; idx++) {
|
|
781
|
+
tmp = comboStyles[idx];
|
|
782
|
+
if (styles[tmp]) {
|
|
783
|
+
delete styles[tmp];
|
|
801
784
|
didChange = YES;
|
|
802
785
|
}
|
|
803
786
|
}
|
|
@@ -941,6 +924,22 @@ SC.RenderContext = SC.Builder.create(
|
|
|
941
924
|
return this ;
|
|
942
925
|
},
|
|
943
926
|
|
|
927
|
+
/**
|
|
928
|
+
Sets the named attribute on the tag. Note that if you set the 'class'
|
|
929
|
+
attribute or the 'styles' attribute, it will be ignored. Use the
|
|
930
|
+
relevant class name and style methods instead.
|
|
931
|
+
|
|
932
|
+
@param {String|Hash} nameOrAttrs the attr name or hash of attrs.
|
|
933
|
+
@param {String} value attribute value if attribute name was passed
|
|
934
|
+
@returns {SC.RenderContext} receiver
|
|
935
|
+
*/
|
|
936
|
+
removeAttr: function(name) {
|
|
937
|
+
if (this._elem) {
|
|
938
|
+
this.$().removeAttr(name);
|
|
939
|
+
return this;
|
|
940
|
+
}
|
|
941
|
+
},
|
|
942
|
+
|
|
944
943
|
//
|
|
945
944
|
// COREQUERY SUPPORT
|
|
946
945
|
//
|
|
@@ -985,7 +984,7 @@ SC.RenderContext = SC.Builder.create(
|
|
|
985
984
|
});
|
|
986
985
|
|
|
987
986
|
/**
|
|
988
|
-
html is an alias for push(). Makes
|
|
987
|
+
html is an alias for push(). Makes the object more CoreQuery like
|
|
989
988
|
*/
|
|
990
989
|
SC.RenderContext.fn.html = SC.RenderContext.fn.push;
|
|
991
990
|
|
|
@@ -994,38 +993,23 @@ SC.RenderContext.fn.html = SC.RenderContext.fn.push;
|
|
|
994
993
|
*/
|
|
995
994
|
SC.RenderContext.fn.css = SC.RenderContext.fn.addStyle;
|
|
996
995
|
|
|
996
|
+
(function() {
|
|
997
|
+
var _escapeHTMLRegex = /[&<>]/g, _escapeHTMLMethod = function(match) {
|
|
998
|
+
switch(match) {
|
|
999
|
+
case '&': return '&';
|
|
1000
|
+
case '<': return '<';
|
|
1001
|
+
case '>': return '>';
|
|
1002
|
+
}
|
|
1003
|
+
};
|
|
1004
|
+
|
|
997
1005
|
/**
|
|
998
1006
|
Helper method escapes the passed string to ensure HTML is displayed as
|
|
999
1007
|
plain text. You should make sure you pass all user-entered data through
|
|
1000
1008
|
this method to avoid errors. You can also do this with the text() helper
|
|
1001
1009
|
method on a render context.
|
|
1002
1010
|
*/
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
if (!SC.browser.isSafari || parseInt(SC.browser.version, 10) < 526) {
|
|
1006
|
-
SC.RenderContext._safari3 = YES;
|
|
1007
|
-
}
|
|
1008
|
-
|
|
1009
1011
|
SC.RenderContext.escapeHTML = function(text) {
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
if (SC.none(text)) { return text; } // ignore empty
|
|
1013
|
-
|
|
1014
|
-
elem = this.escapeHTMLElement;
|
|
1015
|
-
if (!elem) { elem = this.escapeHTMLElement = document.createElement('div'); }
|
|
1016
|
-
|
|
1017
|
-
node = this.escapeTextNode;
|
|
1018
|
-
if (!node) {
|
|
1019
|
-
node = this.escapeTextNode = document.createTextNode('');
|
|
1020
|
-
elem.appendChild(node);
|
|
1021
|
-
}
|
|
1022
|
-
|
|
1023
|
-
node.data = text ;
|
|
1024
|
-
ret = elem.innerHTML ;
|
|
1025
|
-
|
|
1026
|
-
// Safari 3 does not escape the '>' character
|
|
1027
|
-
if (SC.RenderContext._safari3) { ret = ret.replace(/>/g, '>'); }
|
|
1028
|
-
|
|
1029
|
-
node = elem = null;
|
|
1030
|
-
return ret ;
|
|
1012
|
+
if (!text) return '';
|
|
1013
|
+
return text.replace(_escapeHTMLRegex, _escapeHTMLMethod);
|
|
1031
1014
|
};
|
|
1015
|
+
})();
|
|
@@ -59,7 +59,7 @@ SC.Responder = SC.Object.extend( /** @scope SC.Responder.prototype */ {
|
|
|
59
59
|
hasFirstResponder: NO,
|
|
60
60
|
|
|
61
61
|
/** @property
|
|
62
|
-
Set to YES if your view is willing to accept first responder status. This is used when
|
|
62
|
+
Set to YES if your view is willing to accept first responder status. This is used when calculating key responder loop.
|
|
63
63
|
*/
|
|
64
64
|
acceptsFirstResponder: YES,
|
|
65
65
|
|
|
@@ -52,7 +52,7 @@ SC.RootResponder = SC.Object.extend(
|
|
|
52
52
|
/** @scope SC.RootResponder.prototype */{
|
|
53
53
|
|
|
54
54
|
/**
|
|
55
|
-
Contains a list of all panes currently visible on screen.
|
|
55
|
+
Contains a list of all panes currently visible on screen. Every time a
|
|
56
56
|
pane attaches or detaches, it will update itself in this array.
|
|
57
57
|
*/
|
|
58
58
|
panes: null,
|
|
@@ -224,8 +224,9 @@ SC.RootResponder = SC.Object.extend(
|
|
|
224
224
|
previousKeyPanes = this.get('previousKeyPanes') ;
|
|
225
225
|
|
|
226
226
|
newKeyPane = null ;
|
|
227
|
+
var candidate;
|
|
227
228
|
while (previousKeyPanes.length > 0) {
|
|
228
|
-
|
|
229
|
+
candidate = previousKeyPanes.pop();
|
|
229
230
|
if (candidate.get('isPaneAttached') && candidate.get('acceptsKeyPane')) {
|
|
230
231
|
newKeyPane = candidate ;
|
|
231
232
|
break ;
|
|
@@ -343,17 +344,19 @@ SC.RootResponder = SC.Object.extend(
|
|
|
343
344
|
Handle window focus. Change hasFocus and add sc-focus CSS class
|
|
344
345
|
(removing sc-blur). Also notify panes.
|
|
345
346
|
*/
|
|
346
|
-
focus: function() {
|
|
347
|
+
focus: function(evt) {
|
|
347
348
|
|
|
348
349
|
if (!this.get('hasFocus')) {
|
|
349
350
|
SC.$('body').addClass('sc-focus').removeClass('sc-blur');
|
|
350
351
|
|
|
351
352
|
// If the app is getting focus again set the first responder to the first
|
|
352
353
|
// valid firstResponder view in the view's tree
|
|
353
|
-
if(!SC.TABBING_ONLY_INSIDE_DOCUMENT){
|
|
354
|
-
var
|
|
355
|
-
|
|
356
|
-
|
|
354
|
+
if(!SC.TABBING_ONLY_INSIDE_DOCUMENT && !SC.browser.isIE8OrLower){
|
|
355
|
+
var keyPane = SC.RootResponder.responder.get('keyPane');
|
|
356
|
+
if (keyPane) {
|
|
357
|
+
var nextValidKeyView = keyPane.get('nextValidKeyView');
|
|
358
|
+
if (nextValidKeyView) keyPane.makeFirstResponder(nextValidKeyView);
|
|
359
|
+
}
|
|
357
360
|
}
|
|
358
361
|
|
|
359
362
|
SC.run(function() {
|
|
@@ -365,20 +368,22 @@ SC.RootResponder = SC.Object.extend(
|
|
|
365
368
|
|
|
366
369
|
/**
|
|
367
370
|
Handle window focus event for IE. Listening to the focus event is not
|
|
368
|
-
reliable as per every focus event you receive you
|
|
371
|
+
reliable as per every focus event you receive you immediately get a blur
|
|
369
372
|
event (Only on IE of course ;)
|
|
370
373
|
*/
|
|
371
|
-
focusin: function() {
|
|
372
|
-
this.
|
|
374
|
+
focusin: function(evt) {
|
|
375
|
+
if(this._focusTimeout) clearTimeout(this._focusTimeout);
|
|
376
|
+
this.focus(evt);
|
|
373
377
|
},
|
|
374
378
|
|
|
375
379
|
/**
|
|
376
380
|
Handle window blur event for IE. Listening to the focus event is not
|
|
377
|
-
reliable as per every focus event you receive you
|
|
381
|
+
reliable as per every focus event you receive you immediately get a blur
|
|
378
382
|
event (Only on IE of course ;)
|
|
379
383
|
*/
|
|
380
|
-
focusout: function() {
|
|
381
|
-
this
|
|
384
|
+
focusout: function(evt) {
|
|
385
|
+
var that = this;
|
|
386
|
+
this._focusTimeout = setTimeout(function(){that.blur(evt);}, 300);
|
|
382
387
|
},
|
|
383
388
|
|
|
384
389
|
|
|
@@ -386,7 +391,7 @@ SC.RootResponder = SC.Object.extend(
|
|
|
386
391
|
Handle window focus. Change hasFocus and add sc-focus CSS class (removing
|
|
387
392
|
sc-blur). Also notify panes.
|
|
388
393
|
*/
|
|
389
|
-
blur: function() {
|
|
394
|
+
blur: function(evt) {
|
|
390
395
|
if (this.get('hasFocus')) {
|
|
391
396
|
SC.$('body').addClass('sc-blur').removeClass('sc-focus');
|
|
392
397
|
|
|
@@ -631,7 +636,7 @@ SC.RootResponder = SC.Object.extend(
|
|
|
631
636
|
this.listenFor(['keydown', 'keyup', 'beforedeactivate', 'mousedown', 'mouseup', 'click', 'dblclick', 'mousemove', 'selectstart', 'contextmenu'], document)
|
|
632
637
|
.listenFor(['resize'], window);
|
|
633
638
|
|
|
634
|
-
if(SC.browser.
|
|
639
|
+
if(SC.browser.isIE8OrLower) this.listenFor(['focusin', 'focusout'], document);
|
|
635
640
|
else this.listenFor(['focus', 'blur'], window);
|
|
636
641
|
|
|
637
642
|
// handle animation events
|
|
@@ -642,26 +647,27 @@ SC.RootResponder = SC.Object.extend(
|
|
|
642
647
|
this.listenFor(['transitionend', SC.platform.cssPrefix+'TransitionEnd'], document);
|
|
643
648
|
}
|
|
644
649
|
|
|
645
|
-
// handle special case for keypress- you can't use normal listener to block
|
|
650
|
+
// handle special case for keypress- you can't use normal listener to block
|
|
651
|
+
// the backspace key on Mozilla
|
|
646
652
|
if (this.keypress) {
|
|
647
|
-
if (SC.CAPTURE_BACKSPACE_KEY && SC.browser.
|
|
653
|
+
if (SC.CAPTURE_BACKSPACE_KEY && SC.browser.isMozilla) {
|
|
648
654
|
var responder = this ;
|
|
649
655
|
document.onkeypress = function(e) {
|
|
650
656
|
e = SC.Event.normalizeEvent(e);
|
|
651
657
|
return responder.keypress.call(responder, e);
|
|
652
658
|
};
|
|
653
659
|
|
|
654
|
-
// SC.Event.add(window, 'unload', this, function() { document.onkeypress = null; }); // be sure to cleanup memory leaks
|
|
655
|
-
|
|
656
660
|
// Otherwise, just add a normal event handler.
|
|
657
|
-
} else
|
|
661
|
+
} else {
|
|
662
|
+
SC.Event.add(document, 'keypress', this, this.keypress);
|
|
663
|
+
}
|
|
658
664
|
}
|
|
659
665
|
|
|
660
666
|
// handle these two events specially in IE
|
|
661
667
|
['drag', 'selectstart'].forEach(function(keyName) {
|
|
662
668
|
var method = this[keyName] ;
|
|
663
669
|
if (method) {
|
|
664
|
-
if (SC.browser.
|
|
670
|
+
if (SC.browser.isIE) {
|
|
665
671
|
var responder = this ;
|
|
666
672
|
document.body['on' + keyName] = function(e) {
|
|
667
673
|
// return method.call(responder, SC.Event.normalizeEvent(e));
|
|
@@ -682,9 +688,9 @@ SC.RootResponder = SC.Object.extend(
|
|
|
682
688
|
var mousewheel = 'mousewheel';
|
|
683
689
|
|
|
684
690
|
// Firefox emits different mousewheel events than other browsers
|
|
685
|
-
if (SC.browser.
|
|
686
|
-
// For Firefox <3.5, subscribe to DOMMouseScroll events
|
|
687
|
-
if (SC.browser.
|
|
691
|
+
if (SC.browser.isMozilla) {
|
|
692
|
+
// For Firefox < 3.5, subscribe to DOMMouseScroll events
|
|
693
|
+
if (SC.browser.compare(SC.browser.engineVersion, '1.9.1') < 0) {
|
|
688
694
|
mousewheel = 'DOMMouseScroll';
|
|
689
695
|
|
|
690
696
|
// For Firefox 3.5 and greater, we can listen for MozMousePixelScroll,
|
|
@@ -699,7 +705,8 @@ SC.RootResponder = SC.Object.extend(
|
|
|
699
705
|
// do some initial set
|
|
700
706
|
this.set('currentWindowSize', this.computeWindowSize()) ;
|
|
701
707
|
|
|
702
|
-
|
|
708
|
+
// TODO: Is this workaround still valid?
|
|
709
|
+
if (SC.browser.os === SC.OS.ios && SC.browser.name === SC.BROWSER.safari) {
|
|
703
710
|
|
|
704
711
|
// If the browser is identifying itself as a touch-enabled browser, but
|
|
705
712
|
// touch events are not present, assume this is a desktop browser doing
|
|
@@ -757,28 +764,7 @@ SC.RootResponder = SC.Object.extend(
|
|
|
757
764
|
// move element back into document...
|
|
758
765
|
pen.appendChild(target);
|
|
759
766
|
|
|
760
|
-
//
|
|
761
|
-
// // be a text node, so make sure we handle that case.
|
|
762
|
-
// textNode = (target.nodeType === 3);
|
|
763
|
-
//
|
|
764
|
-
// if (textNode && target.parentElement) {
|
|
765
|
-
// // Hide the text node's parent element if it has one
|
|
766
|
-
// target = target.parentElement;
|
|
767
|
-
// target.style.display = 'none';
|
|
768
|
-
// } else if (textNode) {
|
|
769
|
-
// // We have a text node with no containing element,
|
|
770
|
-
// // so just erase its text content.
|
|
771
|
-
// target.nodeValue = '';
|
|
772
|
-
// } else {
|
|
773
|
-
// // Standard Element, just toggle its display off.
|
|
774
|
-
// target.style.display = 'none';
|
|
775
|
-
// }
|
|
776
|
-
//
|
|
777
|
-
// // Now move the captured and hidden element back to the DOM.
|
|
778
|
-
// document.body.appendChild(target);
|
|
779
|
-
|
|
780
|
-
// ...and save the element to be garbage collected on
|
|
781
|
-
// touchEnd.
|
|
767
|
+
// ...and save the element to be garbage collected on touchEnd.
|
|
782
768
|
touches[touch]._rescuedElement = target;
|
|
783
769
|
}
|
|
784
770
|
}
|
|
@@ -788,17 +774,14 @@ SC.RootResponder = SC.Object.extend(
|
|
|
788
774
|
}
|
|
789
775
|
},
|
|
790
776
|
|
|
791
|
-
//
|
|
777
|
+
// ...........................................................................
|
|
792
778
|
// TOUCH SUPPORT
|
|
793
779
|
//
|
|
794
780
|
/*
|
|
795
|
-
|
|
796
|
-
simple, but I decided to write out in great detail all of the rules so there would
|
|
797
|
-
be no confusion.
|
|
781
|
+
There are three events: touchStart, touchEnd and touchesDragged.
|
|
798
782
|
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
event
|
|
783
|
+
The touchStart and touchEnd events are called individually for each touch.
|
|
784
|
+
The touchesDragged events are sent to whichever view owns the touch event.
|
|
802
785
|
*/
|
|
803
786
|
|
|
804
787
|
/**
|
|
@@ -1266,6 +1249,11 @@ SC.RootResponder = SC.Object.extend(
|
|
|
1266
1249
|
@returns {Boolean}
|
|
1267
1250
|
*/
|
|
1268
1251
|
touchstart: function(evt) {
|
|
1252
|
+
// Starting iOS5 touch events are handled by textfields.
|
|
1253
|
+
// As a workaround just let the browser to use the default behavior.
|
|
1254
|
+
if(this.ignoreTouchHandle(evt)) return YES;
|
|
1255
|
+
|
|
1256
|
+
|
|
1269
1257
|
var hidingTouchIntercept = NO;
|
|
1270
1258
|
|
|
1271
1259
|
SC.run(function() {
|
|
@@ -1329,6 +1317,10 @@ SC.RootResponder = SC.Object.extend(
|
|
|
1329
1317
|
used to keep track of when a specific type of touch event was last handled, to see if it needs to be re-handled
|
|
1330
1318
|
*/
|
|
1331
1319
|
touchmove: function(evt) {
|
|
1320
|
+
// Starting iOS5 touch events are handled by textfields.
|
|
1321
|
+
// As a workaround just let the browser to use the default behavior.
|
|
1322
|
+
if(this.ignoreTouchHandle(evt)) return YES;
|
|
1323
|
+
|
|
1332
1324
|
SC.run(function() {
|
|
1333
1325
|
// pretty much all we gotta do is update touches, and figure out which views need updating.
|
|
1334
1326
|
var touches = evt.changedTouches, touch, touchEntry,
|
|
@@ -1423,6 +1415,10 @@ SC.RootResponder = SC.Object.extend(
|
|
|
1423
1415
|
touchend: function(evt) {
|
|
1424
1416
|
var hidesTouchIntercept = NO;
|
|
1425
1417
|
|
|
1418
|
+
// Starting iOS5 touch events are handled by textfields.
|
|
1419
|
+
// As a workaround just let the browser to use the default behavior.
|
|
1420
|
+
if(this.ignoreTouchHandle(evt)) return YES;
|
|
1421
|
+
|
|
1426
1422
|
SC.run(function() {
|
|
1427
1423
|
var touches = evt.changedTouches, touch, touchEntry,
|
|
1428
1424
|
idx, len = touches.length,
|
|
@@ -1485,6 +1481,21 @@ SC.RootResponder = SC.Object.extend(
|
|
|
1485
1481
|
this.touchend(evt);
|
|
1486
1482
|
},
|
|
1487
1483
|
|
|
1484
|
+
/** @private
|
|
1485
|
+
Ignore Touch events on textfields and links. starting iOS 5 textfields
|
|
1486
|
+
get touch events. Textfields just need to get the default focus action.
|
|
1487
|
+
*/
|
|
1488
|
+
ignoreTouchHandle: function(evt) {
|
|
1489
|
+
if(SC.browser.isMobileSafari){
|
|
1490
|
+
var tag = evt.target.tagName;
|
|
1491
|
+
if(tag==="INPUT" || tag==="A"){
|
|
1492
|
+
evt.allowDefault();
|
|
1493
|
+
return YES;
|
|
1494
|
+
}
|
|
1495
|
+
}
|
|
1496
|
+
return NO;
|
|
1497
|
+
},
|
|
1498
|
+
|
|
1488
1499
|
// ..........................................................
|
|
1489
1500
|
// KEYBOARD HANDLING
|
|
1490
1501
|
//
|
|
@@ -1578,11 +1589,16 @@ SC.RootResponder = SC.Object.extend(
|
|
|
1578
1589
|
|
|
1579
1590
|
All actions that might cause an actual insertion of text are handled in
|
|
1580
1591
|
the keypress event.
|
|
1592
|
+
|
|
1593
|
+
References:
|
|
1594
|
+
http://www.quirksmode.org/js/keys.html
|
|
1595
|
+
https://developer.mozilla.org/en/DOM/KeyboardEvent
|
|
1596
|
+
http://msdn.microsoft.com/library/ff974342.aspx
|
|
1581
1597
|
*/
|
|
1582
1598
|
keydown: function(evt) {
|
|
1583
1599
|
if (SC.none(evt)) return YES;
|
|
1584
1600
|
var keyCode = evt.keyCode;
|
|
1585
|
-
if(SC.browser.
|
|
1601
|
+
if(SC.browser.isMozilla && evt.keyCode===9){
|
|
1586
1602
|
this.keydownCounter=1;
|
|
1587
1603
|
}
|
|
1588
1604
|
// Fix for IME input (japanese, mandarin).
|
|
@@ -1603,7 +1619,7 @@ SC.RootResponder = SC.Object.extend(
|
|
|
1603
1619
|
}
|
|
1604
1620
|
|
|
1605
1621
|
// Firefox does NOT handle delete here...
|
|
1606
|
-
if (SC.browser.
|
|
1622
|
+
if (SC.browser.isMozilla && (evt.which === 8)) return true ;
|
|
1607
1623
|
|
|
1608
1624
|
// modifier keys are handled separately by the 'flagsChanged' event
|
|
1609
1625
|
// send event for modifier key changes, but only stop processing if this
|
|
@@ -1624,7 +1640,7 @@ SC.RootResponder = SC.Object.extend(
|
|
|
1624
1640
|
// processing.
|
|
1625
1641
|
|
|
1626
1642
|
// Arrow keys are handled in keypress for firefox
|
|
1627
|
-
if (keyCode>=37 && keyCode<=40 && SC.browser.
|
|
1643
|
+
if (keyCode>=37 && keyCode<=40 && SC.browser.isMozilla) return YES;
|
|
1628
1644
|
|
|
1629
1645
|
|
|
1630
1646
|
ret = this.sendEvent('keyDown', evt) ;
|
|
@@ -1652,9 +1668,9 @@ SC.RootResponder = SC.Object.extend(
|
|
|
1652
1668
|
keypress: function(evt) {
|
|
1653
1669
|
var ret,
|
|
1654
1670
|
keyCode = evt.keyCode,
|
|
1655
|
-
isFirefox =
|
|
1671
|
+
isFirefox = SC.browser.isMozilla;
|
|
1656
1672
|
|
|
1657
|
-
if(
|
|
1673
|
+
if(isFirefox && evt.keyCode===9){
|
|
1658
1674
|
this.keydownCounter++;
|
|
1659
1675
|
if(this.keydownCounter==2) return YES;
|
|
1660
1676
|
}
|
|
@@ -1672,7 +1688,10 @@ SC.RootResponder = SC.Object.extend(
|
|
|
1672
1688
|
charCode = evt.charCode;
|
|
1673
1689
|
if ((charCode !== undefined && charCode === 0 && evt.keyCode!==9) && !isFirefoxArrowKeys) return YES;
|
|
1674
1690
|
if (isFirefoxArrowKeys) evt.which = keyCode;
|
|
1675
|
-
|
|
1691
|
+
|
|
1692
|
+
// we only want to rethrow if this is a printable key so that we don't
|
|
1693
|
+
// duplicate the event sent in keydown when a modifier key is pressed
|
|
1694
|
+
if(isFirefoxArrowKeys || !this._isFunctionOrNonPrintableKey(evt)) return this.sendEvent('keyDown', evt) ? evt.hasCustomEventHandling:YES;
|
|
1676
1695
|
}
|
|
1677
1696
|
},
|
|
1678
1697
|
|
|
@@ -1698,7 +1717,7 @@ SC.RootResponder = SC.Object.extend(
|
|
|
1698
1717
|
IE's default behavior to blur textfields and other controls can only be
|
|
1699
1718
|
blocked by returning NO to this event. However we don't want to block
|
|
1700
1719
|
its default behavior otherwise textfields won't lose focus by clicking on
|
|
1701
|
-
an empty area as it's expected. If you want to block IE from
|
|
1720
|
+
an empty area as it's expected. If you want to block IE from blurring another
|
|
1702
1721
|
control set blockIEDeactivate to true on the specific view in which you
|
|
1703
1722
|
want to avoid this. Think of an autocomplete menu, you want to click on
|
|
1704
1723
|
the menu but don't loose focus.
|
|
@@ -1707,7 +1726,7 @@ SC.RootResponder = SC.Object.extend(
|
|
|
1707
1726
|
var toElement = evt.toElement;
|
|
1708
1727
|
if (toElement && toElement.tagName && toElement.tagName!=="IFRAME") {
|
|
1709
1728
|
var view = SC.$(toElement).view()[0];
|
|
1710
|
-
//The following line is
|
|
1729
|
+
//The following line is necessary to allow/block text selection for IE,
|
|
1711
1730
|
// in combination with the selectstart event.
|
|
1712
1731
|
if (view && view.get('blocksIEDeactivate')) return NO;
|
|
1713
1732
|
}
|
|
@@ -1719,6 +1738,8 @@ SC.RootResponder = SC.Object.extend(
|
|
|
1719
1738
|
//
|
|
1720
1739
|
|
|
1721
1740
|
mousedown: function(evt) {
|
|
1741
|
+
var fr;
|
|
1742
|
+
|
|
1722
1743
|
if (SC.platform.touch) {
|
|
1723
1744
|
evt.allowDefault();
|
|
1724
1745
|
this._lastMouseDownCustomHandling = YES;
|
|
@@ -1742,7 +1763,7 @@ SC.RootResponder = SC.Object.extend(
|
|
|
1742
1763
|
this._lastMouseDownX = evt.clientX ;
|
|
1743
1764
|
this._lastMouseDownY = evt.clientY ;
|
|
1744
1765
|
|
|
1745
|
-
var
|
|
1766
|
+
var view = this.targetViewForEvent(evt);
|
|
1746
1767
|
|
|
1747
1768
|
// InlineTextField needs to loose firstResponder whenever you click outside
|
|
1748
1769
|
// the view. This is a special case as textfields are not supposed to loose
|
|
@@ -1751,10 +1772,12 @@ SC.RootResponder = SC.Object.extend(
|
|
|
1751
1772
|
|
|
1752
1773
|
if(view) fr=view.getPath('pane.firstResponder');
|
|
1753
1774
|
|
|
1754
|
-
|
|
1755
|
-
|
|
1775
|
+
// some fields like SC.InlineTextFieldView need to blur on any click, even
|
|
1776
|
+
// if it's not on a control that can be focused
|
|
1777
|
+
// TODO: remove this when focus behavior is improved
|
|
1778
|
+
if(fr && fr.get('blurOnMouseDown') && fr!==view){
|
|
1779
|
+
fr.resignFirstResponder(evt);
|
|
1756
1780
|
}
|
|
1757
|
-
|
|
1758
1781
|
view = this._mouseDownView = this.sendEvent('mouseDown', evt, view) ;
|
|
1759
1782
|
if (view && view.respondsTo('mouseDragged')) this._mouseCanDrag = YES ;
|
|
1760
1783
|
|
|
@@ -1775,6 +1798,7 @@ SC.RootResponder = SC.Object.extend(
|
|
|
1775
1798
|
sent.
|
|
1776
1799
|
*/
|
|
1777
1800
|
mouseup: function(evt) {
|
|
1801
|
+
var clickOrDoubleClickDidTrigger=NO;
|
|
1778
1802
|
if (SC.platform.touch) {
|
|
1779
1803
|
evt.allowDefault();
|
|
1780
1804
|
this._lastMouseUpCustomHandling = YES;
|
|
@@ -1800,16 +1824,18 @@ SC.RootResponder = SC.Object.extend(
|
|
|
1800
1824
|
// try doubleClick
|
|
1801
1825
|
if (!handler && (this._clickCount === 2)) {
|
|
1802
1826
|
handler = this.sendEvent('doubleClick', evt, view) ;
|
|
1827
|
+
clickOrDoubleClickDidTrigger = YES;
|
|
1803
1828
|
}
|
|
1804
1829
|
|
|
1805
1830
|
// try single click
|
|
1806
1831
|
if (!handler) {
|
|
1807
1832
|
handler = this.sendEvent('click', evt, view) ;
|
|
1833
|
+
clickOrDoubleClickDidTrigger = YES;
|
|
1808
1834
|
}
|
|
1809
1835
|
}
|
|
1810
1836
|
|
|
1811
1837
|
// try whoever's under the mouse if we haven't handle the mouse up yet
|
|
1812
|
-
if (!handler) {
|
|
1838
|
+
if (!handler && !clickOrDoubleClickDidTrigger) {
|
|
1813
1839
|
|
|
1814
1840
|
// try doubleClick
|
|
1815
1841
|
if (this._clickCount === 2) {
|
|
@@ -1859,7 +1885,7 @@ SC.RootResponder = SC.Object.extend(
|
|
|
1859
1885
|
},
|
|
1860
1886
|
|
|
1861
1887
|
dblclick: function(evt){
|
|
1862
|
-
if (SC.browser.
|
|
1888
|
+
if (SC.browser.isIE8OrLower) {
|
|
1863
1889
|
this._clickCount = 2;
|
|
1864
1890
|
// this._onmouseup(evt);
|
|
1865
1891
|
this.mouseup(evt);
|
|
@@ -1890,7 +1916,7 @@ SC.RootResponder = SC.Object.extend(
|
|
|
1890
1916
|
return YES;
|
|
1891
1917
|
}
|
|
1892
1918
|
|
|
1893
|
-
if (SC.browser.
|
|
1919
|
+
if (SC.browser.isIE) {
|
|
1894
1920
|
if (this._lastMoveX === evt.clientX && this._lastMoveY === evt.clientY) return;
|
|
1895
1921
|
}
|
|
1896
1922
|
|
|
@@ -1900,14 +1926,14 @@ SC.RootResponder = SC.Object.extend(
|
|
|
1900
1926
|
this._lastMoveY = evt.clientY;
|
|
1901
1927
|
|
|
1902
1928
|
SC.run(function() {
|
|
1903
|
-
// make sure the view gets focus no matter what. FF is
|
|
1929
|
+
// make sure the view gets focus no matter what. FF is inconsistent
|
|
1904
1930
|
// about this.
|
|
1905
1931
|
// this.focus();
|
|
1906
1932
|
// only do mouse[Moved|Entered|Exited|Dragged] if not in a drag session
|
|
1907
1933
|
// drags send their own events, e.g. drag[Moved|Entered|Exited]
|
|
1908
1934
|
if (this._drag) {
|
|
1909
1935
|
//IE triggers mousemove at the same time as mousedown
|
|
1910
|
-
if(SC.browser.
|
|
1936
|
+
if(SC.browser.isIE){
|
|
1911
1937
|
if (this._lastMouseDownX !== evt.clientX || this._lastMouseDownY !== evt.clientY) {
|
|
1912
1938
|
this._drag.tryToPerform('mouseDragged', evt);
|
|
1913
1939
|
}
|
|
@@ -1954,7 +1980,7 @@ SC.RootResponder = SC.Object.extend(
|
|
|
1954
1980
|
// also, if a mouseDownView exists, call the mouseDragged action, if
|
|
1955
1981
|
// it exists.
|
|
1956
1982
|
if (this._mouseDownView) {
|
|
1957
|
-
if(SC.browser.
|
|
1983
|
+
if(SC.browser.isIE){
|
|
1958
1984
|
if (this._lastMouseDownX !== evt.clientX && this._lastMouseDownY !== evt.clientY) {
|
|
1959
1985
|
this._mouseDownView.tryToPerform('mouseDragged', evt);
|
|
1960
1986
|
}
|