sproutcore 1.8.2.1 → 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (274) hide show
  1. data/VERSION.yml +2 -2
  2. data/lib/buildtasks/helpers/file_rule_list.rb +3 -3
  3. data/lib/frameworks/sproutcore/Buildfile +1 -1
  4. data/lib/frameworks/sproutcore/CHANGELOG.md +235 -16
  5. data/lib/frameworks/sproutcore/apps/media_examples/Buildfile +13 -0
  6. data/lib/frameworks/sproutcore/apps/media_examples/core.js +35 -0
  7. data/lib/frameworks/sproutcore/apps/media_examples/resources/loading.rhtml +3 -0
  8. data/lib/frameworks/sproutcore/apps/media_examples/resources/main_page.js +53 -0
  9. data/lib/frameworks/sproutcore/apps/media_examples/views/audio_view.js +100 -0
  10. data/lib/frameworks/sproutcore/apps/media_examples/views/camera_view.js +39 -0
  11. data/lib/frameworks/sproutcore/apps/media_examples/views/capabilities_view.js +116 -0
  12. data/lib/frameworks/sproutcore/apps/media_examples/views/microphone_view.js +40 -0
  13. data/lib/frameworks/sproutcore/apps/media_examples/views/video_view.js +107 -0
  14. data/lib/frameworks/sproutcore/apps/showcase/Buildfile +11 -0
  15. data/lib/frameworks/sproutcore/apps/showcase/README +15 -0
  16. data/lib/frameworks/sproutcore/apps/showcase/controllers/source_controller.js +15 -0
  17. data/lib/frameworks/sproutcore/apps/showcase/controllers/source_tree_controller.js +212 -0
  18. data/lib/frameworks/sproutcore/apps/showcase/core.js +170 -0
  19. data/lib/frameworks/sproutcore/apps/showcase/main.js +27 -0
  20. data/lib/frameworks/sproutcore/apps/showcase/resources/_theme.css +18 -0
  21. data/lib/frameworks/sproutcore/apps/showcase/resources/api.css +80 -0
  22. data/lib/frameworks/sproutcore/apps/showcase/resources/favicon.ico +0 -0
  23. data/lib/frameworks/sproutcore/apps/showcase/resources/images/alarm-clock.png +0 -0
  24. data/lib/frameworks/sproutcore/apps/showcase/resources/images/balloon-facebook.png +0 -0
  25. data/lib/frameworks/sproutcore/apps/showcase/resources/images/balloon-twitter.png +0 -0
  26. data/lib/frameworks/sproutcore/apps/showcase/resources/images/balloon.png +0 -0
  27. data/lib/frameworks/sproutcore/apps/showcase/resources/images/bullet.png +0 -0
  28. data/lib/frameworks/sproutcore/apps/showcase/resources/images/calendar-insert.png +0 -0
  29. data/lib/frameworks/sproutcore/apps/showcase/resources/images/cross.png +0 -0
  30. data/lib/frameworks/sproutcore/apps/showcase/resources/images/example-box-bg.png +0 -0
  31. data/lib/frameworks/sproutcore/apps/showcase/resources/images/fruit-grape.png +0 -0
  32. data/lib/frameworks/sproutcore/apps/showcase/resources/images/fruit-lime.png +0 -0
  33. data/lib/frameworks/sproutcore/apps/showcase/resources/images/fruit-orange.png +0 -0
  34. data/lib/frameworks/sproutcore/apps/showcase/resources/images/fruit.png +0 -0
  35. data/lib/frameworks/sproutcore/apps/showcase/resources/images/glow.png +0 -0
  36. data/lib/frameworks/sproutcore/apps/showcase/resources/images/green-dot.png +0 -0
  37. data/lib/frameworks/sproutcore/apps/showcase/resources/images/grey-dot.png +0 -0
  38. data/lib/frameworks/sproutcore/apps/showcase/resources/images/logo.png +0 -0
  39. data/lib/frameworks/sproutcore/apps/showcase/resources/images/pixels.png +0 -0
  40. data/lib/frameworks/sproutcore/apps/showcase/resources/images/red-dot.png +0 -0
  41. data/lib/frameworks/sproutcore/apps/showcase/resources/images/sproutcore-logo.png +0 -0
  42. data/lib/frameworks/sproutcore/apps/showcase/resources/images/sproutcore-startup-landscape.jpg +0 -0
  43. data/lib/frameworks/sproutcore/apps/{test_controls → showcase}/resources/loading.rhtml +1 -1
  44. data/lib/frameworks/sproutcore/apps/showcase/resources/main_page.js +61 -0
  45. data/lib/frameworks/sproutcore/apps/showcase/resources/stylesheet.css +365 -0
  46. data/lib/frameworks/sproutcore/apps/showcase/resources/views_page.js +64 -0
  47. data/lib/frameworks/sproutcore/apps/showcase/system/views_item_content.js +59 -0
  48. data/lib/frameworks/sproutcore/apps/showcase/theme.js +27 -0
  49. data/lib/frameworks/sproutcore/apps/showcase/views/button_views.js +55 -0
  50. data/lib/frameworks/sproutcore/apps/showcase/views/checkbox_views.js +34 -0
  51. data/lib/frameworks/sproutcore/apps/showcase/views/container_views.js +29 -0
  52. data/lib/frameworks/sproutcore/apps/showcase/views/date_field_views.js +30 -0
  53. data/lib/frameworks/sproutcore/apps/showcase/views/disclosure_views.js +22 -0
  54. data/lib/frameworks/sproutcore/apps/showcase/views/grid_views.js +28 -0
  55. data/lib/frameworks/sproutcore/apps/showcase/views/image_button_views.js +22 -0
  56. data/lib/frameworks/sproutcore/apps/showcase/views/image_views.js +51 -0
  57. data/lib/frameworks/sproutcore/apps/showcase/views/label_views.js +53 -0
  58. data/lib/frameworks/sproutcore/apps/showcase/views/list_views.js +31 -0
  59. data/lib/frameworks/sproutcore/apps/showcase/views/popup_button_views.js +24 -0
  60. data/lib/frameworks/sproutcore/apps/showcase/views/progress_views.js +26 -0
  61. data/lib/frameworks/sproutcore/apps/showcase/views/radio_views.js +30 -0
  62. data/lib/frameworks/sproutcore/apps/showcase/views/scroll_views.js +40 -0
  63. data/lib/frameworks/sproutcore/apps/showcase/views/segmented_views.js +90 -0
  64. data/lib/frameworks/sproutcore/apps/showcase/views/select_views.js +64 -0
  65. data/lib/frameworks/sproutcore/apps/showcase/views/slider_views.js +46 -0
  66. data/lib/frameworks/sproutcore/apps/showcase/views/source_list_views.js +23 -0
  67. data/lib/frameworks/sproutcore/apps/showcase/views/split_views.js +22 -0
  68. data/lib/frameworks/sproutcore/apps/showcase/views/stacked_views.js +23 -0
  69. data/lib/frameworks/sproutcore/apps/showcase/views/static_content_views.js +23 -0
  70. data/lib/frameworks/sproutcore/apps/showcase/views/tab_views.js +51 -0
  71. data/lib/frameworks/sproutcore/apps/showcase/views/text_field_views.js +52 -0
  72. data/lib/frameworks/sproutcore/apps/showcase/views/toolbar_views.js +23 -0
  73. data/lib/frameworks/sproutcore/apps/showcase/views/views_item_view.js +91 -0
  74. data/lib/frameworks/sproutcore/apps/showcase/views/views_list_view.js +67 -0
  75. data/lib/frameworks/sproutcore/apps/showcase/views/web_views.js +32 -0
  76. data/lib/frameworks/sproutcore/apps/showcase/views/well_views.js +29 -0
  77. data/lib/frameworks/sproutcore/apps/showcase/views/workspace_views.js +23 -0
  78. data/lib/frameworks/sproutcore/apps/tests/english.lproj/strings.js +2 -1
  79. data/lib/frameworks/sproutcore/frameworks/ajax/system/request.js +91 -51
  80. data/lib/frameworks/sproutcore/frameworks/ajax/system/response.js +93 -27
  81. data/lib/frameworks/sproutcore/frameworks/ajax/tests/system/request.js +196 -15
  82. data/lib/frameworks/sproutcore/frameworks/bootstrap/system/browser.js +1 -1
  83. data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/array.js +26 -10
  84. data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/object.js +90 -92
  85. data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/object.js +69 -39
  86. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/selection_support.js +1 -1
  87. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/color.js +769 -0
  88. data/lib/frameworks/sproutcore/frameworks/{desktop → core_foundation}/system/key_bindings.js +0 -0
  89. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/render_context.js +4 -4
  90. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/req_anim_frame.js +31 -0
  91. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/sparse_array.js +7 -1
  92. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/utils.js +8 -6
  93. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/array_case.js +49 -0
  94. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/selection_support.js +1 -1
  95. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/ext/object_test.js +106 -0
  96. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/color.js +448 -0
  97. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/escape_html.js +8 -1
  98. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/timer/invokeLater.js +24 -24
  99. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/utils/offset.js +5 -5
  100. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/animation.js +90 -30
  101. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/class_name_bindings_test.js +14 -6
  102. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/touch.js +113 -0
  103. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +64 -8
  104. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/animation.js +20 -4
  105. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout_style.js +58 -38
  106. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/touch.js +32 -39
  107. data/lib/frameworks/sproutcore/frameworks/core_tools/models/target.js +20 -15
  108. data/lib/frameworks/sproutcore/frameworks/datastore/models/child_attribute.js +19 -15
  109. data/lib/frameworks/sproutcore/frameworks/datastore/models/child_record.js +1 -1
  110. data/lib/frameworks/sproutcore/frameworks/datastore/models/children_attribute.js +16 -16
  111. data/lib/frameworks/sproutcore/frameworks/datastore/models/many_attribute.js +32 -32
  112. data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +53 -38
  113. data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +9 -8
  114. data/lib/frameworks/sproutcore/frameworks/datastore/models/single_attribute.js +26 -26
  115. data/lib/frameworks/sproutcore/frameworks/datastore/system/child_array.js +1 -3
  116. data/lib/frameworks/sproutcore/frameworks/datastore/system/query.js +4 -3
  117. data/lib/frameworks/sproutcore/frameworks/datastore/system/record_array.js +0 -4
  118. data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +96 -8
  119. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/datetime_recordattribute.js +22 -4
  120. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/data_store.js +24 -24
  121. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record.js +376 -37
  122. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array.js +51 -53
  123. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array_complex.js +108 -66
  124. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_complex.js +33 -35
  125. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/single_attribute.js +6 -4
  126. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/compare.js +33 -3
  127. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/createRecord.js +181 -15
  128. data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/system/datetime.js +6 -0
  129. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/border.js +3 -1
  130. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_fast_path.js +2 -1
  131. data/lib/frameworks/sproutcore/frameworks/desktop/panes/menu.js +153 -6
  132. data/lib/frameworks/sproutcore/frameworks/desktop/panes/modal.js +39 -18
  133. data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drop_target.js +2 -1
  134. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/disclosure.js +6 -7
  135. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/progress.js +139 -50
  136. data/lib/frameworks/sproutcore/frameworks/{foundation → desktop}/resources/button_view.css +3 -3
  137. data/lib/frameworks/sproutcore/frameworks/{foundation → desktop}/resources/checkbox_view.css +4 -0
  138. data/lib/frameworks/sproutcore/frameworks/desktop/resources/disclosure.css +2 -2
  139. data/lib/frameworks/sproutcore/frameworks/{foundation → desktop}/resources/radio_view.css +0 -0
  140. data/lib/frameworks/sproutcore/frameworks/desktop/resources/segmented.css +23 -17
  141. data/lib/frameworks/sproutcore/frameworks/desktop/resources/web.css +5 -0
  142. data/lib/frameworks/sproutcore/frameworks/desktop/tests/integration/dialog.js +4 -5
  143. data/lib/frameworks/sproutcore/frameworks/desktop/tests/mixins/border.js +3 -12
  144. data/lib/frameworks/sproutcore/frameworks/desktop/tests/mixins/collection_fast_path.js +58 -0
  145. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/methods.js +2 -2
  146. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/ui.js +79 -12
  147. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/mouse.js +13 -0
  148. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/date_field/ui.js +2 -2
  149. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/grid/drag_and_drop.js +147 -0
  150. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/grid/methods.js +123 -2
  151. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/drag_and_drop.js +150 -0
  152. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list_item.js +58 -44
  153. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/progress/methods.js +9 -80
  154. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +54 -130
  155. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/observers.js +78 -0
  156. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +64 -9
  157. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select/methods.js +11 -11
  158. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select/ui.js +28 -2
  159. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/slider/methods.js +74 -0
  160. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/slider/ui.js +141 -0
  161. data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +4 -1
  162. data/lib/frameworks/sproutcore/frameworks/desktop/views/grid.js +69 -36
  163. data/lib/frameworks/sproutcore/frameworks/desktop/views/list.js +27 -11
  164. data/lib/frameworks/sproutcore/frameworks/desktop/views/list_item.js +41 -25
  165. data/lib/frameworks/sproutcore/frameworks/desktop/views/progress.js +51 -89
  166. data/lib/frameworks/sproutcore/frameworks/desktop/views/segmented.js +59 -34
  167. data/lib/frameworks/sproutcore/frameworks/desktop/views/select.js +59 -49
  168. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/scroll.js +1 -1
  169. data/lib/frameworks/sproutcore/frameworks/foundation/controllers/tree.js +4 -1
  170. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/label.js +14 -14
  171. data/lib/frameworks/sproutcore/frameworks/foundation/resources/label.css +8 -8
  172. data/lib/frameworks/sproutcore/frameworks/foundation/resources/text_field.css +13 -1
  173. data/lib/frameworks/sproutcore/frameworks/foundation/system/user_defaults.js +4 -1
  174. data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/colors.js +21 -22
  175. data/lib/frameworks/sproutcore/frameworks/foundation/tests/controllers/tree/selection_support.js +26 -0
  176. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/beginEditing.js +4 -5
  177. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/image_queue.js +68 -44
  178. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/user_defaults.js +10 -0
  179. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/container/methods.js +0 -10
  180. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/container/ui.js +24 -59
  181. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/label/ui.js +47 -34
  182. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/methods.js +96 -12
  183. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +38 -0
  184. data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +38 -50
  185. data/lib/frameworks/sproutcore/frameworks/jquery/jquery-buffer.js +6 -2
  186. data/lib/frameworks/sproutcore/frameworks/media/media_capabilities.js +211 -0
  187. data/lib/frameworks/sproutcore/frameworks/media/render_delegates/media_slider.js +77 -0
  188. data/lib/frameworks/sproutcore/frameworks/media/resources/playeras3.fla +0 -0
  189. data/lib/frameworks/sproutcore/frameworks/media/resources/video.css +129 -115
  190. data/lib/frameworks/sproutcore/frameworks/media/resources/videoCanvas.swf +0 -0
  191. data/lib/frameworks/sproutcore/frameworks/media/tests/media_capabilities.js +194 -0
  192. data/lib/frameworks/sproutcore/frameworks/media/views/audio.js +56 -173
  193. data/lib/frameworks/sproutcore/frameworks/media/views/controls.js +15 -18
  194. data/lib/frameworks/sproutcore/frameworks/media/views/media_slider.js +63 -219
  195. data/lib/frameworks/sproutcore/frameworks/media/views/mini_controls.js +4 -2
  196. data/lib/frameworks/sproutcore/frameworks/media/views/simple_controls.js +4 -8
  197. data/lib/frameworks/sproutcore/frameworks/media/views/video.js +51 -160
  198. data/lib/frameworks/sproutcore/frameworks/routing/system/routes.js +138 -102
  199. data/lib/frameworks/sproutcore/frameworks/routing/tests/system/routes.js +8 -0
  200. data/lib/frameworks/sproutcore/frameworks/runtime/core.js +2 -2
  201. data/lib/frameworks/sproutcore/frameworks/runtime/ext/array.js +8 -2
  202. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +32 -12
  203. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +28 -24
  204. data/lib/frameworks/sproutcore/frameworks/runtime/system/binding.js +0 -2
  205. data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +111 -12
  206. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/compare.js +9 -7
  207. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/array.js +8 -2
  208. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/enumerable/enumerable.js +160 -115
  209. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/enhance.js +64 -19
  210. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/mixin.js +83 -0
  211. data/lib/frameworks/sproutcore/frameworks/template_view/ext/handlebars/bind.js +3 -0
  212. data/lib/frameworks/sproutcore/frameworks/template_view/tests/views/template/collection.js +13 -0
  213. data/lib/frameworks/sproutcore/frameworks/template_view/tests/views/template/handlebars.js +4 -2
  214. data/lib/frameworks/sproutcore/frameworks/template_view/views/template_collection.js +5 -5
  215. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/18px/button.css +5 -1
  216. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/44px/button.css +13 -12
  217. data/lib/frameworks/sproutcore/themes/ace/resources/collection/normal/list.css +9 -2
  218. data/lib/frameworks/sproutcore/themes/ace/resources/progress/ace/progress.css +105 -5
  219. data/lib/frameworks/sproutcore/themes/ace/resources/progress/ace/progress_view_indeterminate_content.png +0 -0
  220. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/18px/segmented.css +19 -15
  221. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented.css +93 -21
  222. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented_vertical_active.png +0 -0
  223. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented_vertical_normal.png +0 -0
  224. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented_vertical_selected.png +0 -0
  225. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented_vertical_selected_active.png +0 -0
  226. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented.css +91 -15
  227. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented_vertical_active.png +0 -0
  228. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented_vertical_normal.png +0 -0
  229. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented_vertical_selected.png +0 -0
  230. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented_vertical_selected_active.png +0 -0
  231. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/44px/segmented.css +21 -17
  232. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/segmented.css +26 -25
  233. data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/menu_item_view.css +2 -4
  234. data/lib/sproutcore/helpers/minifier.rb +5 -5
  235. data/lib/sproutcore/tools/build.rb +1 -1
  236. data/sproutcore.gemspec +6 -1
  237. data/vendor/chance/lib/chance/instance/slicing.rb +2 -2
  238. metadata +143 -60
  239. data/lib/frameworks/sproutcore/apps/test_controls/Buildfile +0 -0
  240. data/lib/frameworks/sproutcore/apps/test_controls/controllers/alert.js +0 -39
  241. data/lib/frameworks/sproutcore/apps/test_controls/controllers/buttons.js +0 -21
  242. data/lib/frameworks/sproutcore/apps/test_controls/controllers/categories.js +0 -125
  243. data/lib/frameworks/sproutcore/apps/test_controls/controllers/category.js +0 -36
  244. data/lib/frameworks/sproutcore/apps/test_controls/controllers/select.js +0 -12
  245. data/lib/frameworks/sproutcore/apps/test_controls/controllers/split.js +0 -74
  246. data/lib/frameworks/sproutcore/apps/test_controls/core.js +0 -29
  247. data/lib/frameworks/sproutcore/apps/test_controls/main.js +0 -14
  248. data/lib/frameworks/sproutcore/apps/test_controls/resources/buttons_page.js +0 -158
  249. data/lib/frameworks/sproutcore/apps/test_controls/resources/checkboxes_page.js +0 -53
  250. data/lib/frameworks/sproutcore/apps/test_controls/resources/flow_layout_page.js +0 -85
  251. data/lib/frameworks/sproutcore/apps/test_controls/resources/list_page.js +0 -40
  252. data/lib/frameworks/sproutcore/apps/test_controls/resources/main_page.css +0 -60
  253. data/lib/frameworks/sproutcore/apps/test_controls/resources/main_page.js +0 -151
  254. data/lib/frameworks/sproutcore/apps/test_controls/resources/panels_page.js +0 -62
  255. data/lib/frameworks/sproutcore/apps/test_controls/resources/progress_page.js +0 -33
  256. data/lib/frameworks/sproutcore/apps/test_controls/resources/radio_page.js +0 -55
  257. data/lib/frameworks/sproutcore/apps/test_controls/resources/scroll_page.js +0 -77
  258. data/lib/frameworks/sproutcore/apps/test_controls/resources/segmented_page.js +0 -99
  259. data/lib/frameworks/sproutcore/apps/test_controls/resources/select_page.js +0 -75
  260. data/lib/frameworks/sproutcore/apps/test_controls/resources/sliders_page.js +0 -54
  261. data/lib/frameworks/sproutcore/apps/test_controls/resources/split_page.js +0 -141
  262. data/lib/frameworks/sproutcore/apps/test_controls/resources/strings.js +0 -50
  263. data/lib/frameworks/sproutcore/apps/test_controls/resources/tab_page.js +0 -53
  264. data/lib/frameworks/sproutcore/apps/test_controls/resources/text_field_page.js +0 -65
  265. data/lib/frameworks/sproutcore/apps/test_controls/theme.js +0 -34
  266. data/lib/frameworks/sproutcore/apps/tests/tests/controllers/detail.js +0 -15
  267. data/lib/frameworks/sproutcore/apps/tests/tests/controllers/source.js +0 -15
  268. data/lib/frameworks/sproutcore/apps/tests/tests/controllers/target.js +0 -15
  269. data/lib/frameworks/sproutcore/apps/tests/tests/controllers/targets.js +0 -15
  270. data/lib/frameworks/sproutcore/apps/tests/tests/controllers/tests.js +0 -15
  271. data/lib/frameworks/sproutcore/apps/tests/tests/models/target.js +0 -15
  272. data/lib/frameworks/sproutcore/apps/tests/tests/models/test.js +0 -15
  273. data/lib/frameworks/sproutcore/apps/tests/tests/views/offset_checkbox.js +0 -15
  274. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/console.js +0 -21
