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
@@ -0,0 +1,295 @@
1
+ /**
2
+ This module specifically tests integration with Handlebars and SproutCore-specific
3
+ Handlebars extensions.
4
+
5
+ If you add additional template support to SC.TemplateView, you should create a new
6
+ file in which to test.
7
+ */
8
+ module("SC.TemplateView - handlebars integration");
9
+
10
+ test("template view should call the function of the associated template", function() {
11
+ var view = SC.TemplateView.create({
12
+ templateName: 'test_template',
13
+ templates: SC.Object.create({
14
+ test_template: SC.Handlebars.compile("<h1 id='twas-called'>template was called</h1>")
15
+ })
16
+ });
17
+
18
+ view.createLayer();
19
+
20
+ ok(view.$('#twas-called').length, "the named template was called");
21
+ });
22
+
23
+ test("template view should call the function of the associated template with itself as the context", function() {
24
+ var view = SC.TemplateView.create({
25
+ templateName: 'test_template',
26
+
27
+ _personName: "Tom DAAAALE",
28
+ _i: 0,
29
+
30
+ personName: function() {
31
+ this._i++;
32
+ return this._personName + this._i;
33
+ }.property().cacheable(),
34
+
35
+ templates: SC.Object.create({
36
+ test_template: SC.Handlebars.compile("<h1 id='twas-called'>template was called for {{personName}}. Yea {{personName}}</h1>")
37
+ })
38
+ });
39
+
40
+ view.createLayer();
41
+
42
+ equals("template was called for Tom DAAAALE1. Yea Tom DAAAALE1", view.$('#twas-called').text(), "the named template was called with the view as the data source");
43
+ });
44
+
45
+ TemplateTests = {};
46
+
47
+ test("child views can be inserted using the {{view}} Handlebars helper", function() {
48
+ var templates = SC.Object.create({
49
+ nester: SC.Handlebars.compile("<h1 id='hello-world'>Hello {{world}}</h1>{{view \"TemplateTests.LabelView\"}}"),
50
+ nested: SC.Handlebars.compile("<div id='child-view'>Goodbye {{cruel}} {{world}}</div>")
51
+ });
52
+
53
+ TemplateTests.LabelView = SC.TemplateView.extend({
54
+ tagName: "aside",
55
+ cruel: "cruel",
56
+ world: "world?",
57
+ templateName: 'nested',
58
+ templates: templates
59
+ });
60
+
61
+ var view = SC.TemplateView.create({
62
+ world: "world!",
63
+ templateName: 'nester',
64
+ templates: templates
65
+ });
66
+
67
+ view.createLayer();
68
+
69
+ ok(view.$("#hello-world:contains('Hello world!')").length, "The parent view renders its contents");
70
+ ok(view.$("#child-view:contains('Goodbye cruel world?')").length === 1, "The child view renders its content once");
71
+ ok(view.$().html().match(/Hello world!.*<aside.*Goodbye cruel world?/), "parent view should appear before the child view");
72
+
73
+ });
74
+
75
+ test("child views can be inserted inside a bind block", function() {
76
+ var templates = SC.Object.create({
77
+ nester: SC.Handlebars.compile("<h1 id='hello-world'>Hello {{world}}</h1>{{view \"TemplateTests.LabelView\"}}"),
78
+ nested: SC.Handlebars.compile("<div id='child-view'>Goodbye {{#bind \"content\"}}{{blah}} {{view \"TemplateTests.OtherView\"}}{{/bind}} {{world}}</div>"),
79
+ other: SC.Handlebars.compile("cruel")
80
+ });
81
+
82
+ TemplateTests.LabelView = SC.TemplateView.extend({
83
+ tagName: "aside",
84
+ cruel: "cruel",
85
+ world: "world?",
86
+ content: SC.Object.create({ blah: "wot" }),
87
+ templateName: 'nested',
88
+ templates: templates
89
+ });
90
+
91
+ TemplateTests.OtherView = SC.TemplateView.extend({
92
+ templates: templates,
93
+ templateName: 'other'
94
+ });
95
+
96
+ var view = SC.TemplateView.create({
97
+ world: "world!",
98
+ templateName: 'nester',
99
+ templates: templates
100
+ });
101
+
102
+ view.createLayer();
103
+
104
+ ok(view.$("#hello-world:contains('Hello world!')").length, "The parent view renders its contents");
105
+ ok(view.$("aside:contains('Goodbye wot cruel world?')").length === 1, "The child view renders its content once");
106
+ ok(view.$().html().match(/Hello world!.*<aside.*Goodbye.*wot.*cruel.*world?/), "parent view should appear before the child view");
107
+
108
+ });
109
+
110
+ test("SC.TemplateView updates when a property changes", function() {
111
+ var templates = SC.Object.create({
112
+ foo: SC.Handlebars.compile('<h1 id="first">{{#with content}}{{bind "wham"}}{{/with}}</h1>')
113
+ });
114
+
115
+ var view = SC.TemplateView.create({
116
+ templateName: 'foo',
117
+ templates: templates,
118
+
119
+ content: SC.Object.create({
120
+ wham: 'bam',
121
+ thankYou: "ma'am"
122
+ })
123
+ });
124
+
125
+ view.createLayer();
126
+
127
+ equals(view.$('#first').text(), "bam", "precond - view renders Handlebars template");
128
+
129
+ SC.run(function() { view.get('content').set('wham', 'bazam'); });
130
+
131
+ equals(view.$('#first').text(), "bazam", "view updates when a bound property changes");
132
+ });
133
+
134
+
135
+ test("Handlebars templates update properties if a content object changes", function() {
136
+ var templates;
137
+
138
+ templates = SC.Object.create({
139
+ menu: SC.Handlebars.compile('<h1>Today\'s Menu</h1>{{#bind "coffee"}}<h2>{{color}} coffee</h2><span id="price">{{bind "price"}}</span>{{/bind}}')
140
+ });
141
+
142
+ var view = SC.TemplateView.create({
143
+ templateName: 'menu',
144
+ templates: templates,
145
+
146
+ coffee: SC.Object.create({
147
+ color: 'brown',
148
+ price: '$4'
149
+ })
150
+ });
151
+
152
+ view.createLayer();
153
+
154
+ equals(view.$('h2').text(), "brown coffee", "precond - renders color correctly");
155
+ equals(view.$('#price').text(), '$4', "precond - renders price correctly");
156
+
157
+ view.set('coffee', SC.Object.create({
158
+ color: "mauve",
159
+ price: "$4.50"
160
+ }));
161
+
162
+ equals(view.$('h2').text(), "mauve coffee", "should update name field when content changes");
163
+ equals(view.$('#price').text(), "$4.50", "should update price field when content changes");
164
+
165
+ view.set('coffee', SC.Object.create({
166
+ color: "mauve",
167
+ price: "$5.50"
168
+ }));
169
+
170
+ equals(view.$('h2').text(), "mauve coffee", "should update name field when content changes");
171
+ equals(view.$('#price').text(), "$5.50", "should update price field when content changes");
172
+
173
+ view.setPath('coffee.price', "$5");
174
+
175
+ equals(view.$('#price').text(), "$5", "should update price field when price property is changed");
176
+ });
177
+
178
+ test("Template views return a no-op function if their template cannot be found", function() {
179
+ var view = SC.TemplateView.create({
180
+ templateName: 'cantBeFound'
181
+ });
182
+
183
+ var template = view.get('template');
184
+
185
+ ok(SC.typeOf(template) === 'function', 'template should be a function');
186
+ equals(template(), '', 'should return an empty string');
187
+ });
188
+
189
+ test("Template views can belong to a pane and a parent view", function() {
190
+ var templates = SC.Object.create({
191
+ toDo: SC.Handlebars.compile('<h1>{{title}}</h1> (Created at {{createdAt}})')
192
+ });
193
+
194
+ var didCreateLayerWasCalled = NO;
195
+
196
+ var pane = SC.MainPane.design({
197
+ childViews: ['container'],
198
+
199
+ container: SC.View.design({
200
+ childViews: ['normalView', 'template'],
201
+
202
+ normalView: SC.View,
203
+
204
+ template: SC.TemplateView.design({
205
+ templates: templates,
206
+
207
+ templateName: 'toDo',
208
+ title: 'Do dishes',
209
+ createdAt: "Today",
210
+
211
+ didCreateLayer: function() {
212
+ didCreateLayerWasCalled = YES;
213
+ }
214
+ })
215
+ })
216
+ });
217
+
218
+ pane = pane.create().append();
219
+
220
+ equals(pane.$().children().length, 1, "pane has one child DOM element");
221
+ equals(pane.$().children().children().length, 2, "container view has two child DOM elements");
222
+ equals(pane.$().children().children().eq(1).html(), "<h1>Do dishes</h1> (Created at Today)", "renders template to the correct DOM element");
223
+ ok(didCreateLayerWasCalled, "didCreateLayer gets called on a template view after it gets rendered");
224
+ pane.remove();
225
+ });
226
+
227
+ test("Template views add a layerId to child views created using the view helper", function() {
228
+ var templates = SC.Object.create({
229
+ parent: SC.Handlebars.compile('<aside>{{view "TemplateTests.ChildView"}}</aside>'),
230
+ child: SC.Handlebars.compile("I can't believe it's not butter.")
231
+ });
232
+
233
+ TemplateTests.ChildView = SC.TemplateView.extend({
234
+ templates: templates,
235
+ templateName: 'child'
236
+ });
237
+
238
+ var view = SC.TemplateView.create({
239
+ templates: templates,
240
+ templateName: 'parent'
241
+ });
242
+
243
+ view.createLayer();
244
+ var childView = view.getPath('childViews.firstObject');
245
+ equals(view.$().children().first().children().first().attr('id'), childView.get('layerId'));
246
+ });
247
+
248
+ test("Template views set the template of their children to a passed block", function() {
249
+ var templates = SC.Object.create({
250
+ parent: SC.Handlebars.compile('<h1>{{#view "TemplateTests.NoTemplateView"}}<span>It worked!</span>{{/view}}')
251
+ });
252
+
253
+ TemplateTests.NoTemplateView = SC.TemplateView.extend();
254
+
255
+ var view = SC.TemplateView.create({
256
+ templates: templates,
257
+ templateName: 'parent'
258
+ });
259
+
260
+ view.createLayer();
261
+ ok(view.$().html().match(/<h1>.*<span>.*<\/span>.*<\/h1>/), "renders the passed template inside the parent template");
262
+ });
263
+
264
+ test("Child views created using the view helper should have their parent view set properly", function() {
265
+ TemplateTests = {};
266
+
267
+ var template = '{{#view "SC.TemplateView"}}{{#view "SC.TemplateView"}}{{view "SC.TemplateView"}}{{/view}}{{/view}}';
268
+
269
+ var view = SC.TemplateView.create({
270
+ template: SC.Handlebars.compile(template)
271
+ });
272
+
273
+ view.createLayer();
274
+
275
+ var childView = view.childViews[0].childViews[0];
276
+ equals(childView, childView.childViews[0].parentView, 'parent view is correct');
277
+ });
278
+
279
+ test("Collection views that specify an example view class have their children be of that class", function() {
280
+ TemplateTests.ExampleViewCollection = SC.TemplateCollectionView.create({
281
+ itemView: SC.TemplateView.extend({
282
+ isCustom: YES
283
+ }),
284
+
285
+ content: ['foo']
286
+ });
287
+
288
+ var parentView = SC.TemplateView.create({
289
+ template: SC.Handlebars.compile('{{#collection "TemplateTests.ExampleViewCollection"}}OHAI{{/collection}}')
290
+ });
291
+
292
+ parentView.createLayer();
293
+
294
+ ok(parentView.childViews[0].childViews[0].isCustom, "uses the example view class");
295
+ });
@@ -18,6 +18,7 @@ function transitionFor(view){
18
18
 
19
19
  var commonSetup = {
20
20
  setup: function() {
21
+
21
22
  SC.RunLoop.begin();
22
23
 
23
24
  pane = SC.Pane.create({
@@ -25,7 +26,7 @@ var commonSetup = {
25
26
  layout: { top: 0, right: 0, width: 200, height: 200, zIndex: 100 }
26
27
  });
27
28
  pane.append();
28
-
29
+
29
30
  view = SC.View.create({
30
31
  backgroundColor: '#888',
31
32
  layout: { left: 0, top: 0, height: 100, width: 100 }
@@ -56,15 +57,15 @@ if (SC.platform.supportsCSSTransitions) {
56
57
  SC.RunLoop.begin();
57
58
  view.animate('left', 100, 1);
58
59
  SC.RunLoop.end();
59
- equals(transitionFor(view), 'left 1s linear', 'add transition');
60
+ equals(transitionFor(view), 'left 1s linear', 'add transition');
60
61
  });
61
62
 
62
63
  test("callbacks work in general", function(){
63
- stop(1000);
64
+ stop(2000);
64
65
 
65
66
  SC.RunLoop.begin();
66
67
  // We shouldn't have to use invokeLater, but it's the only way to get this to work!
67
- view.invokeLater('animate', 1, 'left', 100, .5, function() {
68
+ view.invokeLater('animate', 1, 'left', 100, 0.500, function() {
68
69
  start();
69
70
  ok(true, "Callback was called.");
70
71
  });
@@ -72,11 +73,11 @@ if (SC.platform.supportsCSSTransitions) {
72
73
  });
73
74
 
74
75
  test("callbacks should have appropriate data", function(){
75
- stop(1000);
76
+ stop(2000);
76
77
 
77
78
  SC.RunLoop.begin();
78
79
  // We shouldn't have to use invokeLater, but it's the only way to get this to work!
79
- view.invokeLater('animate', 1, 'left', 100, .5, function(data) {
80
+ view.invokeLater('animate', 1, 'left', 100, 0.500, function(data) {
80
81
  start();
81
82
 
82
83
  // TODO: Test this better
@@ -113,7 +114,7 @@ if (SC.platform.supportsCSSTransitions) {
113
114
 
114
115
  // Pretty sure this does the job
115
116
  test("callbacks should be called for each property", function(){
116
- stop(1000);
117
+ stop(2000);
117
118
  var stopped = true;
118
119
 
119
120
  expect(2);
@@ -121,7 +122,7 @@ if (SC.platform.supportsCSSTransitions) {
121
122
 
122
123
  SC.RunLoop.begin();
123
124
  // We shouldn't have to use invokeLater, but it's the only way to get this to work!
124
- view.invokeLater('animate', 1, { top: 100, left: 100 }, .5, function(data) {
125
+ view.invokeLater('animate', 1, { top: 100, left: 100 }, 0.500, function(data) {
125
126
  if (stopped) {
126
127
  start();
127
128
  stopped = false;
@@ -144,10 +145,10 @@ if (SC.platform.supportsCSSTransitions) {
144
145
  expect(2);
145
146
 
146
147
  SC.RunLoop.begin();
147
- view.invokeLater('animate', 1, 'top', 100, 1, function(){
148
+ view.invokeLater('animate', 1, 'top', 100, 0.250, function(){
148
149
  ok(true, 'top finished');
149
150
  });
150
- view.invokeLater('animate', 500, 'left', 100, .5, function(){
151
+ view.invokeLater('animate', 2, 'left', 100, 0.500, function(){
151
152
  ok(true, 'left finished');
152
153
  start();
153
154
  });
@@ -160,10 +161,10 @@ if (SC.platform.supportsCSSTransitions) {
160
161
  expect(2);
161
162
 
162
163
  SC.RunLoop.begin();
163
- view.invokeLater('animate', 1, 'top', 100, 1, function(data){
164
+ view.invokeLater('animate', 1, 'top', 100, 0.500, function(data){
164
165
  equals(data.isCancelled, true, 'first cancelled');
165
166
  });
166
- view.invokeLater('animate', 500, 'top', 0, .5, function(data){
167
+ view.invokeLater('animate', 250, 'top', 0, 0.500, function(data){
167
168
  equals(data.isCancelled, false, 'second not cancelled');
168
169
  start();
169
170
  });
@@ -176,7 +177,7 @@ if (SC.platform.supportsCSSTransitions) {
176
177
  SC.RunLoop.end();
177
178
  equals(transitionFor(view), '-'+SC.platform.cssPrefix+'-transform 1s linear', 'add transition');
178
179
  equals(styleFor(view)[SC.platform.domCSSPrefix+'Transform'], 'rotateX(45deg)', 'has both transforms');
179
- equals(45, view.get('layout').rotateX, 'rotateX is 45deg');
180
+ equals(45, view.get('layout').rotateX, 'rotateX is 45deg');
180
181
  });
181
182
 
182
183
  test("should handle conflicting transform animations", function(){
@@ -202,12 +203,12 @@ if (SC.platform.supportsCSSTransitions) {
202
203
  test("should properly handle callbacks from conflicting transforms");
203
204
 
204
205
  test("removes animation property when done", function(){
205
- stop(1500);
206
+ stop(2000);
206
207
 
207
208
  SC.RunLoop.begin();
208
- view.invokeLater('animate', 1, { top: 100, scale: 2 }, 0.5);
209
+ view.invokeLater('animate', 1000, { top: 100, scale: 2 }, 0.500);
209
210
  SC.RunLoop.end();
210
-
211
+
211
212
  setTimeout(function(){
212
213
  start();
213
214
  equals(view.get('layout').animateTop, undefined, "animateTop is undefined");
@@ -263,7 +264,7 @@ if (SC.platform.supportsCSSTransitions) {
263
264
  });
264
265
 
265
266
  test("callbacks should work properly with acceleration", function(){
266
- stop(1000);
267
+ stop(2000);
267
268
  var stopped = true;
268
269
 
269
270
  expect(3);
@@ -271,7 +272,7 @@ if (SC.platform.supportsCSSTransitions) {
271
272
 
272
273
  SC.RunLoop.begin();
273
274
  // We shouldn't have to use invokeLater, but it's the only way to get this to work!
274
- view.invokeLater('animate', 1, { top: 100, left: 100, scale: 2 }, .5, function(data) {
275
+ view.invokeLater('animate', 1, { top: 100, left: 100, scale: 2 }, 0.500, function(data) {
275
276
  if (stopped) {
276
277
  start();
277
278
  stopped = false;
@@ -8,7 +8,7 @@
8
8
 
9
9
  // ..........................................................
10
10
  // createChildViews()
11
- //
11
+ //
12
12
  module("SC.View#createChildViews");
13
13
 
14
14
  test("calls createChildView() for each class or string in childViews array", function() {
@@ -16,24 +16,27 @@ test("calls createChildView() for each class or string in childViews array", fun
16
16
  var v = SC.View.create({
17
17
  childViews: [
18
18
  SC.View.extend({ key: 0 }), // class - should be called
19
- SC.View.create({ key: 1 }), // NOT class - should NOT be called
20
- 'customClassName' // string - should be called
19
+ SC.View.create({ key: 1 }), // instance - will be called
20
+ 'customClassName' // string - should be called
21
21
  ],
22
22
 
23
23
  // this shuld be used for the 'customClassName' item above
24
24
  customClassName: SC.View.extend({ key: 2 }),
25
-
25
+
26
26
  // patch to record results...
27
27
  createChildView: function(childView) {
28
- called.push(childView.prototype.key);
29
- ok(childView.isClass, "childView: %@ isClass".fmt(childView));
28
+ if(childView.isClass) {
29
+ called.push(childView.prototype.key);
30
+ } else {
31
+ called.push(childView.key);
32
+ }
30
33
  return sc_super();
31
34
  }
32
35
  });
33
-
36
+
34
37
  // createChildViews() is called automatically during create.
35
- same(called, [0,2], 'called createChildView for correct children');
36
-
38
+ same(called, [0,1,2], 'called createChildView for correct children');
39
+
37
40
  // make sure childViews array is correct now.
38
41
  var cv = v.childViews, len = cv.length, idx;
39
42
  for(idx=0;idx<len;idx++) {
@@ -51,7 +54,7 @@ test("should not error when there is a dud view name in childViews list.", funct
51
54
  ],
52
55
  // this shuld be used for the 'customClassName' item above
53
56
  customClassName: SC.View.extend({ key: 2 }),
54
-
57
+
55
58
  // patch to record results...
56
59
  createChildView: function(childView) {
57
60
  called.push(childView.prototype.key);
@@ -59,7 +62,7 @@ test("should not error when there is a dud view name in childViews list.", funct
59
62
  return sc_super();
60
63
  }
61
64
  });
62
-
65
+
63
66
  // createChildViews() is called automatically during create.
64
67
  same(called, [2], 'called createChildView for correct children');
65
68
  });
@@ -72,9 +75,9 @@ test("should not throw error when there is an extra space in the childViews list
72
75
  customClassName: SC.View.extend({ key: 2 }),
73
76
  customKlassName: SC.View.extend({ key: 3 })
74
77
  });
75
-
78
+
76
79
  ok(true, "called awake without issue.");
77
-
80
+
78
81
  });
79
82
 
80
83
  test("should not create layer for created child views", function() {
@@ -87,12 +90,12 @@ test("should not create layer for created child views", function() {
87
90
 
88
91
  // ..........................................................
89
92
  // createChildView()
90
- //
93
+ //
91
94
 
92
95
  var view, myViewClass ;
93
96
  module("SC.View#createChildView", {
94
97
  setup: function() {
95
- view = SC.View.create({ page: SC.Object.create() });
98
+ view = SC.View.create({ page: SC.Object.create() });
96
99
  myViewClass = SC.View.extend({ isMyView: YES, foo: 'bar' });
97
100
  }
98
101
  });
@@ -26,14 +26,17 @@ test("Check that didAppendToDocument gets called at the right moment", function(
26
26
  })
27
27
  ]
28
28
  });
29
- equals(counter, 0, "");
29
+ equals(counter, 0, "precond - has not been called yet");
30
30
  pane.append(); // make sure there is a layer...
31
- equals(counter, 1, "");
31
+ equals(counter, 1, "didAppendToDocument was called once");
32
32
  view = pane.childViews[0];
33
- view.displayDidChange();
34
- SC.RunLoop.begin().end();
35
- equals(counter, 2, "");
36
-
33
+
34
+ SC.run(function() {
35
+ view.updateLayer();
36
+ });
37
+
38
+ equals(counter, 2, "didAppendToDocument is called every time a new DOM element is created");
39
+
37
40
  var additionalView = SC.View.extend({
38
41
  didAppendToDocument: function(){
39
42
  counter++;
@@ -41,8 +44,8 @@ test("Check that didAppendToDocument gets called at the right moment", function(
41
44
  });
42
45
  additionalView = additionalView.create();
43
46
  pane.appendChild(additionalView);
44
-
47
+
45
48
  SC.RunLoop.begin().end();
46
- equals(counter, 3, "");
49
+ equals(counter, 3, "");
47
50
  pane.remove();
48
51
  });
@@ -49,3 +49,31 @@ test("adding a new view to a visible pane should make it visible", function() {
49
49
  ok(!view.get('isVisible'), "after pane.appendChild(view), view.get('isVisible') === YES") ;
50
50
  ok(view.$().hasClass('hidden'), "after view.set('isVisible', NO), view.$().hasClass('hidden') should be true") ;
51
51
  });
52
+
53
+ test("a view with visibility can have a child view without visibility", function() {
54
+ var pane = SC.Pane.create({
55
+ childViews: ['visibleChild'],
56
+
57
+ visibleChild: SC.View.design({
58
+ childViews: ['noVisibilityChild'],
59
+ noVisibilityChild: SC.CoreView
60
+ })
61
+ });
62
+
63
+ var errored = false;
64
+
65
+ try {
66
+ pane.append();
67
+ pane.remove();
68
+ } catch(e) {
69
+ errored = true;
70
+ } finally {
71
+ try {
72
+ pane.remove();
73
+ } catch(e2) {
74
+ errored = true;
75
+ }
76
+ }
77
+
78
+ ok(!errored, "Inserting a pane containing a child with visibility that itself has a child without visibility does not cause an error");
79
+ });
@@ -0,0 +1,22 @@
1
+ module("SC.View - Keyboard support");
2
+
3
+ test("Views only attempt to call performKeyEquivalent on child views that support it", function() {
4
+ var performKeyEquivalentCalled = 0;
5
+
6
+ var view = SC.View.design({
7
+ childViews: ['unsupported', 'supported'],
8
+
9
+ unsupported: SC.CoreView,
10
+ supported: SC.View.design({
11
+ performKeyEquivalent: function(str) {
12
+ performKeyEquivalentCalled++;
13
+ return NO;
14
+ }
15
+ })
16
+ });
17
+
18
+ view = view.create();
19
+ view.performKeyEquivalent("ctrl_r");
20
+
21
+ ok(performKeyEquivalentCalled > 0, "performKeyEquivalent is called on the view that supports it");
22
+ });