sproutcore 1.5.0.pre.3 → 1.5.0.pre.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.rspec +1 -0
- data/CHANGELOG +42 -0
- data/README.txt +25 -0
- data/VERSION.yml +1 -1
- data/bin/sc-build +1 -1
- data/bin/sc-build-number +1 -1
- data/bin/sc-docs +1 -1
- data/bin/sc-gen +1 -1
- data/bin/sc-init +1 -1
- data/bin/sc-manifest +1 -1
- data/bin/sc-server +1 -1
- data/bin/sproutcore +1 -1
- data/lib/buildtasks/build.rake +5 -0
- data/lib/buildtasks/manifest.rake +20 -1
- data/lib/frameworks/sproutcore/Buildfile +12 -9
- data/lib/frameworks/sproutcore/CHANGELOG.md +48 -0
- data/lib/frameworks/sproutcore/apps/greenhouse/README +2 -9
- data/lib/frameworks/sproutcore/apps/greenhouse/TODO +11 -27
- data/lib/frameworks/sproutcore/apps/greenhouse/controllers/library.js +3 -10
- data/lib/frameworks/sproutcore/apps/greenhouse/english.lproj/css/main-page.css +4 -31
- data/lib/frameworks/sproutcore/apps/greenhouse/english.lproj/dialogs.js +5 -4
- data/lib/frameworks/sproutcore/apps/greenhouse/models/dir.js +3 -3
- data/lib/frameworks/sproutcore/apps/greenhouse/models/file.js +2 -2
- data/lib/frameworks/sproutcore/apps/greenhouse/states/main.js +31 -14
- data/lib/frameworks/sproutcore/apps/greenhouse/states/modals.js +2 -1
- data/lib/frameworks/sproutcore/apps/greenhouse/states/ready.js +27 -1
- data/lib/frameworks/sproutcore/apps/greenhouse/tests/views/list_item.js +1 -0
- data/lib/frameworks/sproutcore/apps/greenhouse/tests/views/plist_item.js +20 -0
- data/lib/frameworks/sproutcore/apps/greenhouse/theme.js +25 -0
- data/lib/frameworks/sproutcore/apps/greenhouse/views/plist_item.js +161 -24
- data/lib/frameworks/sproutcore/apps/greenhouse/views/tear_off_picker.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/bootstrap/system/browser.js +37 -25
- data/lib/frameworks/sproutcore/frameworks/bootstrap/tests/system/browser.js +135 -26
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/controllers/array.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/controllers/controller.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/controllers/object.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/core.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/ext/object.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/ext/run_loop.js +1 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/mixins/delegate_support.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/mixins/responder_context.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/mixins/selection_support.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/mixins/string.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/keyboard.js +68 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/layout.js +108 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/panes/main.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/manipulation.js +27 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/panes/pane.js +215 -505
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/template.js +24 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/visibility.js +11 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/protocols/observable_protocol.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/protocols/sparse_array_delegate.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/resources/core.css +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/resources/view.css +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/application.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/browser.js +1 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/builder.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/core_query.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/cursor.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/device.js +210 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/event.js +5 -5
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/json.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/locale.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/page.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/platform.js +31 -5
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/ready.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/render_context.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/responder.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/root_responder.js +83 -110
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/selection_set.js +7 -4
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/sparse_array.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/theme.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/timer.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/utils/rect.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/utils.js +151 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/array/array_case.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/array/enum_case.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/array/null_case.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/array/selection_support.js +26 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/array/single_case.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/object/empty_case.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/object/multiple_case.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/object/single_case.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/object/single_enumerable_case.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/mixins/responder_context.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/mixins/string.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/panes/template.js +14 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/builder.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/core_query/within.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/json.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/locale.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/begin.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/element.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/end.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/get.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/helpers_attr.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/helpers_basic.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/helpers_className.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/helpers_style.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/init.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/join.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/push_text.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/tag.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/update.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/root_responder/makeKeyPane.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/root_responder/makeMainPane.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/root_responder/makeMenuPane.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/root_responder/root_responder.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/root_responder/targetForAction.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/selection_set/add.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/selection_set/copy.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/selection_set/indexSetForSource.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/selection_set/isEqual.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/selection_set/remove.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/sparse_array.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/theme.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/timer/invalidate.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/timer/invokeLater.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/timer/isPaused.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/timer/performAction.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/timer/schedule.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/utils/normalizeURL.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/utils/offset.js +268 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/utils/rect.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/main_pane.js +43 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/pane/append_remove.js +107 -18
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/child_view.js +20 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/pane/firstResponder.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/pane/keyPane.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/pane/layout.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/pane/sendEvent.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template/checkbox_support.js +32 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template/text_field_support.js +73 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template_view/collection.js +65 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template_view/core.js +67 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template_view/handlebars.js +295 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/animation.js +19 -18
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/build.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/build_children.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/clippingFrame.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/convertFrames.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/convertLayouts.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/createChildViews.js +18 -15
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/createLayer.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/destroyLayer.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/didAppendToDocument.js +11 -8
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/findLayerInParentLayer.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/init.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/insertBefore.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/isVisible.js +28 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/isVisibleInWindow.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/keyboard.js +22 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/layer.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/layoutChildViews.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutDidChange.js +180 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutStyle.js +640 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/parentViewDidChange.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/prepareContext.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/removeChild.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/render.js +125 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/render_delegate_support.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/replaceChild.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/static_layout.js +21 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/theme.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/updateLayer.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/updateLayerLocation.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/view.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/viewDidResize.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template/checkbox_support.js +20 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template/collection.js +99 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template/text_field_support.js +35 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template.js +77 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/animation.js +187 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/base.js +1 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/cursor.js +41 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/enabled.js +57 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/keyboard.js +223 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout.js +1150 -0
- data/lib/frameworks/sproutcore/frameworks/{amber/views → core_foundation/views/view}/layout_style.js +93 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/manipulation.js +489 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/theming.js +362 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/touch.js +67 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/visibility.js +113 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +1280 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/models/child_attribute.js +27 -53
- data/lib/frameworks/sproutcore/frameworks/datastore/models/children_attribute.js +13 -19
- data/lib/frameworks/sproutcore/frameworks/datastore/models/many_attribute.js +1 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +183 -71
- data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +1 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/system/child_array.js +26 -46
- data/lib/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +25 -4
- data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +139 -21
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/data_sources/fixtures.js +6 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/cyclical_relationship.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/{parentless.js → data_store.js} +62 -16
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record.js +51 -17
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array.js +36 -10
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array_complex.js +11 -11
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_complex.js +8 -8
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/normalize.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/{foundation/english.lproj → datetime/resources}/strings.js +1 -0
- data/lib/frameworks/sproutcore/frameworks/{foundation → datetime}/system/datetime.js +5 -37
- data/lib/frameworks/sproutcore/frameworks/{foundation → datetime}/tests/system/datetime.js +1 -0
- data/lib/frameworks/sproutcore/frameworks/debug/core.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/designer/controllers/designs.js +1 -2
- data/lib/frameworks/sproutcore/frameworks/designer/designers/object_designer.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/designer/designers/view_designer.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/designer/views/designer_drop_target.js +9 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/segmented.css +71 -70
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_row_delegate.js +10 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segment.js +4 -19
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segmented.js +33 -14
- data/lib/frameworks/sproutcore/frameworks/desktop/system/drag.js +25 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/date_field/ui.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/methods.js +25 -103
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +102 -92
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/tab/ui.js +22 -25
- data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +38 -25
- data/lib/frameworks/sproutcore/frameworks/desktop/views/date_field.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/views/segment.js +42 -22
- data/lib/frameworks/sproutcore/frameworks/desktop/views/segmented.js +513 -230
- data/lib/frameworks/sproutcore/frameworks/desktop/views/select_field.js +0 -2
- data/lib/frameworks/sproutcore/frameworks/experimental/README.md +23 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/device_motion/README.md +11 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/device_motion/device.js +215 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/device_motion/platform.js +67 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/README.md +34 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/models/polymorphic_single_attribute.js +183 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/models/record.js +23 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/tests/models/polymorphic/single.js +124 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_resize.js +0 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inner_frame.js +151 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/canvas_image.js +27 -17
- data/lib/frameworks/sproutcore/frameworks/foundation/system/image_queue.js +6 -3
- data/lib/frameworks/sproutcore/frameworks/foundation/system/logger.js +163 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/system/user_defaults.js +6 -3
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/beginEditing.js +1 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/logger.js +44 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/image/ui.js +200 -167
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/views/image.js +52 -137
- data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +7 -11
- data/lib/frameworks/sproutcore/frameworks/handlebars/extensions.js +138 -0
- data/lib/frameworks/sproutcore/frameworks/handlebars/handlebars.js +1338 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/core.js +32 -26
- data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/base.js +162 -3
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/array.js +10 -5
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +123 -3
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +12 -5
- data/lib/frameworks/sproutcore/frameworks/runtime/private/chain_observer.js +50 -13
- data/lib/frameworks/sproutcore/frameworks/runtime/system/logger.js +163 -333
- data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +58 -8
- data/lib/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +2 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/itemType.js +9 -6
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/makeArray.js +15 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/array.js +2 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/chained.js +31 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/observable.js +18 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/logger.js +31 -143
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/concatenated_properties.js +71 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/enhance.js +177 -0
- data/lib/frameworks/sproutcore/frameworks/table/views/table.js +5 -4
- data/lib/frameworks/sproutcore/frameworks/table/views/table_header.js +5 -3
- data/lib/frameworks/sproutcore/themes/ace/resources/button/button.js +8 -2
- data/lib/frameworks/sproutcore/themes/ace/resources/menu/menu.css +2 -3
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/18px/segmented.css +1 -1
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented.css +1 -1
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented.css +1 -1
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/44px/segmented.css +1 -1
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/segmented.css +2 -2
- data/lib/frameworks/sproutcore/themes/standard_theme/english.lproj/segmented.css +62 -62
- data/lib/gen/html_app/Buildfile +36 -0
- data/lib/gen/html_app/README +1 -0
- data/lib/gen/html_app/USAGE +15 -0
- data/lib/gen/html_app/templates/apps/@target_name@/@target_name@.js +14 -0
- 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 -0
- data/lib/gen/html_app/templates/apps/@target_name@/resources/templates/@target_name@.handlebars +1 -0
- data/lib/gen/html_project/Buildfile +45 -0
- data/lib/gen/html_project/INIT +3 -0
- data/lib/gen/html_project/README +1 -0
- data/lib/gen/html_project/USAGE +2 -0
- data/lib/gen/html_project/templates/@filename@/Buildfile +8 -0
- data/lib/gen/html_project/templates/@filename@/README +7 -0
- data/lib/sproutcore/builders/handlebars.rb +30 -0
- data/lib/sproutcore/builders.rb +1 -1
- data/lib/sproutcore/helpers/static_helper.rb +3 -3
- data/lib/sproutcore/tools/init.rb +25 -9
- data/spec/buildtasks/manifest/prepare_build_tasks/handlebars_spec.rb +39 -0
- data/spec/fixtures/builder_tests/apps/handlebars_test/template.handlebars +5 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/templates/demo.handlebars +4 -0
- data/spec/lib/builders/handlebars_spec.rb +29 -0
- data/vendor/chance/lib/chance/imagers/data_url.rb +20 -7
- data/vendor/chance/lib/chance/instance.rb +4 -1
- data/vendor/chance/lib/chance/parser.rb +31 -31
- data/vendor/chance/lib/chance/slicing.rb +38 -8
- metadata +195 -225
- data/lib/frameworks/sproutcore/frameworks/amber/system/device.js +0 -143
- data/lib/frameworks/sproutcore/frameworks/amber/system/utils.js +0 -174
- data/lib/frameworks/sproutcore/frameworks/amber/tests/views/main_pane.js +0 -31
- data/lib/frameworks/sproutcore/frameworks/amber/tests/views/pane/sendTouchEvent.js +0 -267
- data/lib/frameworks/sproutcore/frameworks/amber/tests/views/view/layoutDidChange.js +0 -149
- data/lib/frameworks/sproutcore/frameworks/amber/tests/views/view/layoutStyle.js +0 -602
- data/lib/frameworks/sproutcore/frameworks/amber/tests/views/view/render.js +0 -115
- data/lib/frameworks/sproutcore/frameworks/amber/views/base.js +0 -1
- data/lib/frameworks/sproutcore/frameworks/amber/views/view.js +0 -4003
- data/lib/frameworks/sproutcore/frameworks/datastore/models/child_record.js +0 -105
@@ -6,12 +6,6 @@
|
|
6
6
|
// License: Licensed under MIT license (see license.js)
|
7
7
|
// ==========================================================================
|
8
8
|
|
9
|
-
SC.SCALE_NONE = "none";
|
10
|
-
SC.FILL = "fill";
|
11
|
-
SC.FILL_PROPORTIONALLY = "fillProportionally";
|
12
|
-
SC.BEST_FIT = "fitBest";
|
13
|
-
SC.BEST_FIT_DOWN_ONLY = "fitBestDown";
|
14
|
-
|
15
9
|
SC.IMAGE_STATE_NONE = 'none';
|
16
10
|
SC.IMAGE_STATE_LOADING = 'loading';
|
17
11
|
SC.IMAGE_STATE_LOADED = 'loaded';
|
@@ -47,14 +41,15 @@ SC.BLANK_IMAGE.width = SC.BLANK_IMAGE.height = 1;
|
|
47
41
|
|
48
42
|
@extends SC.View
|
49
43
|
@extends SC.Control
|
44
|
+
@extends SC.InnerLayout
|
50
45
|
@since SproutCore 1.0
|
51
46
|
*/
|
52
|
-
SC.ImageView = SC.View.extend(SC.Control,
|
47
|
+
SC.ImageView = SC.View.extend(SC.Control, SC.InnerFrame,
|
53
48
|
/** @scope SC.ImageView.prototype */ {
|
54
49
|
|
55
50
|
classNames: 'sc-image-view',
|
56
51
|
|
57
|
-
displayProperties: 'image imageValue innerFrame
|
52
|
+
displayProperties: 'frame image imageValue innerFrame status toolTip type'.w(),
|
58
53
|
|
59
54
|
renderDelegateName: function() {
|
60
55
|
return (this.get('useCanvas') ? 'canvasImage' : 'image') + "RenderDelegate";
|
@@ -69,20 +64,6 @@ SC.ImageView = SC.View.extend(SC.Control,
|
|
69
64
|
// Properties
|
70
65
|
//
|
71
66
|
|
72
|
-
/**
|
73
|
-
Align the image within its frame.
|
74
|
-
|
75
|
-
<table>
|
76
|
-
<tr><td>SC.ALIGN_TOP_LEFT</td><td>SC.ALIGN_TOP</td><td>SC.ALIGN_TOP_RIGHT</td></tr>
|
77
|
-
<tr><td>SC.ALIGN_LEFT</td><td>SC.ALIGN_CENTER/td><td>SC.ALIGN_RIGHT</td></tr>
|
78
|
-
<tr><td>SC.ALIGN_BOTTOM_LEFT</td><td>SC.ALIGN_BOTTOM</td><td>SC.ALIGN_BOTTOM_RIGHT</td></tr>
|
79
|
-
</table>
|
80
|
-
|
81
|
-
@property {SC.ALIGN_CENTER|SC.ALIGN_TOP_LEFT|SC.ALIGN_TOP|SC.ALIGN_TOP_RIGHT|SC.ALIGN_RIGHT|SC.ALIGN_BOTTOM_RIGHT|SC.BOTTOM|SC.BOTTOM_LEFT|SC.LEFT|Number}
|
82
|
-
@default SC.ALIGN_CENTER
|
83
|
-
*/
|
84
|
-
align: SC.ALIGN_CENTER,
|
85
|
-
|
86
67
|
/**
|
87
68
|
If YES, this image can load in the background. Otherwise, it is treated
|
88
69
|
as a foreground image. If the image is not visible on screen, it will
|
@@ -96,98 +77,6 @@ SC.ImageView = SC.View.extend(SC.Control,
|
|
96
77
|
*/
|
97
78
|
image: SC.BLANK_IMAGE,
|
98
79
|
|
99
|
-
innerFrame: function() {
|
100
|
-
var image = this.get('image'),
|
101
|
-
align = this.get('align'),
|
102
|
-
scale = this.get('scale'),
|
103
|
-
frame = this.get('frame'),
|
104
|
-
imageWidth = image.width,
|
105
|
-
imageHeight = image.height,
|
106
|
-
scaleX,
|
107
|
-
scaleY,
|
108
|
-
result;
|
109
|
-
|
110
|
-
// Fast path
|
111
|
-
result = { x: 0, y: 0, width: frame.width , height: frame.height };
|
112
|
-
if (scale === SC.FILL) return result;
|
113
|
-
|
114
|
-
// Determine the appropriate scale
|
115
|
-
scaleX = frame.width / imageWidth;
|
116
|
-
scaleY = frame.height / imageHeight;
|
117
|
-
|
118
|
-
switch (scale) {
|
119
|
-
case SC.FILL_PROPORTIONALLY:
|
120
|
-
scale = scaleX > scaleY ? scaleX : scaleY;
|
121
|
-
break;
|
122
|
-
case SC.BEST_FIT:
|
123
|
-
scale = scaleX < scaleY ? scaleX : scaleY;
|
124
|
-
break;
|
125
|
-
case SC.BEST_FIT_DOWN_ONLY:
|
126
|
-
if ((imageWidth > frame.width) || (imageHeight > frame.height)) {
|
127
|
-
scale = scaleX < scaleY ? scaleX : scaleY;
|
128
|
-
} else {
|
129
|
-
scale = 1.0;
|
130
|
-
}
|
131
|
-
break;
|
132
|
-
case SC.SCALE_NONE:
|
133
|
-
scale = 1.0;
|
134
|
-
break;
|
135
|
-
default: // Number
|
136
|
-
if (isNaN(window.parseFloat(scale)) || (window.parseFloat(scale) <= 0)) {
|
137
|
-
SC.Logger.warn("SC.ImageView: The scale '%@' was not understood. Scale must be one of SC.FILL, SC.FILL_PROPORTIONALLY, SC.BEST_FIT, SC.BEST_FIT_DOWN_ONLY or a positive number greater than 0.00.".fmt(scale));
|
138
|
-
|
139
|
-
// Don't attempt to scale or offset the image
|
140
|
-
return result;
|
141
|
-
}
|
142
|
-
}
|
143
|
-
|
144
|
-
imageWidth *= scale;
|
145
|
-
imageHeight *= scale;
|
146
|
-
result.width = Math.round(imageWidth);
|
147
|
-
result.height = Math.round(imageHeight);
|
148
|
-
|
149
|
-
// Align the image within its frame
|
150
|
-
switch (align) {
|
151
|
-
case SC.ALIGN_LEFT:
|
152
|
-
result.x = 0;
|
153
|
-
result.y = (frame.height / 2) - (imageHeight / 2);
|
154
|
-
break;
|
155
|
-
case SC.ALIGN_RIGHT:
|
156
|
-
result.x = frame.width - imageWidth;
|
157
|
-
result.y = (frame.height / 2) - (imageHeight / 2);
|
158
|
-
break;
|
159
|
-
case SC.ALIGN_TOP:
|
160
|
-
result.x = (frame.width / 2) - (imageWidth / 2);
|
161
|
-
result.y = 0;
|
162
|
-
break;
|
163
|
-
case SC.ALIGN_BOTTOM:
|
164
|
-
result.x = (frame.width / 2) - (imageWidth / 2);
|
165
|
-
result.y = frame.height - imageHeight;
|
166
|
-
break;
|
167
|
-
case SC.ALIGN_TOP_LEFT:
|
168
|
-
result.x = 0;
|
169
|
-
result.y = 0;
|
170
|
-
break;
|
171
|
-
case SC.ALIGN_TOP_RIGHT:
|
172
|
-
result.x = frame.width - imageWidth;
|
173
|
-
result.y = 0;
|
174
|
-
break;
|
175
|
-
case SC.ALIGN_BOTTOM_LEFT:
|
176
|
-
result.x = 0;
|
177
|
-
result.y = frame.height - imageHeight;
|
178
|
-
break;
|
179
|
-
case SC.ALIGN_BOTTOM_RIGHT:
|
180
|
-
result.x = frame.width - imageWidth;
|
181
|
-
result.y = frame.height - imageHeight;
|
182
|
-
break;
|
183
|
-
default: // SC.ALIGN_CENTER || SC.ALIGN_MIDDLE
|
184
|
-
result.x = (frame.width / 2) - (imageWidth / 2);
|
185
|
-
result.y = (frame.height / 2) - (imageHeight / 2);
|
186
|
-
}
|
187
|
-
|
188
|
-
return result;
|
189
|
-
}.property('align', 'image', 'scale', 'frame').cacheable(),
|
190
|
-
|
191
80
|
/**
|
192
81
|
@property {String}
|
193
82
|
@default null
|
@@ -197,6 +86,20 @@ SC.ImageView = SC.View.extend(SC.Control,
|
|
197
86
|
return value && value.isEnumerable ? value.firstObject() : value;
|
198
87
|
}.property('value').cacheable(),
|
199
88
|
|
89
|
+
/**
|
90
|
+
The frame for the inner img element or for the canvas to draw within, altered according to the scale
|
91
|
+
and align properties provided by SC.InnerFrame.
|
92
|
+
|
93
|
+
@property {Object}
|
94
|
+
*/
|
95
|
+
innerFrame: function() {
|
96
|
+
var image = this.get('image'),
|
97
|
+
imageWidth = image.width,
|
98
|
+
imageHeight = image.height;
|
99
|
+
|
100
|
+
return this.innerFrameForSize(imageWidth, imageHeight);
|
101
|
+
}.property('align', 'image', 'scale', 'frame').cacheable(),
|
102
|
+
|
200
103
|
/**
|
201
104
|
If YES, any specified toolTip will be localized before display.
|
202
105
|
|
@@ -205,27 +108,6 @@ SC.ImageView = SC.View.extend(SC.Control,
|
|
205
108
|
*/
|
206
109
|
localize: YES,
|
207
110
|
|
208
|
-
/**
|
209
|
-
Determines how the image will scale to fit within its containing space.
|
210
|
-
|
211
|
-
Examples:
|
212
|
-
|
213
|
-
SC.SCALE_NONE - don't scale
|
214
|
-
SC.FILL - stretch/shrink the image to fill the ImageView frame
|
215
|
-
SC.FILL_PROPORTIONALLY - stretch/shrink the image to fill the ImageView frame while maintaining
|
216
|
-
aspect ratio, such that the shortest dimension will just fit within the frame and the longest dimension will
|
217
|
-
overflow and be cropped
|
218
|
-
SC.BEST_FIT - stretch/shrink the image to fit the ImageView frame while maintaining aspect ration,
|
219
|
-
such that the longest dimension will just fit within the frame
|
220
|
-
SC.BEST_FIT_DOWN_ONLY - shrink the image to fit the ImageView frame while maintaining aspect ration,
|
221
|
-
such that the longest dimension will just fit within the frame. Do not stretch the image if the image's
|
222
|
-
width is less than the frame's width.
|
223
|
-
|
224
|
-
@property {SC.SCALE_NONE|SC.FILL|SC.FILL_PROPORTIONALLY|SC.BEST_FIT|SC.BEST_FIT_DOWN_ONLY|Number}
|
225
|
-
@default SC.FILL
|
226
|
-
*/
|
227
|
-
scale: SC.FILL,
|
228
|
-
|
229
111
|
/**
|
230
112
|
Current load status of the image.
|
231
113
|
|
@@ -294,6 +176,33 @@ SC.ImageView = SC.View.extend(SC.Control,
|
|
294
176
|
*/
|
295
177
|
value: null,
|
296
178
|
|
179
|
+
/**
|
180
|
+
Recalculate our innerFrame if the outer frame has changed.
|
181
|
+
|
182
|
+
@returns {void}
|
183
|
+
*/
|
184
|
+
// Note: SC.View's updateLayer() will call viewDidResize() if useStaticLayout is true. The result of this
|
185
|
+
// is that since our display depends on the frame, when the view or parent view resizes, viewDidResize
|
186
|
+
// notifies that the frame has changed, so we update our view, which calls viewDidResize, which notifies
|
187
|
+
// that the frame has changed, so we update our view, etc. in an infinite loop.
|
188
|
+
viewDidResize: function() {
|
189
|
+
// 'frame' as a property is cached and won't be updated, however calling notifyPropertyChange on 'frame' causes the aforementioned infinite loop
|
190
|
+
// Instead, measure the frame ourselves and only notify if it has changed width or height
|
191
|
+
var layer = this.get('layer'),
|
192
|
+
width,
|
193
|
+
height;
|
194
|
+
|
195
|
+
if (layer) {
|
196
|
+
width = layer.offsetWidth;
|
197
|
+
height = layer.offsetHeight;
|
198
|
+
|
199
|
+
if (this._cachedWidth !== width || this._cachedHeight !== height) {
|
200
|
+
this.notifyPropertyChange('frame');
|
201
|
+
this._cachedWidth = width;
|
202
|
+
this._cachedHeight = height;
|
203
|
+
}
|
204
|
+
}
|
205
|
+
},
|
297
206
|
|
298
207
|
// ..........................................................
|
299
208
|
// Methods
|
@@ -403,18 +312,24 @@ SC.ImageView = SC.View.extend(SC.Control,
|
|
403
312
|
if (type === SC.IMAGE_TYPE_URL) {
|
404
313
|
image = new Image();
|
405
314
|
|
406
|
-
|
315
|
+
var errorFunc = function() {
|
407
316
|
SC.run(function() {
|
408
317
|
that._loadImageDidComplete(value, SC.$error("SC.Image.FailedError", "Image", -101));
|
409
318
|
});
|
410
319
|
};
|
411
320
|
|
412
|
-
|
321
|
+
var loadFunc = function() {
|
413
322
|
SC.run(function() {
|
414
323
|
that._loadImageDidComplete(value, image);
|
415
324
|
});
|
416
325
|
};
|
417
326
|
|
327
|
+
// Using bind here instead of setting onabort/onerror/onload directly
|
328
|
+
// fixes an issue with images having 0 width and height
|
329
|
+
$(image).bind('error', errorFunc);
|
330
|
+
$(image).bind('abort', errorFunc);
|
331
|
+
$(image).bind('load', loadFunc);
|
332
|
+
|
418
333
|
image.src = value;
|
419
334
|
return YES;
|
420
335
|
}
|
@@ -142,11 +142,9 @@ SC.TextFieldView = SC.FieldView.extend(SC.StaticLayout, SC.Editable,
|
|
142
142
|
_isFocused: NO,
|
143
143
|
|
144
144
|
|
145
|
-
init:function(){
|
146
|
-
var
|
147
|
-
|
148
|
-
if(!val || val && val.length===0) this.set('hintON', YES);
|
149
|
-
else this.set('hintON', NO);
|
145
|
+
init: function() {
|
146
|
+
var val = this.get('value');
|
147
|
+
this.set('hintON', (!val || val && val.length === 0));
|
150
148
|
return sc_super();
|
151
149
|
},
|
152
150
|
|
@@ -414,7 +412,7 @@ SC.TextFieldView = SC.FieldView.extend(SC.StaticLayout, SC.Editable,
|
|
414
412
|
|
415
413
|
//Adding this to differentiate between older and newer versions of safari
|
416
414
|
//since the internal default field padding changed
|
417
|
-
isOldSafari= (parseInt(SC.browser.
|
415
|
+
isOldSafari= (parseInt(SC.browser.webkit,0)<532);
|
418
416
|
context.setClass('oldWebKitFieldPadding', isOldSafari);
|
419
417
|
|
420
418
|
spellCheckString = spellCheckEnabled ? ' spellcheck="true"' : ' spellcheck="false"';
|
@@ -891,7 +889,7 @@ SC.TextFieldView = SC.FieldView.extend(SC.StaticLayout, SC.Editable,
|
|
891
889
|
return YES ; // handled
|
892
890
|
}
|
893
891
|
// maxlength for textareas
|
894
|
-
if(!SC.browser.
|
892
|
+
if(!SC.browser.webkit && this.get('isTextArea')){
|
895
893
|
var val = this.get('value'),
|
896
894
|
code = evt.which;
|
897
895
|
// This code is nasty. It's thanks gecko .keycode table that has charters like & with the same keycode as up arrow key
|
@@ -979,9 +977,7 @@ SC.TextFieldView = SC.FieldView.extend(SC.StaticLayout, SC.Editable,
|
|
979
977
|
or not. Currently is disabled as in webkit there is a bug where the color
|
980
978
|
of the placeholder doesn't refresh all the time.
|
981
979
|
*/
|
982
|
-
_supportsPlaceHolder:
|
983
|
-
return SC.browser.safari && !this.get('isTextArea');
|
984
|
-
}.property('isTextArea').cacheable(),
|
980
|
+
_supportsPlaceHolder: SC.platform.input.placeholder,
|
985
981
|
|
986
982
|
|
987
983
|
valueObserver: function(){
|
@@ -990,7 +986,7 @@ SC.TextFieldView = SC.FieldView.extend(SC.StaticLayout, SC.Editable,
|
|
990
986
|
if (val && val.length>0) {
|
991
987
|
this.set('hintON', NO);
|
992
988
|
max = this.get('maxLength');
|
993
|
-
if(!SC.browser.
|
989
|
+
if(!SC.browser.webkit && val.length>max){
|
994
990
|
this.set('value', val.substr(0, max));
|
995
991
|
}
|
996
992
|
}else this.set('hintON', YES);
|
@@ -0,0 +1,138 @@
|
|
1
|
+
sc_require("handlebars");
|
2
|
+
|
3
|
+
SC.Handlebars = {};
|
4
|
+
|
5
|
+
SC.Handlebars.JavaScriptCompiler = function() {};
|
6
|
+
SC.Handlebars.JavaScriptCompiler.prototype = SC.beget(Handlebars.JavaScriptCompiler.prototype);
|
7
|
+
SC.Handlebars.JavaScriptCompiler.prototype.compiler = SC.Handlebars.JavaScriptCompiler;
|
8
|
+
|
9
|
+
SC.Handlebars.JavaScriptCompiler.prototype.nameLookup = function(parent, name, type) {
|
10
|
+
if (type === 'context') {
|
11
|
+
return "SC.get(" + parent + ", " + this.quotedString(name) + ");";
|
12
|
+
} else {
|
13
|
+
return Handlebars.JavaScriptCompiler.prototype.nameLookup.call(this, parent, name, type);
|
14
|
+
}
|
15
|
+
};
|
16
|
+
|
17
|
+
SC.Handlebars.compile = function(string) {
|
18
|
+
var ast = Handlebars.parse(string);
|
19
|
+
var environment = new Handlebars.Compiler().compile(ast);
|
20
|
+
return new SC.Handlebars.JavaScriptCompiler().compile(environment, true);
|
21
|
+
};
|
22
|
+
|
23
|
+
Handlebars.registerHelper('view', function(path, fn, inverse, data) {
|
24
|
+
if (fn.isRenderData) { data = fn; fn = null; }
|
25
|
+
|
26
|
+
var newView;
|
27
|
+
if (path.isClass || path.isObject) {
|
28
|
+
newView = path;
|
29
|
+
if (!newView) {
|
30
|
+
throw "Null or undefined object was passed to the #view helper. Did you mean to pass a property path string?";
|
31
|
+
}
|
32
|
+
} else {
|
33
|
+
newView = SC.objectForPropertyPath(path);
|
34
|
+
if (!newView) { throw "Unable to find view at path '" + path + "'"; }
|
35
|
+
}
|
36
|
+
|
37
|
+
var currentView = data.view;
|
38
|
+
|
39
|
+
var childViews = currentView.get('childViews');
|
40
|
+
var childView = currentView.createChildView(newView);
|
41
|
+
|
42
|
+
// Set the template of the view to the passed block if we got one
|
43
|
+
if (fn) { childView.template = fn; }
|
44
|
+
|
45
|
+
childViews.pushObject(childView);
|
46
|
+
|
47
|
+
var context = SC.RenderContext(childView.get('tagName'));
|
48
|
+
childView.applyAttributesToContext(context);
|
49
|
+
// tomdale wants to make SproutCore slow
|
50
|
+
childView.render(context, YES);
|
51
|
+
|
52
|
+
return new Handlebars.SafeString(context.join());
|
53
|
+
});
|
54
|
+
|
55
|
+
Handlebars.registerHelper('bind', function(property, fn, inverse, data) {
|
56
|
+
if(fn.isRenderData) { data = fn; fn = null; }
|
57
|
+
var view = data.view;
|
58
|
+
|
59
|
+
var spanId = "handlebars-bound-" + jQuery.uuid++;
|
60
|
+
var result = this.getPath(property);
|
61
|
+
|
62
|
+
var self = this, renderContext = SC.RenderContext('span').id(spanId);
|
63
|
+
|
64
|
+
this.addObserver(property, function() {
|
65
|
+
var result = self.getPath(property);
|
66
|
+
|
67
|
+
if (fn && (result !== null && result !== undefined)) {
|
68
|
+
var renderContext = SC.RenderContext('span').id(spanId);
|
69
|
+
renderContext.push(fn(self.get(property)));
|
70
|
+
var element = renderContext.element();
|
71
|
+
view.$("#" + spanId).replaceWith(element);
|
72
|
+
} else if (result !== null && result !== undefined) {
|
73
|
+
view.$("#" + spanId).html(Handlebars.Utils.escapeExpression(self.get(property)));
|
74
|
+
} else {
|
75
|
+
view.$("#" + spanId).html("");
|
76
|
+
}
|
77
|
+
});
|
78
|
+
|
79
|
+
if (result !== null && result !== undefined) {
|
80
|
+
if (fn) {
|
81
|
+
renderContext.push(fn(result));
|
82
|
+
} else {
|
83
|
+
renderContext.push(Handlebars.Utils.escapeExpression(result));
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
87
|
+
return new Handlebars.SafeString(renderContext.join());
|
88
|
+
});
|
89
|
+
|
90
|
+
Handlebars.registerHelper('collection', function(path, fn, inverse, data) {
|
91
|
+
var collectionClass;
|
92
|
+
|
93
|
+
if(!data) {
|
94
|
+
data = fn;
|
95
|
+
fn = null;
|
96
|
+
}
|
97
|
+
|
98
|
+
if(typeof path === "string") {
|
99
|
+
collectionClass = SC.objectForPropertyPath(path) || SC.TemplateCollectionView;
|
100
|
+
} else {
|
101
|
+
collectionClass = path;
|
102
|
+
}
|
103
|
+
|
104
|
+
if(fn) {
|
105
|
+
if(collectionClass.isClass) {
|
106
|
+
collectionClass.prototype.itemViewTemplate = fn;
|
107
|
+
collectionClass.prototype.inverseTemplate = inverse;
|
108
|
+
} else {
|
109
|
+
collectionClass.itemViewTemplate = fn;
|
110
|
+
collectionClass.inverseTemplate = inverse;
|
111
|
+
}
|
112
|
+
}
|
113
|
+
|
114
|
+
return Handlebars.helpers.view.call(this, collectionClass, Handlebars.VM.noop, inverse, data);
|
115
|
+
});
|
116
|
+
|
117
|
+
Handlebars.registerHelper('bindCollection', function(path, bindingString, fn, inverse, data) {
|
118
|
+
var collectionClass = SC.objectForPropertyPath(path) || SC.TemplateCollectionView;
|
119
|
+
var binding = SC.Binding.from(bindingString, this);
|
120
|
+
|
121
|
+
if(!data) {
|
122
|
+
data = fn;
|
123
|
+
fn = null;
|
124
|
+
}
|
125
|
+
|
126
|
+
if(fn) {
|
127
|
+
// attach the function to the original class so it can be used recursively
|
128
|
+
collectionClass.prototype.itemViewTemplate = fn;
|
129
|
+
}
|
130
|
+
|
131
|
+
if(collectionClass.isClass) {
|
132
|
+
collectionClass = collectionClass.extend({ contentBinding: binding });
|
133
|
+
} else {
|
134
|
+
collectionClass.bindings.push( binding.to('content', collectionClass) );
|
135
|
+
}
|
136
|
+
|
137
|
+
return Handlebars.helpers.collection.call(this, collectionClass, fn, inverse, data);
|
138
|
+
});
|