@@ -38,4 +38,11 @@ test("Tests stolen from Prototype.js", function() {
38
38
  // some of these strings are REALLY LONG so we don't want to write them out
39
39
  ok(SC.RenderContext.escapeHTML(tests[idx++]) === tests[idx]);
40
40
  }
41
- });
41
+ });
42
+
43
+ test("Should accept number argument", function() {
44
+ var number = 12345.6789,
45
+ numStr = number.toString();
46
+
47
+ equals(numStr, SC.RenderContext.escapeHTML(number), "Properly produces string when invoked with a number argument");
48
+ });
@@ -19,7 +19,7 @@ test("should invoke method string after specified time", function() {
19
19
  });
20
20
  o.invokeLater('func', 200) ;
21
21
  SC.RunLoop.end() ;
22
-
22
+
23
23
  var tries = 20 ;
24
24
  var f = function f() {
25
25
  if (!fired && --tries >= 0) {
@@ -29,7 +29,7 @@ test("should invoke method string after specified time", function() {
29
29
  equals(YES, fired, 'did not fire') ;
30
30
  window.start() ; // starts the test runner
31
31
  } ;
32
-
32
+
33
33
  stop() ; // stops the test runner
34
34
  setTimeout(f, 300) ;
35
35
  });
@@ -42,7 +42,7 @@ test("should invoke method instance after specified time", function() {
42
42
  });
43
43
  o.invokeLater(o.func, 200) ;
44
44
  SC.RunLoop.end() ;
45
-
45
+
46
46
  var tries = 20 ;
47
47
  var f = function f() {
48
48
  if (!fired && --tries >= 0) {
@@ -52,7 +52,7 @@ test("should invoke method instance after specified time", function() {
52
52
  equals(YES, fired, 'did not fire') ;
53
53
  window.start() ; // starts the test runner
54
54
  } ;
55
-
55
+
56
56
  stop() ; // stops the test runner
57
57
  setTimeout(f, 300) ;
58
58
  });
@@ -65,7 +65,7 @@ test("should invoke method string immediately if no time passed", function() {
65
65
  });
66
66
  o.invokeLater('func') ;
67
67
  SC.RunLoop.end() ;
68
-
68
+
69
69
  var tries = 20 ;
70
70
  var f = function f() {
71
71
  if (!fired && --tries >= 0) {
@@ -75,7 +75,7 @@ test("should invoke method string immediately if no time passed", function() {
75
75
  equals(YES, fired, 'did not fire') ;
76
76
  window.start() ; // starts the test runner
77
77
  } ;
78
-
78
+
79
79
  stop() ; // stops the test runner
80
80
  setTimeout(f, 300) ;
81
81
  });
@@ -84,15 +84,15 @@ test("should automatically bind with arguments if passed", function() {
84
84
  SC.RunLoop.begin() ;
85
85
  var fired = NO ;
86
86
  var g1 = null, g2 = null ; target = null ;
87
-
87
+
88
88
  var o = SC.Object.create({
89
- func: function(arg1, arg2) {
89
+ func: function(arg1, arg2) {
90
90
  g1 = arg1 ; g2 = arg2 ; fired = YES ; target = this ;
91
91
  }
92
92
  });
93
93
  o.invokeLater('func', 200, 'ARG1', 'ARG2') ;
94
94
  SC.RunLoop.end() ;
95
-
95
+
96
96
  var tries = 20 ;
97
97
  var f = function f() {
98
98
  if (!fired && --tries >= 0) {
@@ -105,7 +105,7 @@ test("should automatically bind with arguments if passed", function() {
105
105
  equals(target, o, 'target') ;
106
106
  window.start() ; // starts the test runner
107
107
  } ;
108
-
108
+
109
109
  stop() ; // stops the test runner
110
110
  setTimeout(f, 300) ;
111
111
  });
@@ -117,10 +117,10 @@ test("should invoke function with target after specified time", function() {
117
117
  var fired = NO ;
118
118
  var target = null;
119
119
  var o = SC.Object.create() ;
120
- var func = function() { fired = YES; target = this; } ;
120
+ var func = function() { fired = YES; target = this; } ;
121
121
  func.invokeLater(o, 200) ;
122
122
  SC.RunLoop.end() ;
123
-
123
+
124
124
  var tries = 20 ;
125
125
  var f = function f() {
126
126
  if (!fired && --tries >= 0) {
@@ -131,7 +131,7 @@ test("should invoke function with target after specified time", function() {
131
131
  equals(target, o, 'target') ;
132
132
  window.start() ; // starts the test runner
133
133
  } ;
134
-
134
+
135
135
  stop() ; // stops the test runner
136
136
  setTimeout(f, 300) ;
137
137
  });
@@ -139,10 +139,10 @@ test("should invoke function with target after specified time", function() {
139
139
  test("should invoke object with no target after specified time", function() {
140
140
  SC.RunLoop.begin() ;
141
141
  var fired = NO ;
142
- var func = function() { fired = YES; } ;
142
+ var func = function() { fired = YES; } ;
143
143
  func.invokeLater(null, 200) ;
144
144
  SC.RunLoop.end() ;
145
-
145
+
146
146
  var tries = 20 ;
147
147
  var f = function f() {
148
148
  if (!fired && --tries >= 0) {
@@ -152,7 +152,7 @@ test("should invoke object with no target after specified time", function() {
152
152
  equals(YES, fired, 'did not fire') ;
153
153
  window.start() ; // starts the test runner
154
154
  } ;
155
-
155
+
156
156
  stop() ; // stops the test runner
157
157
  setTimeout(f, 300) ;
158
158
  });
@@ -161,10 +161,10 @@ test("should invoke function immediately if no time passed", function() {
161
161
  SC.RunLoop.begin() ;
162
162
  var fired = NO ;
163
163
  var o = SC.Object.create() ;
164
- var func = function() { fired = YES; } ;
164
+ var func = function() { fired = YES; } ;
165
165
  func.invokeLater(o) ;
166
166
  SC.RunLoop.end() ;
167
-
167
+
168
168
  var tries = 20 ;
169
169
  var f = function f() {
170
170
  if (!fired && --tries >= 0) {
@@ -174,7 +174,7 @@ test("should invoke function immediately if no time passed", function() {
174
174
  equals(YES, fired, 'did not fire') ;
175
175
  window.start() ; // starts the test runner
176
176
  } ;
177
-
177
+
178
178
  stop() ; // stops the test runner
179
179
  setTimeout(f, 300) ;
180
180
  });
@@ -183,14 +183,14 @@ test("should automatically bind with arguments if passed", function() {
183
183
  SC.RunLoop.begin() ;
184
184
  var fired = NO ;
185
185
  var g1 = null, g2 = null ; target = null ;
186
-
186
+
187
187
  var o = SC.Object.create() ;
188
- var func = function(arg1, arg2) {
188
+ var func = function(arg1, arg2) {
189
189
  g1 = arg1 ; g2 = arg2 ; fired = YES ; target = this ;
190
- } ;
190
+ } ;
191
191
  func.invokeLater(o, 200, 'ARG1', 'ARG2') ;
192
192
  SC.RunLoop.end() ;
193
-
193
+
194
194
  var tries = 20 ;
195
195
  var f = function f() {
196
196
  if (!fired && --tries >= 0) {
@@ -203,7 +203,7 @@ test("should automatically bind with arguments if passed", function() {
203
203
  equals(target, o, 'target') ;
204
204
  window.start() ; // starts the test runner
205
205
  } ;
206
-
206
+
207
207
  stop() ; // stops the test runner
208
208
  setTimeout(f, 300) ;
209
209
  });
@@ -26,7 +26,7 @@ module("SC.offset", {
26
26
  // the offset by viewport will always equal offset by document), we simulate an app that uses a
27
27
  // scrollable viewport to test the validity of the functions.
28
28
  var viewportEl;
29
- if (SC.browser.mobileSafari) {
29
+ if (SC.browser.isMobileSafari) {
30
30
  viewportEl = $("[name='viewport']")[0];
31
31
 
32
32
  viewportEl.setAttribute('content','initial-scale=0.8, minimum-scale=0.5, maximum-scale=1.2, user-scalable=yes, width=device-height');
@@ -56,15 +56,15 @@ module("SC.offset", {
56
56
  // Useful for debugging in iOS
57
57
  // /** Allow default touch events */
58
58
  // touchStart: function(touch) {
59
- // if (SC.browser.mobileSafari) touch.allowDefault();
59
+ // if (SC.browser.isMobileSafari) touch.allowDefault();
60
60
  // },
61
61
  //
62
62
  // touchesDragged: function(evt, touches) {
63
- // if (SC.browser.mobileSafari) evt.allowDefault();
63
+ // if (SC.browser.isMobileSafari) evt.allowDefault();
64
64
  // },
65
65
  //
66
66
  // touchEnd: function(touch) {
67
- // if (SC.browser.mobileSafari) touch.allowDefault();
67
+ // if (SC.browser.isMobileSafari) touch.allowDefault();
68
68
  // }
69
69
  });
70
70
  pane.append();
@@ -78,7 +78,7 @@ module("SC.offset", {
78
78
 
79
79
  teardown: function() {
80
80
  // Useful for debugging in iOS
81
- // if (!SC.browser.mobileSafari) {
81
+ // if (!SC.browser.isMobileSafari) {
82
82
  pane.remove();
83
83
  pane = view1 = view2 = view3 = view4 = null;
84
84
  // }
@@ -88,7 +88,6 @@ if (SC.platform.supportsCSSTransitions) {
88
88
 
89
89
  // TODO: Test this better
90
90
  ok(data.event, "has event");
91
- equals(data.propertyName, 'left', "propertyName is 'left'");
92
91
  equals(data.view, view, "view is correct");
93
92
  equals(data.isCancelled, false, "animation is not cancelled");
94
93
  });
@@ -119,33 +118,58 @@ if (SC.platform.supportsCSSTransitions) {
119
118
  });
120
119
 
121
120
  // Pretty sure this does the job
122
- test("callbacks should be called for each property", function(){
121
+ test("callbacks should be called only once for a grouped animation", function(){
123
122
  stop(2000);
124
123
  var stopped = true;
125
124
 
126
- expect(2);
127
- var propertyNames = "top left".w();
125
+ expect(1);
128
126
 
129
127
  SC.RunLoop.begin();
130
- // We shouldn't have to use invokeLater, but it's the only way to get this to work!
131
- view.invokeLater('animate', 1, { top: 100, left: 100 }, 0.500, function(data) {
128
+ view.invokeLater('animate', 1, { top: 100, left: 100 }, 0.250, function(data) {
132
129
  if (stopped) {
133
- start();
134
130
  stopped = false;
131
+ // Continue on in a short moment. Before the test times out, but after
132
+ // enough time for a second callback to possibly come in.
133
+ setTimeout(function() {
134
+ start();
135
+ }, 100);
135
136
  }
136
137
 
137
- var hasProperty = false;
138
- if (propertyNames.contains(data.propertyName)) {
139
- propertyNames.removeObject(data.propertyName);
140
- hasProperty = true;
141
- }
138
+ ok(true, 'callback called back');
139
+ });
140
+ SC.RunLoop.end();
141
+ });
142
+
143
+ // This behavior should be up for debate. Does the callback call immediately, or does it wait until the end of
144
+ // the specified animation period? Currently we're calling it immediately.
145
+ test("callback should be called immediately when a property is animated to its current value.", function() {
146
+
147
+ stop(2000);
148
+
149
+ expect(1);
150
+
151
+ SC.RunLoop.begin();
152
+ view.invokeLater('animate', 1, 'top', view.getPath('layout.top'), 0.250, function(){
153
+ ok(true, 'callback called back');
154
+ start();
155
+ });
156
+ SC.RunLoop.end();
157
+ });
158
+
159
+ test("callback should be called when a property is animated with a duration of zero.", function() {
160
+ stop(2000);
161
+
162
+ expect(1);
142
163
 
143
- ok(hasProperty, "has property: "+data.propertyName);
164
+ SC.RunLoop.begin();
165
+ view.invokeLater('animate', 1, 'top', 20, 0, function(){
166
+ ok(true, 'callback called back');
167
+ start();
144
168
  });
145
169
  SC.RunLoop.end();
146
170
  });
147
171
 
148
- test("multiple animations should be able to run simultaneously", function(){
172
+ test("multiple animations should be able to run simultaneously", function() {
149
173
  stop(2000);
150
174
 
151
175
  expect(2);
@@ -180,7 +204,7 @@ if (SC.platform.supportsCSSTransitions) {
180
204
  test("should not cancel callback when value hasn't changed", function() {
181
205
  var callbacks = 0, wasCancelled = NO, check = 0;
182
206
  stop(2000);
183
-
207
+
184
208
  SC.RunLoop.begin();
185
209
  view.invokeLater(function() {
186
210
  // this triggers the initial layoutStyle code
@@ -192,12 +216,12 @@ if (SC.platform.supportsCSSTransitions) {
192
216
  view.displayDidChange();
193
217
  }, 1);
194
218
  SC.RunLoop.end();
195
-
219
+
196
220
  setTimeout(function() {
197
221
  // capture the callbacks value
198
222
  check = callbacks;
199
223
  }, 250);
200
-
224
+
201
225
  setTimeout(function() {
202
226
  start();
203
227
  equals(check, 0, "the callback should not have been cancelled initially");
@@ -206,6 +230,46 @@ if (SC.platform.supportsCSSTransitions) {
206
230
  }, 1000);
207
231
  });
208
232
 
233
+ /**
234
+ There was a bug in animation that once one property was animated, a null
235
+ version of it existed in _activeAnimations, such that when another property
236
+ was animated it would throw an exception iterating through _activeAnimations
237
+ and not expecting a null value.
238
+ */
239
+ test("animating different attributes at different times should not throw an error" , function(){
240
+ // Run test.
241
+ stop(2000);
242
+
243
+ expect(0);
244
+
245
+ // Override and wrap the problematic method to capture the error.
246
+ view.layoutStyleCalculator.transitionDidEnd = function() {
247
+ try {
248
+ SC.View.LayoutStyleCalculator.prototype.transitionDidEnd.apply(this, arguments);
249
+ ok(true);
250
+ } catch (ex) {
251
+ ok(false);
252
+ }
253
+ };
254
+
255
+ SC.RunLoop.begin();
256
+ // We shouldn't have to use invokeLater, but it's the only way to get this to work!
257
+ view.invokeLater(function() {
258
+ view.animate('left', 75, 0.2);
259
+ }, 1);
260
+ SC.RunLoop.end();
261
+
262
+ setTimeout(function() {
263
+ SC.RunLoop.begin();
264
+ view.animate('top', 50, 0.2);
265
+ SC.RunLoop.end();
266
+ }, 400);
267
+
268
+ setTimeout(function() {
269
+ start();
270
+ }, 1000);
271
+ });
272
+
209
273
  test("should handle transform attributes", function(){
210
274
  SC.RunLoop.begin();
211
275
  view.animate('rotateX', 45, { duration: 1 });
@@ -302,8 +366,7 @@ if (SC.platform.supportsCSSTransitions) {
302
366
  stop(2000);
303
367
  var stopped = true;
304
368
 
305
- expect(3);
306
- var propertyNames = "top left scale".w();
369
+ expect(1);
307
370
 
308
371
  SC.RunLoop.begin();
309
372
  // We shouldn't have to use invokeLater, but it's the only way to get this to work!
@@ -313,13 +376,7 @@ if (SC.platform.supportsCSSTransitions) {
313
376
  stopped = false;
314
377
  }
315
378
 
316
- var hasProperty = false;
317
- if (propertyNames.contains(data.propertyName)) {
318
- propertyNames.removeObject(data.propertyName);
319
- hasProperty = true;
320
- }
321
-
322
- ok(hasProperty, "has property: "+data.propertyName);
379
+ ok(true);
323
380
  });
324
381
  SC.RunLoop.end();
325
382
  });
@@ -372,11 +429,14 @@ test("should update layout", function(){
372
429
  });
373
430
 
374
431
  test("should still run callback", function(){
375
- var ranCallback = false;
432
+ stop(2000);
433
+
434
+ expect(1);
376
435
 
377
436
  SC.RunLoop.begin();
378
- view.animate('left', 100, 1, function() { ranCallback = true; });
437
+ view.animate({ top: 200, left: 100 }, 1, function() {
438
+ ok(true, "callback called");
439
+ start();
440
+ });
379
441
  SC.RunLoop.end();
380
-
381
- ok(ranCallback, "should run callback");
382
442
  });
@@ -26,10 +26,11 @@ test("should apply bound class names to the element", function() {
26
26
 
27
27
  test("should add, remove, or change class names if changed after element is created", function() {
28
28
  var view = SC.View.create({
29
- classNameBindings: ['priority', 'isUrgent', 'canIgnore'],
29
+ classNameBindings: ['priority', 'isUrgent', 'isClassified:classified', 'canIgnore'],
30
30
 
31
31
  priority: 'high',
32
32
  isUrgent: true,
33
+ isClassified: true,
33
34
  canIgnore: false
34
35
  });
35
36
 
@@ -37,26 +38,33 @@ test("should add, remove, or change class names if changed after element is crea
37
38
 
38
39
  view.set('priority', 'orange');
39
40
  view.set('isUrgent', false);
41
+ view.set('isClassified', false);
40
42
  view.set('canIgnore', true);
41
43
 
42
44
  ok(view.$().hasClass('orange'), "updates string values");
43
45
  ok(!view.$().hasClass('high'), "removes old string value");
44
46
 
45
- ok(!view.$().hasClass('is-urgent', "removes dasherized class when changed from true to false"));
47
+ ok(!view.$().hasClass('is-urgent'), "removes dasherized class when changed from true to false");
48
+ ok(!view.$().hasClass('classified'), "removes customized class name when changed from true to false");
46
49
  ok(view.$().hasClass('can-ignore'), "adds dasherized class when changed from false to true");
47
50
  });
48
51
 
49
52
  test("should preserve class names applied via classNameBindings when view layer is updated",
50
53
  function(){
51
54
  var view = SC.View.create({
52
- classNameBindings: ['isUrgent'],
55
+ classNameBindings: ['isUrgent', 'isClassified:classified'],
56
+ isClassified: true,
53
57
  isUrgent: false
54
58
  });
55
59
  view.createLayer();
56
- ok(!view.$().hasClass('is-urgent', "removes dasherized class when changed from true to false"));
60
+ ok(!view.$().hasClass('can-ignore'), "does not add false Boolean values as class");
61
+ ok(view.$().hasClass('classified'), "supports customizing class name for Boolean values");
62
+ view.set('isClassified', false);
57
63
  view.set('isUrgent', true);
58
- ok(view.$().hasClass('is-urgent', "adds dasherized class when changed from true to false"));
64
+ ok(view.$().hasClass('is-urgent'), "adds dasherized class when changed from false to true");
65
+ ok(!view.$().hasClass('classified'), "removes customized class name when changed from true to false");
59
66
  view.set('layerNeedsUpdate', YES);
60
67
  view.updateLayer();
61
- ok(view.$().hasClass('is-urgent', "still has class when view display property is updated"));
68
+ ok(view.$().hasClass('is-urgent'), "still has class when view display property is updated");
69
+ ok(!view.$().hasClass('classified'), "still does not have customized class when view display property is updated");
62
70
  });