sproutcore 1.5.0.pre.3 → 1.5.0.pre.4

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.
Files changed (308) hide show
  1. data/.rspec +1 -0
  2. data/CHANGELOG +42 -0
  3. data/README.txt +25 -0
  4. data/VERSION.yml +1 -1
  5. data/bin/sc-build +1 -1
  6. data/bin/sc-build-number +1 -1
  7. data/bin/sc-docs +1 -1
  8. data/bin/sc-gen +1 -1
  9. data/bin/sc-init +1 -1
  10. data/bin/sc-manifest +1 -1
  11. data/bin/sc-server +1 -1
  12. data/bin/sproutcore +1 -1
  13. data/lib/buildtasks/build.rake +5 -0
  14. data/lib/buildtasks/manifest.rake +20 -1
  15. data/lib/frameworks/sproutcore/Buildfile +12 -9
  16. data/lib/frameworks/sproutcore/CHANGELOG.md +48 -0
  17. data/lib/frameworks/sproutcore/apps/greenhouse/README +2 -9
  18. data/lib/frameworks/sproutcore/apps/greenhouse/TODO +11 -27
  19. data/lib/frameworks/sproutcore/apps/greenhouse/controllers/library.js +3 -10
  20. data/lib/frameworks/sproutcore/apps/greenhouse/english.lproj/css/main-page.css +4 -31
  21. data/lib/frameworks/sproutcore/apps/greenhouse/english.lproj/dialogs.js +5 -4
  22. data/lib/frameworks/sproutcore/apps/greenhouse/models/dir.js +3 -3
  23. data/lib/frameworks/sproutcore/apps/greenhouse/models/file.js +2 -2
  24. data/lib/frameworks/sproutcore/apps/greenhouse/states/main.js +31 -14
  25. data/lib/frameworks/sproutcore/apps/greenhouse/states/modals.js +2 -1
  26. data/lib/frameworks/sproutcore/apps/greenhouse/states/ready.js +27 -1
  27. data/lib/frameworks/sproutcore/apps/greenhouse/tests/views/list_item.js +1 -0
  28. data/lib/frameworks/sproutcore/apps/greenhouse/tests/views/plist_item.js +20 -0
  29. data/lib/frameworks/sproutcore/apps/greenhouse/theme.js +25 -0
  30. data/lib/frameworks/sproutcore/apps/greenhouse/views/plist_item.js +161 -24
  31. data/lib/frameworks/sproutcore/apps/greenhouse/views/tear_off_picker.js +1 -1
  32. data/lib/frameworks/sproutcore/frameworks/bootstrap/system/browser.js +37 -25
  33. data/lib/frameworks/sproutcore/frameworks/bootstrap/tests/system/browser.js +135 -26
  34. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/controllers/array.js +0 -0
  35. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/controllers/controller.js +0 -0
  36. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/controllers/object.js +1 -1
  37. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/core.js +0 -0
  38. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/ext/object.js +0 -0
  39. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/ext/run_loop.js +1 -0
  40. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/mixins/delegate_support.js +0 -0
  41. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/mixins/responder_context.js +0 -0
  42. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/mixins/selection_support.js +0 -0
  43. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/mixins/string.js +0 -0
  44. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/keyboard.js +68 -0
  45. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/layout.js +108 -0
  46. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/panes/main.js +2 -2
  47. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/manipulation.js +27 -0
  48. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/panes/pane.js +215 -505
  49. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/template.js +24 -0
  50. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/visibility.js +11 -0
  51. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/protocols/observable_protocol.js +0 -0
  52. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/protocols/sparse_array_delegate.js +0 -0
  53. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/resources/core.css +0 -0
  54. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/resources/view.css +0 -0
  55. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/application.js +0 -0
  56. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/browser.js +1 -0
  57. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/builder.js +0 -0
  58. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/core_query.js +1 -1
  59. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/cursor.js +0 -0
  60. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/device.js +210 -0
  61. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/event.js +5 -5
  62. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/json.js +0 -0
  63. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/locale.js +0 -0
  64. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/page.js +0 -0
  65. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/platform.js +31 -5
  66. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/ready.js +1 -1
  67. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/render_context.js +0 -0
  68. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/responder.js +0 -0
  69. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/root_responder.js +83 -110
  70. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/selection_set.js +7 -4
  71. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/sparse_array.js +0 -0
  72. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/theme.js +0 -0
  73. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/timer.js +0 -0
  74. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/utils/rect.js +0 -0
  75. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/utils.js +151 -0
  76. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/array/array_case.js +0 -0
  77. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/array/enum_case.js +0 -0
  78. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/array/null_case.js +0 -0
  79. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/array/selection_support.js +26 -0
  80. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/array/single_case.js +0 -0
  81. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/object/empty_case.js +0 -0
  82. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/object/multiple_case.js +0 -0
  83. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/object/single_case.js +0 -0
  84. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/object/single_enumerable_case.js +0 -0
  85. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/mixins/responder_context.js +0 -0
  86. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/mixins/string.js +0 -0
  87. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/panes/template.js +14 -0
  88. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/builder.js +0 -0
  89. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/core_query/within.js +0 -0
  90. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/json.js +0 -0
  91. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/locale.js +0 -0
  92. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/begin.js +0 -0
  93. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/element.js +0 -0
  94. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/end.js +0 -0
  95. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/get.js +0 -0
  96. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/helpers_attr.js +0 -0
  97. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/helpers_basic.js +0 -0
  98. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/helpers_className.js +0 -0
  99. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/helpers_style.js +0 -0
  100. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/init.js +0 -0
  101. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/join.js +0 -0
  102. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/push_text.js +0 -0
  103. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/tag.js +0 -0
  104. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/update.js +0 -0
  105. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/root_responder/makeKeyPane.js +0 -0
  106. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/root_responder/makeMainPane.js +0 -0
  107. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/root_responder/makeMenuPane.js +0 -0
  108. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/root_responder/root_responder.js +0 -0
  109. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/root_responder/targetForAction.js +0 -0
  110. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/selection_set/add.js +0 -0
  111. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/selection_set/copy.js +0 -0
  112. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/selection_set/indexSetForSource.js +0 -0
  113. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/selection_set/isEqual.js +0 -0
  114. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/selection_set/remove.js +0 -0
  115. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/sparse_array.js +0 -0
  116. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/theme.js +0 -0
  117. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/timer/invalidate.js +0 -0
  118. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/timer/invokeLater.js +0 -0
  119. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/timer/isPaused.js +0 -0
  120. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/timer/performAction.js +0 -0
  121. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/timer/schedule.js +0 -0
  122. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/utils/normalizeURL.js +0 -0
  123. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/utils/offset.js +268 -0
  124. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/utils/rect.js +0 -0
  125. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/main_pane.js +43 -0
  126. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/pane/append_remove.js +107 -18
  127. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/child_view.js +20 -0
  128. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/pane/firstResponder.js +0 -0
  129. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/pane/keyPane.js +0 -0
  130. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/pane/layout.js +0 -0
  131. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/pane/sendEvent.js +0 -0
  132. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template/checkbox_support.js +32 -0
  133. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template/text_field_support.js +73 -0
  134. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template_view/collection.js +65 -0
  135. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template_view/core.js +67 -0
  136. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template_view/handlebars.js +295 -0
  137. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/animation.js +19 -18
  138. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/build.js +0 -0
  139. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/build_children.js +0 -0
  140. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/clippingFrame.js +0 -0
  141. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/convertFrames.js +0 -0
  142. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/convertLayouts.js +0 -0
  143. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/createChildViews.js +18 -15
  144. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/createLayer.js +0 -0
  145. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/destroyLayer.js +0 -0
  146. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/didAppendToDocument.js +11 -8
  147. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/findLayerInParentLayer.js +0 -0
  148. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/init.js +0 -0
  149. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/insertBefore.js +0 -0
  150. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/isVisible.js +28 -0
  151. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/isVisibleInWindow.js +0 -0
  152. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/keyboard.js +22 -0
  153. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/layer.js +0 -0
  154. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/layoutChildViews.js +0 -0
  155. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutDidChange.js +180 -0
  156. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutStyle.js +640 -0
  157. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/parentViewDidChange.js +0 -0
  158. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/prepareContext.js +0 -0
  159. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/removeChild.js +0 -0
  160. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/render.js +125 -0
  161. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/render_delegate_support.js +0 -0
  162. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/replaceChild.js +0 -0
  163. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/static_layout.js +21 -0
  164. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/theme.js +0 -0
  165. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/updateLayer.js +0 -0
  166. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/updateLayerLocation.js +0 -0
  167. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/view.js +0 -0
  168. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/viewDidResize.js +0 -0
  169. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template/checkbox_support.js +20 -0
  170. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template/collection.js +99 -0
  171. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template/text_field_support.js +35 -0
  172. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template.js +77 -0
  173. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/animation.js +187 -0
  174. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/base.js +1 -0
  175. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/cursor.js +41 -0
  176. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/enabled.js +57 -0
  177. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/keyboard.js +223 -0
  178. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout.js +1150 -0
  179. data/lib/frameworks/sproutcore/frameworks/{amber/views → core_foundation/views/view}/layout_style.js +93 -1
  180. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/manipulation.js +489 -0
  181. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/theming.js +362 -0
  182. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/touch.js +67 -0
  183. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/visibility.js +113 -0
  184. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +1280 -0
  185. data/lib/frameworks/sproutcore/frameworks/datastore/models/child_attribute.js +27 -53
  186. data/lib/frameworks/sproutcore/frameworks/datastore/models/children_attribute.js +13 -19
  187. data/lib/frameworks/sproutcore/frameworks/datastore/models/many_attribute.js +1 -0
  188. data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +183 -71
  189. data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +1 -2
  190. data/lib/frameworks/sproutcore/frameworks/datastore/system/child_array.js +26 -46
  191. data/lib/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +25 -4
  192. data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +139 -21
  193. data/lib/frameworks/sproutcore/frameworks/datastore/tests/data_sources/fixtures.js +6 -1
  194. data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/cyclical_relationship.js +1 -1
  195. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/{parentless.js → data_store.js} +62 -16
  196. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record.js +51 -17
  197. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array.js +36 -10
  198. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array_complex.js +11 -11
  199. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_complex.js +8 -8
  200. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/normalize.js +2 -2
  201. data/lib/frameworks/sproutcore/frameworks/{foundation/english.lproj → datetime/resources}/strings.js +1 -0
  202. data/lib/frameworks/sproutcore/frameworks/{foundation → datetime}/system/datetime.js +5 -37
  203. data/lib/frameworks/sproutcore/frameworks/{foundation → datetime}/tests/system/datetime.js +1 -0
  204. data/lib/frameworks/sproutcore/frameworks/debug/core.js +1 -1
  205. data/lib/frameworks/sproutcore/frameworks/designer/controllers/designs.js +1 -2
  206. data/lib/frameworks/sproutcore/frameworks/designer/designers/object_designer.js +3 -3
  207. data/lib/frameworks/sproutcore/frameworks/designer/designers/view_designer.js +3 -3
  208. data/lib/frameworks/sproutcore/frameworks/designer/views/designer_drop_target.js +9 -3
  209. data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/segmented.css +71 -70
  210. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_row_delegate.js +10 -2
  211. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segment.js +4 -19
  212. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segmented.js +33 -14
  213. data/lib/frameworks/sproutcore/frameworks/desktop/system/drag.js +25 -0
  214. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/date_field/ui.js +1 -1
  215. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/methods.js +25 -103
  216. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +102 -92
  217. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/tab/ui.js +22 -25
  218. data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +38 -25
  219. data/lib/frameworks/sproutcore/frameworks/desktop/views/date_field.js +1 -1
  220. data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll.js +1 -1
  221. data/lib/frameworks/sproutcore/frameworks/desktop/views/segment.js +42 -22
  222. data/lib/frameworks/sproutcore/frameworks/desktop/views/segmented.js +513 -230
  223. data/lib/frameworks/sproutcore/frameworks/desktop/views/select_field.js +0 -2
  224. data/lib/frameworks/sproutcore/frameworks/experimental/README.md +23 -0
  225. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/device_motion/README.md +11 -0
  226. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/device_motion/device.js +215 -0
  227. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/device_motion/platform.js +67 -0
  228. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/README.md +34 -0
  229. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/models/polymorphic_single_attribute.js +183 -0
  230. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/models/record.js +23 -0
  231. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/tests/models/polymorphic/single.js +124 -0
  232. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_resize.js +0 -2
  233. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inner_frame.js +151 -0
  234. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/canvas_image.js +27 -17
  235. data/lib/frameworks/sproutcore/frameworks/foundation/system/image_queue.js +6 -3
  236. data/lib/frameworks/sproutcore/frameworks/foundation/system/logger.js +163 -0
  237. data/lib/frameworks/sproutcore/frameworks/foundation/system/user_defaults.js +6 -3
  238. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/beginEditing.js +1 -0
  239. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/logger.js +44 -0
  240. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/image/ui.js +200 -167
  241. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +1 -1
  242. data/lib/frameworks/sproutcore/frameworks/foundation/views/image.js +52 -137
  243. data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +7 -11
  244. data/lib/frameworks/sproutcore/frameworks/handlebars/extensions.js +138 -0
  245. data/lib/frameworks/sproutcore/frameworks/handlebars/handlebars.js +1338 -0
  246. data/lib/frameworks/sproutcore/frameworks/runtime/core.js +32 -26
  247. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/base.js +162 -3
  248. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/array.js +10 -5
  249. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +123 -3
  250. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +12 -5
  251. data/lib/frameworks/sproutcore/frameworks/runtime/private/chain_observer.js +50 -13
  252. data/lib/frameworks/sproutcore/frameworks/runtime/system/logger.js +163 -333
  253. data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +58 -8
  254. data/lib/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +2 -0
  255. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/itemType.js +9 -6
  256. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/makeArray.js +15 -1
  257. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/array.js +2 -0
  258. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/chained.js +31 -0
  259. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/observable.js +18 -0
  260. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/logger.js +31 -143
  261. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/concatenated_properties.js +71 -0
  262. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/enhance.js +177 -0
  263. data/lib/frameworks/sproutcore/frameworks/table/views/table.js +5 -4
  264. data/lib/frameworks/sproutcore/frameworks/table/views/table_header.js +5 -3
  265. data/lib/frameworks/sproutcore/themes/ace/resources/button/button.js +8 -2
  266. data/lib/frameworks/sproutcore/themes/ace/resources/menu/menu.css +2 -3
  267. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/18px/segmented.css +1 -1
  268. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented.css +1 -1
  269. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented.css +1 -1
  270. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/44px/segmented.css +1 -1
  271. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/segmented.css +2 -2
  272. data/lib/frameworks/sproutcore/themes/standard_theme/english.lproj/segmented.css +62 -62
  273. data/lib/gen/html_app/Buildfile +36 -0
  274. data/lib/gen/html_app/README +1 -0
  275. data/lib/gen/html_app/USAGE +15 -0
  276. data/lib/gen/html_app/templates/apps/@target_name@/@target_name@.js +14 -0
  277. data/lib/gen/html_app/templates/apps/@target_name@/resources/images/.gitkeep +0 -0
  278. data/lib/gen/html_app/templates/apps/@target_name@/resources/stylesheets/@target_name@.css +0 -0
  279. data/lib/gen/html_app/templates/apps/@target_name@/resources/templates/@target_name@.handlebars +1 -0
  280. data/lib/gen/html_project/Buildfile +45 -0
  281. data/lib/gen/html_project/INIT +3 -0
  282. data/lib/gen/html_project/README +1 -0
  283. data/lib/gen/html_project/USAGE +2 -0
  284. data/lib/gen/html_project/templates/@filename@/Buildfile +8 -0
  285. data/lib/gen/html_project/templates/@filename@/README +7 -0
  286. data/lib/sproutcore/builders/handlebars.rb +30 -0
  287. data/lib/sproutcore/builders.rb +1 -1
  288. data/lib/sproutcore/helpers/static_helper.rb +3 -3
  289. data/lib/sproutcore/tools/init.rb +25 -9
  290. data/spec/buildtasks/manifest/prepare_build_tasks/handlebars_spec.rb +39 -0
  291. data/spec/fixtures/builder_tests/apps/handlebars_test/template.handlebars +5 -0
  292. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/templates/demo.handlebars +4 -0
  293. data/spec/lib/builders/handlebars_spec.rb +29 -0
  294. data/vendor/chance/lib/chance/imagers/data_url.rb +20 -7
  295. data/vendor/chance/lib/chance/instance.rb +4 -1
  296. data/vendor/chance/lib/chance/parser.rb +31 -31
  297. data/vendor/chance/lib/chance/slicing.rb +38 -8
  298. metadata +195 -225
  299. data/lib/frameworks/sproutcore/frameworks/amber/system/device.js +0 -143
  300. data/lib/frameworks/sproutcore/frameworks/amber/system/utils.js +0 -174
  301. data/lib/frameworks/sproutcore/frameworks/amber/tests/views/main_pane.js +0 -31
  302. data/lib/frameworks/sproutcore/frameworks/amber/tests/views/pane/sendTouchEvent.js +0 -267
  303. data/lib/frameworks/sproutcore/frameworks/amber/tests/views/view/layoutDidChange.js +0 -149
  304. data/lib/frameworks/sproutcore/frameworks/amber/tests/views/view/layoutStyle.js +0 -602
  305. data/lib/frameworks/sproutcore/frameworks/amber/tests/views/view/render.js +0 -115
  306. data/lib/frameworks/sproutcore/frameworks/amber/views/base.js +0 -1
  307. data/lib/frameworks/sproutcore/frameworks/amber/views/view.js +0 -4003
  308. 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 frame status scale toolTip type'.w(),
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
- image.onerror = image.onabort = function() {
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
- image.onload = function() {
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 hintStatus = this.get('hintON'),
147
- val = this.get('value');
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.safari,0)<532);
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.safari && this.get('isTextArea')){
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: function(){
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.safari && val.length>max){
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
+ });