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
|
@@ -294,7 +294,7 @@ var QUnit = {
|
|
|
294
294
|
},
|
|
295
295
|
|
|
296
296
|
/**
|
|
297
|
-
* Specify the number of expected assertions to
|
|
297
|
+
* Specify the number of expected assertions to guarantee that failed test (no assertions are run at all) don't slip through.
|
|
298
298
|
*/
|
|
299
299
|
expect: function(asserts) {
|
|
300
300
|
config.current.expected = asserts;
|
|
@@ -322,7 +322,7 @@ var QUnit = {
|
|
|
322
322
|
* Checks that the first two arguments are equal, with an optional message.
|
|
323
323
|
* Prints out both actual and expected values.
|
|
324
324
|
*
|
|
325
|
-
*
|
|
325
|
+
* Preferred to ok( actual == expected, message )
|
|
326
326
|
*
|
|
327
327
|
* @example equal( format("Received {0} bytes.", 2), "Received 2 bytes." );
|
|
328
328
|
*
|
|
@@ -972,7 +972,7 @@ QUnit.equiv = function () {
|
|
|
972
972
|
// for string, boolean, number and null
|
|
973
973
|
function useStrictEquality(b, a) {
|
|
974
974
|
if (b instanceof a.constructor || a instanceof b.constructor) {
|
|
975
|
-
// to catch short
|
|
975
|
+
// to catch short annotation VS 'new' annotation of a declaration
|
|
976
976
|
// e.g. var i = 1;
|
|
977
977
|
// var j = new Number(1);
|
|
978
978
|
return a == b;
|
|
@@ -999,7 +999,7 @@ QUnit.equiv = function () {
|
|
|
999
999
|
"regexp": function (b, a) {
|
|
1000
1000
|
return QUnit.objectType(b) === "regexp" &&
|
|
1001
1001
|
a.source === b.source && // the regex itself
|
|
1002
|
-
a.global === b.global && // and its
|
|
1002
|
+
a.global === b.global && // and its modifiers (gmi) ...
|
|
1003
1003
|
a.ignoreCase === b.ignoreCase &&
|
|
1004
1004
|
a.multiline === b.multiline;
|
|
1005
1005
|
},
|
|
@@ -1033,7 +1033,7 @@ QUnit.equiv = function () {
|
|
|
1033
1033
|
loop = false;
|
|
1034
1034
|
for(j=0;j<parents.length;j++){
|
|
1035
1035
|
if(parents[j] === a[i]){
|
|
1036
|
-
loop = true;//
|
|
1036
|
+
loop = true;//do not rewalk array
|
|
1037
1037
|
}
|
|
1038
1038
|
}
|
|
1039
1039
|
if (!loop && ! innerEquiv(a[i], b[i])) {
|
|
@@ -90,7 +90,7 @@ SC.routes = SC.Object.create(
|
|
|
90
90
|
|
|
91
91
|
<base href="http://domain.tld/my_app">
|
|
92
92
|
|
|
93
|
-
The value can also be customized before or during the
|
|
93
|
+
The value can also be customized before or during the execution of the
|
|
94
94
|
main() method.
|
|
95
95
|
|
|
96
96
|
@see http://www.w3.org/TR/html5/semantics.html#the-base-element
|
|
@@ -219,7 +219,7 @@ SC.routes = SC.Object.create(
|
|
|
219
219
|
}.property(),
|
|
220
220
|
|
|
221
221
|
/*
|
|
222
|
-
Works exactly like 'location' but you
|
|
222
|
+
Works exactly like 'location' but you use this property only when
|
|
223
223
|
you want to just change the location w/out triggering the routes
|
|
224
224
|
*/
|
|
225
225
|
informLocation: function(key, value){
|
|
@@ -514,7 +514,7 @@ SC.routes = SC.Object.create(
|
|
|
514
514
|
}
|
|
515
515
|
}
|
|
516
516
|
|
|
517
|
-
// else, try to match a
|
|
517
|
+
// else, try to match a wildcard route
|
|
518
518
|
for (key in this.wildcardRoutes) {
|
|
519
519
|
parts.unshift(part);
|
|
520
520
|
params[key] = parts.join('/');
|
|
@@ -0,0 +1,540 @@
|
|
|
1
|
+
// ==========================================================================
|
|
2
|
+
// Project: SproutCore - JavaScript Application Framework
|
|
3
|
+
// Copyright: ©2006-2011 Strobe Inc. and contributors.
|
|
4
|
+
// Portions ©2008-2011 Apple Inc. All rights reserved.
|
|
5
|
+
// License: Licensed under MIT license (see license.js)
|
|
6
|
+
// ==========================================================================
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
@class
|
|
10
|
+
|
|
11
|
+
SC.routes manages the browser location. You can change the hash part of the
|
|
12
|
+
current location. The following code
|
|
13
|
+
|
|
14
|
+
SC.routes.set('location', 'notes/edit/4');
|
|
15
|
+
|
|
16
|
+
will change the location to http://domain.tld/my_app#notes/edit/4. Adding
|
|
17
|
+
routes will register a handler that will be called whenever the location
|
|
18
|
+
changes and matches the route:
|
|
19
|
+
|
|
20
|
+
SC.routes.add(':controller/:action/:id', MyApp, MyApp.route);
|
|
21
|
+
|
|
22
|
+
You can pass additional parameters in the location hash that will be relayed
|
|
23
|
+
to the route handler:
|
|
24
|
+
|
|
25
|
+
SC.routes.set('location', 'notes/show/4?format=xml&language=fr');
|
|
26
|
+
|
|
27
|
+
The syntax for the location hash is described in the location property
|
|
28
|
+
documentation, and the syntax for adding handlers is described in the
|
|
29
|
+
add method documentation.
|
|
30
|
+
|
|
31
|
+
Browsers keep track of the locations in their history, so when the user
|
|
32
|
+
presses the 'back' or 'forward' button, the location is changed, SC.route
|
|
33
|
+
catches it and calls your handler. Except for Internet Explorer versions 7
|
|
34
|
+
and earlier, which do not modify the history stack when the location hash
|
|
35
|
+
changes.
|
|
36
|
+
|
|
37
|
+
SC.routes also supports HTML5 history, which uses a '/' instead of a '#'
|
|
38
|
+
in the URLs, so that all your website's URLs are consistent.
|
|
39
|
+
*/
|
|
40
|
+
SC.routes = SC.Object.create(
|
|
41
|
+
/** @scope SC.routes.prototype */{
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
Set this property to YES if you want to use HTML5 history, if available on
|
|
45
|
+
the browser, instead of the location hash.
|
|
46
|
+
|
|
47
|
+
HTML 5 history uses the history.pushState method and the window's popstate
|
|
48
|
+
event.
|
|
49
|
+
|
|
50
|
+
By default it is NO, so your URLs will look like:
|
|
51
|
+
|
|
52
|
+
http://domain.tld/my_app#notes/edit/4
|
|
53
|
+
|
|
54
|
+
If set to YES and the browser supports pushState(), your URLs will look
|
|
55
|
+
like:
|
|
56
|
+
|
|
57
|
+
http://domain.tld/my_app/notes/edit/4
|
|
58
|
+
|
|
59
|
+
You will also need to make sure that baseURI is properly configured, as
|
|
60
|
+
well as your server so that your routes are properly pointing to your
|
|
61
|
+
SproutCore application.
|
|
62
|
+
|
|
63
|
+
@see http://dev.w3.org/html5/spec/history.html#the-history-interface
|
|
64
|
+
@property
|
|
65
|
+
@type {Boolean}
|
|
66
|
+
*/
|
|
67
|
+
wantsHistory: NO,
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
A read-only boolean indicating whether or not HTML5 history is used. Based
|
|
71
|
+
on the value of wantsHistory and the browser's support for pushState.
|
|
72
|
+
|
|
73
|
+
@see wantsHistory
|
|
74
|
+
@property
|
|
75
|
+
@type {Boolean}
|
|
76
|
+
*/
|
|
77
|
+
usesHistory: null,
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
The base URI used to resolve routes (which are relative URLs). Only used
|
|
81
|
+
when usesHistory is equal to YES.
|
|
82
|
+
|
|
83
|
+
The build tools automatically configure this value if you have the
|
|
84
|
+
html5_history option activated in the Buildfile:
|
|
85
|
+
|
|
86
|
+
config :my_app, :html5_history => true
|
|
87
|
+
|
|
88
|
+
Alternatively, it uses by default the value of the href attribute of the
|
|
89
|
+
<base> tag of the HTML document. For example:
|
|
90
|
+
|
|
91
|
+
<base href="http://domain.tld/my_app">
|
|
92
|
+
<<<<<<< HEAD
|
|
93
|
+
|
|
94
|
+
=======
|
|
95
|
+
|
|
96
|
+
>>>>>>> Fixed misspellings in comments and in a few tests
|
|
97
|
+
The value can also be customized before or during the execution of the
|
|
98
|
+
main() method.
|
|
99
|
+
|
|
100
|
+
@see http://www.w3.org/TR/html5/semantics.html#the-base-element
|
|
101
|
+
@property
|
|
102
|
+
@type {String}
|
|
103
|
+
*/
|
|
104
|
+
baseURI: document.baseURI,
|
|
105
|
+
|
|
106
|
+
/** @private
|
|
107
|
+
A boolean value indicating whether or not the ping method has been called
|
|
108
|
+
to setup the SC.routes.
|
|
109
|
+
|
|
110
|
+
@property
|
|
111
|
+
@type {Boolean}
|
|
112
|
+
*/
|
|
113
|
+
_didSetup: NO,
|
|
114
|
+
|
|
115
|
+
/** @private
|
|
116
|
+
Internal representation of the current location hash.
|
|
117
|
+
|
|
118
|
+
@property
|
|
119
|
+
@type {String}
|
|
120
|
+
*/
|
|
121
|
+
_location: null,
|
|
122
|
+
|
|
123
|
+
/** @private
|
|
124
|
+
Routes are stored in a tree structure, this is the root node.
|
|
125
|
+
|
|
126
|
+
@property
|
|
127
|
+
@type {SC.routes._Route}
|
|
128
|
+
*/
|
|
129
|
+
_firstRoute: null,
|
|
130
|
+
|
|
131
|
+
/** @private
|
|
132
|
+
Internal method used to extract and merge the parameters of a URL.
|
|
133
|
+
|
|
134
|
+
@returns {Hash}
|
|
135
|
+
*/
|
|
136
|
+
_extractParametersAndRoute: function(obj) {
|
|
137
|
+
var params = {},
|
|
138
|
+
route = obj.route || '',
|
|
139
|
+
separator, parts, i, len, crumbs, key;
|
|
140
|
+
|
|
141
|
+
separator = (route.indexOf('?') < 0 && route.indexOf('&') >= 0) ? '&' : '?';
|
|
142
|
+
parts = route.split(separator);
|
|
143
|
+
route = parts[0];
|
|
144
|
+
if (parts.length === 1) {
|
|
145
|
+
parts = [];
|
|
146
|
+
} else if (parts.length === 2) {
|
|
147
|
+
parts = parts[1].split('&');
|
|
148
|
+
} else if (parts.length > 2) {
|
|
149
|
+
parts.shift();
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// extract the parameters from the route string
|
|
153
|
+
len = parts.length;
|
|
154
|
+
for (i = 0; i < len; ++i) {
|
|
155
|
+
crumbs = parts[i].split('=');
|
|
156
|
+
params[crumbs[0]] = crumbs[1];
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// overlay any parameter passed in obj
|
|
160
|
+
for (key in obj) {
|
|
161
|
+
if (obj.hasOwnProperty(key) && key !== 'route') {
|
|
162
|
+
params[key] = '' + obj[key];
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// build the route
|
|
167
|
+
parts = [];
|
|
168
|
+
for (key in params) {
|
|
169
|
+
parts.push([key, params[key]].join('='));
|
|
170
|
+
}
|
|
171
|
+
params.params = separator + parts.join('&');
|
|
172
|
+
params.route = route;
|
|
173
|
+
|
|
174
|
+
return params;
|
|
175
|
+
},
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
The current location hash. It is the part in the browser's location after
|
|
179
|
+
the '#' mark.
|
|
180
|
+
|
|
181
|
+
The following code
|
|
182
|
+
|
|
183
|
+
SC.routes.set('location', 'notes/edit/4');
|
|
184
|
+
|
|
185
|
+
will change the location to http://domain.tld/my_app#notes/edit/4 and call
|
|
186
|
+
the correct route handler if it has been registered with the add method.
|
|
187
|
+
|
|
188
|
+
You can also pass additional parameters. They will be relayed to the route
|
|
189
|
+
handler. For example, the following code
|
|
190
|
+
|
|
191
|
+
SC.routes.add(':controller/:action/:id', MyApp, MyApp.route);
|
|
192
|
+
SC.routes.set('location', 'notes/show/4?format=xml&language=fr');
|
|
193
|
+
|
|
194
|
+
will change the location to
|
|
195
|
+
http://domain.tld/my_app#notes/show/4?format=xml&language=fr and call the
|
|
196
|
+
MyApp.route method with the following argument:
|
|
197
|
+
|
|
198
|
+
{ route: 'notes/show/4',
|
|
199
|
+
params: '?format=xml&language=fr',
|
|
200
|
+
controller: 'notes',
|
|
201
|
+
action: 'show',
|
|
202
|
+
id: '4',
|
|
203
|
+
format: 'xml',
|
|
204
|
+
language: 'fr' }
|
|
205
|
+
|
|
206
|
+
The location can also be set with a hash, the following code
|
|
207
|
+
|
|
208
|
+
SC.routes.set('location',
|
|
209
|
+
{ route: 'notes/edit/4', format: 'xml', language: 'fr' });
|
|
210
|
+
|
|
211
|
+
will change the location to
|
|
212
|
+
http://domain.tld/my_app#notes/show/4?format=xml&language=fr.
|
|
213
|
+
|
|
214
|
+
The 'notes/show/4&format=xml&language=fr' syntax for passing parameters,
|
|
215
|
+
using a '&' instead of a '?', as used in SproutCore 1.0 is still supported.
|
|
216
|
+
|
|
217
|
+
@property
|
|
218
|
+
@type {String}
|
|
219
|
+
*/
|
|
220
|
+
location: function(key, value) {
|
|
221
|
+
this._skipRoute = NO;
|
|
222
|
+
return this._extractLocation(key, value);
|
|
223
|
+
}.property(),
|
|
224
|
+
|
|
225
|
+
/*
|
|
226
|
+
<<<<<<< HEAD
|
|
227
|
+
Works exactly like 'location' but you use this property only when
|
|
228
|
+
=======
|
|
229
|
+
Works exactly like 'location' but you use this property only when
|
|
230
|
+
>>>>>>> Fixed misspellings in comments and in a few tests
|
|
231
|
+
you want to just change the location w/out triggering the routes
|
|
232
|
+
*/
|
|
233
|
+
informLocation: function(key, value){
|
|
234
|
+
this._skipRoute = YES;
|
|
235
|
+
// This is a very special case where this property
|
|
236
|
+
// has a very heavy influence on the 'location' property
|
|
237
|
+
// this is a case where you might want to use idempotent
|
|
238
|
+
// but you would take a performance hit because it is possible
|
|
239
|
+
// call set() multiple time and we don't want to take the extra
|
|
240
|
+
// cost, so we just invalidate the cached set() value ourselves
|
|
241
|
+
// you shouldn't do this in your own code unless you REALLY
|
|
242
|
+
// know what you are doing.
|
|
243
|
+
var lsk = this.location.lastSetValueKey;
|
|
244
|
+
if (lsk && this._kvo_cache) this._kvo_cache[lsk] = value;
|
|
245
|
+
return this._extractLocation(key, value);
|
|
246
|
+
}.property(),
|
|
247
|
+
|
|
248
|
+
_extractLocation: function(key, value) {
|
|
249
|
+
var crumbs, encodedValue;
|
|
250
|
+
|
|
251
|
+
if (value !== undefined) {
|
|
252
|
+
if (value === null) {
|
|
253
|
+
value = '';
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
if (typeof(value) === 'object') {
|
|
257
|
+
crumbs = this._extractParametersAndRoute(value);
|
|
258
|
+
value = crumbs.route + crumbs.params;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
if (!SC.empty(value) || (this._location && this._location !== value)) {
|
|
262
|
+
encodedValue = encodeURI(value);
|
|
263
|
+
|
|
264
|
+
if (this.usesHistory) {
|
|
265
|
+
if (encodedValue.length > 0) {
|
|
266
|
+
encodedValue = '/' + encodedValue;
|
|
267
|
+
}
|
|
268
|
+
window.history.pushState(null, null, this.get('baseURI') + encodedValue);
|
|
269
|
+
} else {
|
|
270
|
+
window.location.hash = encodedValue;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
this._location = value;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
return this._location;
|
|
278
|
+
},
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
You usually don't need to call this method. It is done automatically after
|
|
282
|
+
the application has been initialized.
|
|
283
|
+
|
|
284
|
+
It registers for the hashchange event if available. If not, it creates a
|
|
285
|
+
timer that looks for location changes every 150ms.
|
|
286
|
+
*/
|
|
287
|
+
ping: function() {
|
|
288
|
+
var that;
|
|
289
|
+
|
|
290
|
+
if (!this._didSetup) {
|
|
291
|
+
this._didSetup = YES;
|
|
292
|
+
|
|
293
|
+
if (this.get('wantsHistory') && SC.platform.supportsHistory) {
|
|
294
|
+
this.usesHistory = YES;
|
|
295
|
+
|
|
296
|
+
this.popState();
|
|
297
|
+
SC.Event.add(window, 'popstate', this, this.popState);
|
|
298
|
+
|
|
299
|
+
} else {
|
|
300
|
+
this.usesHistory = NO;
|
|
301
|
+
|
|
302
|
+
if (SC.platform.supportsHashChange) {
|
|
303
|
+
this.hashChange();
|
|
304
|
+
SC.Event.add(window, 'hashchange', this, this.hashChange);
|
|
305
|
+
|
|
306
|
+
} else {
|
|
307
|
+
// we don't use a SC.Timer because we don't want
|
|
308
|
+
// a run loop to be triggered at each ping
|
|
309
|
+
that = this;
|
|
310
|
+
this._invokeHashChange = function() {
|
|
311
|
+
that.hashChange();
|
|
312
|
+
setTimeout(that._invokeHashChange, 100);
|
|
313
|
+
};
|
|
314
|
+
this._invokeHashChange();
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
},
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
Event handler for the hashchange event. Called automatically by the browser
|
|
322
|
+
if it supports the hashchange event, or by our timer if not.
|
|
323
|
+
*/
|
|
324
|
+
hashChange: function(event) {
|
|
325
|
+
var loc = window.location.hash;
|
|
326
|
+
|
|
327
|
+
// Remove the '#' prefix
|
|
328
|
+
loc = (loc && loc.length > 0) ? loc.slice(1, loc.length) : '';
|
|
329
|
+
|
|
330
|
+
if (!SC.browser.isMozilla) {
|
|
331
|
+
// because of bug https://bugzilla.mozilla.org/show_bug.cgi?id=483304
|
|
332
|
+
loc = decodeURI(loc);
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
if (this.get('location') !== loc && !this._skipRoute) {
|
|
336
|
+
SC.run(function() {
|
|
337
|
+
this.set('location', loc);
|
|
338
|
+
}, this);
|
|
339
|
+
}
|
|
340
|
+
this._skipRoute = false;
|
|
341
|
+
},
|
|
342
|
+
|
|
343
|
+
popState: function(event) {
|
|
344
|
+
var base = this.get('baseURI'),
|
|
345
|
+
loc = document.location.href;
|
|
346
|
+
|
|
347
|
+
if (loc.slice(0, base.length) === base) {
|
|
348
|
+
|
|
349
|
+
// Remove the base prefix and the extra '/'
|
|
350
|
+
loc = loc.slice(base.length + 1, loc.length);
|
|
351
|
+
|
|
352
|
+
if (this.get('location') !== loc && !this._skipRoute) {
|
|
353
|
+
SC.run(function() {
|
|
354
|
+
this.set('location', loc);
|
|
355
|
+
}, this);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
this._skipRoute = false;
|
|
359
|
+
},
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
Adds a route handler. Routes have the following format:
|
|
363
|
+
|
|
364
|
+
- 'users/show/5' is a static route and only matches this exact string,
|
|
365
|
+
- ':action/:controller/:id' is a dynamic route and the handler will be
|
|
366
|
+
called with the 'action', 'controller' and 'id' parameters passed in a
|
|
367
|
+
hash,
|
|
368
|
+
- '*url' is a wildcard route, it matches the whole route and the handler
|
|
369
|
+
will be called with the 'url' parameter passed in a hash.
|
|
370
|
+
|
|
371
|
+
Route types can be combined, the following are valid routes:
|
|
372
|
+
|
|
373
|
+
- 'users/:action/:id'
|
|
374
|
+
- ':controller/show/:id'
|
|
375
|
+
- ':controller/ *url' (ignore the space, because of jslint)
|
|
376
|
+
|
|
377
|
+
@param {String} route the route to be registered
|
|
378
|
+
@param {Object} target the object on which the method will be called, or
|
|
379
|
+
directly the function to be called to handle the route
|
|
380
|
+
@param {Function} method the method to be called on target to handle the
|
|
381
|
+
route, can be a function or a string
|
|
382
|
+
*/
|
|
383
|
+
add: function(route, target, method) {
|
|
384
|
+
if (!this._didSetup) {
|
|
385
|
+
this.invokeLast(this.ping);
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
if (method === undefined && SC.typeOf(target) === SC.T_FUNCTION) {
|
|
389
|
+
method = target;
|
|
390
|
+
target = null;
|
|
391
|
+
} else if (SC.typeOf(method) === SC.T_STRING) {
|
|
392
|
+
method = target[method];
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
if (!this._firstRoute) this._firstRoute = this._Route.create();
|
|
396
|
+
this._firstRoute.add(route.split('/'), target, method);
|
|
397
|
+
|
|
398
|
+
return this;
|
|
399
|
+
},
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
Observer of the 'location' property that calls the correct route handler
|
|
403
|
+
when the location changes.
|
|
404
|
+
*/
|
|
405
|
+
locationDidChange: function() {
|
|
406
|
+
this.trigger();
|
|
407
|
+
}.observes('location'),
|
|
408
|
+
|
|
409
|
+
/**
|
|
410
|
+
Triggers a route even if already in that route (does change the location, if it
|
|
411
|
+
is not already changed, as well).
|
|
412
|
+
|
|
413
|
+
If the location is not the same as the supplied location, this simply lets "location"
|
|
414
|
+
handle it (which ends up coming back to here).
|
|
415
|
+
*/
|
|
416
|
+
trigger: function() {
|
|
417
|
+
var firstRoute = this._firstRoute,
|
|
418
|
+
location = this.get('location'),
|
|
419
|
+
params, route;
|
|
420
|
+
|
|
421
|
+
if (firstRoute) {
|
|
422
|
+
params = this._extractParametersAndRoute({ route: location });
|
|
423
|
+
location = params.route;
|
|
424
|
+
delete params.route;
|
|
425
|
+
delete params.params;
|
|
426
|
+
route = firstRoute.routeForParts(location.split('/'), params);
|
|
427
|
+
if (route && route.method) {
|
|
428
|
+
route.method.call(route.target || this, params);
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
},
|
|
432
|
+
|
|
433
|
+
/**
|
|
434
|
+
@private
|
|
435
|
+
@class
|
|
436
|
+
|
|
437
|
+
SC.routes._Route is a class used internally by SC.routes. The routes defined by your
|
|
438
|
+
application are stored in a tree structure, and this is the class for the
|
|
439
|
+
nodes.
|
|
440
|
+
*/
|
|
441
|
+
_Route: SC.Object.extend(
|
|
442
|
+
/** @scope SC.routes._Route.prototype */ {
|
|
443
|
+
|
|
444
|
+
target: null,
|
|
445
|
+
|
|
446
|
+
method: null,
|
|
447
|
+
|
|
448
|
+
staticRoutes: null,
|
|
449
|
+
|
|
450
|
+
dynamicRoutes: null,
|
|
451
|
+
|
|
452
|
+
wildcardRoutes: null,
|
|
453
|
+
|
|
454
|
+
add: function(parts, target, method) {
|
|
455
|
+
var part, nextRoute;
|
|
456
|
+
|
|
457
|
+
// clone the parts array because we are going to alter it
|
|
458
|
+
parts = SC.clone(parts);
|
|
459
|
+
|
|
460
|
+
if (!parts || parts.length === 0) {
|
|
461
|
+
this.target = target;
|
|
462
|
+
this.method = method;
|
|
463
|
+
|
|
464
|
+
} else {
|
|
465
|
+
part = parts.shift();
|
|
466
|
+
|
|
467
|
+
// there are 3 types of routes
|
|
468
|
+
switch (part.slice(0, 1)) {
|
|
469
|
+
|
|
470
|
+
// 1. dynamic routes
|
|
471
|
+
case ':':
|
|
472
|
+
part = part.slice(1, part.length);
|
|
473
|
+
if (!this.dynamicRoutes) this.dynamicRoutes = {};
|
|
474
|
+
if (!this.dynamicRoutes[part]) this.dynamicRoutes[part] = this.constructor.create();
|
|
475
|
+
nextRoute = this.dynamicRoutes[part];
|
|
476
|
+
break;
|
|
477
|
+
|
|
478
|
+
// 2. wildcard routes
|
|
479
|
+
case '*':
|
|
480
|
+
part = part.slice(1, part.length);
|
|
481
|
+
if (!this.wildcardRoutes) this.wildcardRoutes = {};
|
|
482
|
+
nextRoute = this.wildcardRoutes[part] = this.constructor.create();
|
|
483
|
+
break;
|
|
484
|
+
|
|
485
|
+
// 3. static routes
|
|
486
|
+
default:
|
|
487
|
+
if (!this.staticRoutes) this.staticRoutes = {};
|
|
488
|
+
if (!this.staticRoutes[part]) this.staticRoutes[part] = this.constructor.create();
|
|
489
|
+
nextRoute = this.staticRoutes[part];
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
// recursively add the rest of the route
|
|
493
|
+
if (nextRoute) nextRoute.add(parts, target, method);
|
|
494
|
+
}
|
|
495
|
+
},
|
|
496
|
+
|
|
497
|
+
routeForParts: function(parts, params) {
|
|
498
|
+
var part, key, route;
|
|
499
|
+
|
|
500
|
+
// clone the parts array because we are going to alter it
|
|
501
|
+
parts = SC.clone(parts);
|
|
502
|
+
|
|
503
|
+
// if parts is empty, we are done
|
|
504
|
+
if (!parts || parts.length === 0) {
|
|
505
|
+
return this.method ? this : null;
|
|
506
|
+
|
|
507
|
+
} else {
|
|
508
|
+
part = parts.shift();
|
|
509
|
+
|
|
510
|
+
// try to match a static route
|
|
511
|
+
if (this.staticRoutes && this.staticRoutes[part]) {
|
|
512
|
+
return this.staticRoutes[part].routeForParts(parts, params);
|
|
513
|
+
|
|
514
|
+
} else {
|
|
515
|
+
|
|
516
|
+
// else, try to match a dynamic route
|
|
517
|
+
for (key in this.dynamicRoutes) {
|
|
518
|
+
route = this.dynamicRoutes[key].routeForParts(parts, params);
|
|
519
|
+
if (route) {
|
|
520
|
+
params[key] = part;
|
|
521
|
+
return route;
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
// else, try to match a wildcard route
|
|
526
|
+
for (key in this.wildcardRoutes) {
|
|
527
|
+
parts.unshift(part);
|
|
528
|
+
params[key] = parts.join('/');
|
|
529
|
+
return this.wildcardRoutes[key].routeForParts(null, params);
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
// if nothing was found, it means that there is no match
|
|
533
|
+
return null;
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
})
|
|
539
|
+
|
|
540
|
+
});
|