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
@@ -48,17 +48,23 @@ var DummyArray = SC.Object.extend(SC.Array, {
48
48
 
49
49
  // Update the length property
50
50
  this.set('length', this.content.length) ;
51
+ this.endPropertyChanges();
51
52
 
53
+ // Both arrayContentDidChange and enumerableContentDidChange will invoke
54
+ // "this.notifyPropertyChange('[]')". To prevent multiple notifications
55
+ // these calls are made as grouped property changes.
56
+ this.beginPropertyChanges();
57
+
52
58
  // Call the general-purpose enumerableContentDidChange
53
59
  // Enumerable method.
54
60
  this.enumerableContentDidChange(idx, amt, len - amt) ;
55
- this.endPropertyChanges() ;
56
-
61
+
57
62
  // SC.Array implementations must call arrayContentDidChange
58
63
  // after making mutations. This allows observers to perform
59
64
  // operations based on the mutation. For instance, a listener
60
65
  // might want to reflect additions onto itself.
61
66
  this.arrayContentDidChange(idx, amt, len);
67
+ this.endPropertyChanges();
62
68
  },
63
69
 
64
70
  // SC.Arrays must implement objectAt, which returns an object
@@ -10,15 +10,15 @@
10
10
  var enumerables ; // global variables
11
11
 
12
12
  var DummyEnumerable = SC.Object.extend( SC.Enumerable, {
13
-
13
+
14
14
  content: [],
15
-
15
+
16
16
  length: function() { return this.content.length; }.property(),
17
-
17
+
18
18
  objectAt: function(idx) { return this.content[idx]; },
19
-
19
+
20
20
  nextObject: function(idx) { return this.content[idx]; },
21
-
21
+
22
22
  // add support for reduced properties.
23
23
  unknownProperty: function(key, value) {
24
24
  var ret = this.reducedProperty(key, value) ;
@@ -28,12 +28,18 @@ var DummyEnumerable = SC.Object.extend( SC.Enumerable, {
28
28
  }
29
29
  return ret ;
30
30
  },
31
-
31
+
32
+ shiftObject: function() {
33
+ var ret = this.content.shift();
34
+ this.enumerableContentDidChange(0, 1);
35
+ return ret;
36
+ },
37
+
32
38
  pushObject: function(object) {
33
39
  this.content.push(object) ;
34
- this.enumerableContentDidChange() ;
40
+ this.enumerableContentDidChange(this.content.length - 2, 1);
35
41
  }
36
-
42
+
37
43
  });
38
44
 
39
45
  var runFunc = function(a,b) { return ['DONE', a, b]; } ;
@@ -43,48 +49,48 @@ var reduceTestFunc = function(prev, item, idx, e, pname) { return pname||'TEST';
43
49
 
44
50
  var CommonArray = [
45
51
  {
46
- first: "Charles",
47
- gender: "male",
48
- californian: NO,
49
- ready: YES,
50
- visited: "Prague",
51
- doneTravelling: NO,
52
+ first: "Charles",
53
+ gender: "male",
54
+ californian: NO,
55
+ ready: YES,
56
+ visited: "Prague",
57
+ doneTravelling: NO,
52
58
  run: runFunc,
53
59
  invokeWhileTest: invokeWhileOK,
54
60
  balance: 1
55
61
  },
56
-
62
+
57
63
  {
58
- first: "Jenna",
59
- gender: "female",
60
- californian: YES,
61
- ready: YES,
62
- visited: "Prague",
63
- doneTravelling: NO,
64
+ first: "Jenna",
65
+ gender: "female",
66
+ californian: YES,
67
+ ready: YES,
68
+ visited: "Prague",
69
+ doneTravelling: NO,
64
70
  run: runFunc,
65
71
  invokeWhileTest: invokeWhileOK,
66
- balance: 2
72
+ balance: 2
67
73
  },
68
-
74
+
69
75
  {
70
- first: "Peter",
71
- gender: "male",
72
- californian: NO,
73
- ready: YES,
74
- visited: "Prague",
75
- doneTravelling: NO,
76
+ first: "Peter",
77
+ gender: "male",
78
+ californian: NO,
79
+ ready: YES,
80
+ visited: "Prague",
81
+ doneTravelling: NO,
76
82
  run: runFunc,
77
83
  invokeWhileTest: invokeWhileNotOK,
78
- balance: 3
84
+ balance: 3
79
85
  },
80
-
86
+
81
87
  {
82
- first: "Chris",
83
- gender: "male",
84
- californian: NO,
85
- ready: YES,
86
- visited: "Prague",
87
- doneTravelling: NO,
88
+ first: "Chris",
89
+ gender: "male",
90
+ californian: NO,
91
+ ready: YES,
92
+ visited: "Prague",
93
+ doneTravelling: NO,
88
94
  run: runFunc,
89
95
  invokeWhileTest: invokeWhileOK,
90
96
  balance: 4
@@ -92,17 +98,17 @@ var CommonArray = [
92
98
  ];
93
99
 
94
100
  module("Real Array & DummyEnumerable", {
95
-
96
- setup: function() {
97
- enumerables = [SC.$A(CommonArray), DummyEnumerable.create({ content: CommonArray })] ;
101
+
102
+ setup: function() {
103
+ enumerables = [SC.$A(CommonArray), DummyEnumerable.create({ content: SC.clone(CommonArray) })] ;
98
104
  },
99
-
105
+
100
106
  teardown: function() {
101
107
  delete enumerables;
102
108
  delete Array.prototype["@max(balance)"] ; // remove cached value
103
109
  delete Array.prototype["@min(balance)"] ;
104
110
  }
105
-
111
+
106
112
  });
107
113
 
108
114
  test("should get enumerator that iterates through objects", function() {
@@ -111,14 +117,14 @@ test("should get enumerator that iterates through objects", function() {
111
117
  src = ary2[idx2] ;
112
118
  var e = src.enumerator() ;
113
119
  ok(e !== null, 'enumerator must not be null');
114
-
120
+
115
121
  var idx = 0;
116
122
  var cur ;
117
123
  while(cur = e.nextObject()) {
118
124
  equals(src.objectAt(idx), cur, "object at index %@".fmt(idx)) ;
119
125
  idx++;
120
126
  }
121
-
127
+
122
128
  equals(src.get('length'), idx) ;
123
129
  }
124
130
  });
@@ -129,7 +135,7 @@ test("should return firstObject for item with content", function() {
129
135
  src = ary2[idx2] ;
130
136
  equals(src.firstObject(), CommonArray[0], 'firstObject should return first object');
131
137
  }
132
-
138
+
133
139
  equals([].firstObject(), undefined, 'firstObject() on empty enumerable should return undefined');
134
140
  });
135
141
 
@@ -138,20 +144,20 @@ test("should run forEach() to go through objects", function() {
138
144
  for (var idx2=0, len2=ary2.length; idx2<len2; idx2++) {
139
145
  src = ary2[idx2] ;
140
146
  var idx = 0;
141
-
147
+
142
148
  // save for testing later
143
149
  var items = [] ;
144
150
  var indexes = [] ;
145
151
  var arrays = [] ;
146
152
  var targets = [] ;
147
-
153
+
148
154
  src.forEach(function(item, index, array) {
149
155
  items.push(item);
150
156
  indexes.push(index);
151
157
  arrays.push(array);
152
158
  targets.push(this);
153
159
  }, this);
154
-
160
+
155
161
  var len = src.get('length') ;
156
162
  for(idx=0;idx<len;idx++) {
157
163
  equals(items[idx], src.objectAt(idx)) ;
@@ -170,29 +176,29 @@ test("should map to values while passing proper params", function() {
170
176
  for (var idx2=0, len2=ary2.length; idx2<len2; idx2++) {
171
177
  src = ary2[idx2] ;
172
178
  var idx = 0;
173
-
179
+
174
180
  // save for testing later
175
181
  var items = [] ;
176
182
  var indexes = [] ;
177
183
  var arrays = [] ;
178
184
  var targets = [] ;
179
-
185
+
180
186
  var mapped = src.map(function(item, index, array) {
181
187
  items.push(item);
182
188
  indexes.push(index);
183
189
  arrays.push(array);
184
190
  targets.push(this);
185
-
191
+
186
192
  return index ;
187
193
  }, this);
188
-
194
+
189
195
  var len = src.get('length') ;
190
196
  for(idx=0;idx<len;idx++) {
191
197
  equals(src.objectAt(idx), items[idx], "items") ;
192
198
  equals(idx, indexes[idx], "indexes") ;
193
199
  equals(src, arrays[idx], 'arrays') ;
194
200
  equals(SC.guidFor(this), SC.guidFor(targets[idx]), "this") ;
195
-
201
+
196
202
  equals(idx, mapped[idx], "mapped") ;
197
203
  }
198
204
  }
@@ -203,22 +209,22 @@ test("should filter to items that return for callback", function() {
203
209
  for (var idx2=0, len2=ary2.length; idx2<len2; idx2++) {
204
210
  src = ary2[idx2] ;
205
211
  var idx = 0;
206
-
212
+
207
213
  // save for testing later
208
214
  var items = [] ;
209
215
  var indexes = [] ;
210
216
  var arrays = [] ;
211
217
  var targets = [] ;
212
-
218
+
213
219
  var filtered = src.filter(function(item, index, array) {
214
220
  items.push(item);
215
221
  indexes.push(index);
216
222
  arrays.push(array);
217
223
  targets.push(this);
218
-
224
+
219
225
  return item.gender === "female" ;
220
226
  }, this);
221
-
227
+
222
228
  var len = src.get('length') ;
223
229
  for(idx=0;idx<len;idx++) {
224
230
  equals(src.objectAt(idx), items[idx], "items") ;
@@ -226,7 +232,7 @@ test("should filter to items that return for callback", function() {
226
232
  equals(src, arrays[idx], 'arrays') ;
227
233
  equals(SC.guidFor(this), SC.guidFor(targets[idx]), "this") ;
228
234
  }
229
-
235
+
230
236
  equals(filtered.length, 1) ;
231
237
  equals(filtered[0].first, "Jenna") ;
232
238
  }
@@ -237,22 +243,22 @@ test("should return true if function for every() returns true", function() {
237
243
  for (var idx2=0, len2=ary2.length; idx2<len2; idx2++) {
238
244
  src = ary2[idx2] ;
239
245
  var idx = 0 ;
240
-
246
+
241
247
  // save for testing later
242
248
  var items = [] ;
243
249
  var indexes = [] ;
244
250
  var arrays = [] ;
245
251
  var targets = [] ;
246
-
252
+
247
253
  var result = src.every(function(item, index, array) {
248
254
  items.push(item) ;
249
255
  indexes.push(index) ;
250
256
  arrays.push(array) ;
251
257
  targets.push(this) ;
252
-
258
+
253
259
  return true ;
254
260
  }, this);
255
-
261
+
256
262
  var len = src.get('length') ;
257
263
  for(idx=0;idx<len;idx++) {
258
264
  equals(src.objectAt(idx), items[idx], "items") ;
@@ -260,7 +266,7 @@ test("should return true if function for every() returns true", function() {
260
266
  equals(src, arrays[idx], 'arrays') ;
261
267
  equals(SC.guidFor(this), SC.guidFor(targets[idx]), "this") ;
262
268
  }
263
-
269
+
264
270
  equals(result, YES) ;
265
271
  }
266
272
  });
@@ -281,22 +287,22 @@ test("should return false if all functions for some() returns false", function()
281
287
  for (var idx2=0, len2=ary2.length; idx2<len2; idx2++) {
282
288
  src = ary2[idx2] ;
283
289
  var idx = 0 ;
284
-
290
+
285
291
  // save for testing later
286
292
  var items = [] ;
287
293
  var indexes = [] ;
288
294
  var arrays = [] ;
289
295
  var targets = [] ;
290
-
296
+
291
297
  var result = src.some(function(item, index, array) {
292
298
  items.push(item) ;
293
299
  indexes.push(index) ;
294
300
  arrays.push(array) ;
295
301
  targets.push(this) ;
296
-
302
+
297
303
  return false ;
298
304
  }, this);
299
-
305
+
300
306
  var len = src.get('length') ;
301
307
  for(idx=0;idx<len;idx++) {
302
308
  equals(src.objectAt(idx), items[idx], "items") ;
@@ -304,7 +310,7 @@ test("should return false if all functions for some() returns false", function()
304
310
  equals(src, arrays[idx], 'arrays') ;
305
311
  equals(SC.guidFor(this), SC.guidFor(targets[idx]), "this") ;
306
312
  }
307
-
313
+
308
314
  equals(result, NO) ;
309
315
  }
310
316
  });
@@ -486,34 +492,73 @@ test("should invoke custom reducer", function() {
486
492
  }
487
493
  });
488
494
 
495
+ test("should trigger observer on property when lastObject changes", function() {
496
+ var src, ary2 = enumerables;
497
+ for (var idx2=0, len2=ary2.length; idx2<len2; idx2++) {
498
+ src = ary2[idx2];
499
+
500
+ var callCount = 0;
501
+ src.addObserver("lastObject", function() {
502
+ callCount++;
503
+ });
504
+
505
+ src.pushObject({
506
+ first: "John",
507
+ gender: "male",
508
+ californian: NO,
509
+ ready: YES,
510
+ visited: "Paris",
511
+ balance: 5
512
+ });
513
+
514
+ equals(callCount, 1, "callCount");
515
+ }
516
+ });
517
+
518
+ test("should trigger observer on property when firstObject changes", function() {
519
+ var src, ary2 = enumerables;
520
+ for (var idx2=0, len2=ary2.length; idx2<len2; idx2++) {
521
+ src = ary2[idx2] ;
522
+
523
+ var callCount = 0;
524
+ src.addObserver("firstObject", function() {
525
+ callCount++;
526
+ });
527
+
528
+ src.shiftObject();
529
+
530
+ equals(callCount, 1, "callCount");
531
+ }
532
+ });
533
+
489
534
  test("should trigger observer of reduced prop when array changes once property retrieved once", function() {
490
535
  var src, ary2 = enumerables ;
491
536
  for (var idx2=0, len2=ary2.length; idx2<len2; idx2++) {
492
537
  src = ary2[idx2] ;
493
538
  // get the property...this will install the reducer property...
494
539
  src.get("@max(balance)") ;
495
-
540
+
496
541
  // install observer
497
542
  var observedValue = null ;
498
- src.addObserver("@max(balance)", function() {
543
+ src.addObserver("@max(balance)", function() {
499
544
  observedValue = src.get("@max(balance)");
500
545
  }) ;
501
-
546
+
502
547
  //src.addProbe('[]') ;
503
548
  //src.addProbe('@max(balance)');
504
-
549
+
505
550
  // add record to array
506
- src.pushObject({
507
- first: "John",
508
- gender: "male",
509
- californian: NO,
510
- ready: YES,
511
- visited: "Paris",
551
+ src.pushObject({
552
+ first: "John",
553
+ gender: "male",
554
+ californian: NO,
555
+ ready: YES,
556
+ visited: "Paris",
512
557
  balance: 5
513
558
  }) ;
514
-
559
+
515
560
  //SC.NotificationQueue.flush() ; // force observers to trigger
516
-
561
+
517
562
  // observed value should now be set because the reduced property observer
518
563
  // was triggered when we changed the array contents.
519
564
  equals(5, observedValue, "observedValue") ;
@@ -527,22 +572,22 @@ test("should trigger observer of reduced prop when array changes - even if you n
527
572
  src = ary2[idx2] ;
528
573
  // install observer
529
574
  var observedValue = null ;
530
- src.addObserver("@max(balance)", function() {
575
+ src.addObserver("@max(balance)", function() {
531
576
  observedValue = src.get("@max(balance)");
532
577
  }) ;
533
-
578
+
534
579
  // add record to array
535
- src.pushObject({
536
- first: "John",
537
- gender: "male",
538
- californian: NO,
539
- ready: YES,
540
- visited: "Paris",
580
+ src.pushObject({
581
+ first: "John",
582
+ gender: "male",
583
+ californian: NO,
584
+ ready: YES,
585
+ visited: "Paris",
541
586
  balance: 5
542
587
  }) ;
543
-
588
+
544
589
  //SC.NotificationQueue.flush() ; // force observers to trigger
545
-
590
+
546
591
  // observed value should now be set because the reduced property observer
547
592
  // was triggered when we changed the array contents.
548
593
  equals(5, observedValue, "observedValue") ;
@@ -558,14 +603,14 @@ test("should find the first element matching the criteria", function() {
558
603
  var source ; // global variables
559
604
 
560
605
  module("Real Array", {
561
-
562
- setup: function() {
563
- source = SC.$A(CommonArray);
606
+
607
+ setup: function() {
608
+ source = SC.$A(CommonArray);
564
609
  },
565
-
566
- teardown: function() {
567
- delete source ;
568
-
610
+
611
+ teardown: function() {
612
+ delete source ;
613
+
569
614
  delete Array.prototype["@max(balance)"] ; // remove cached value
570
615
  delete Array.prototype["@min(balance)"] ;
571
616
  }
@@ -574,47 +619,47 @@ module("Real Array", {
574
619
 
575
620
  /*
576
621
  This is a particular problem because reduced properties are registered
577
- as dependent keys, which are not automatically configured in native
578
- Arrays (where the SC.Object.init method is not run).
622
+ as dependent keys, which are not automatically configured in native
623
+ Arrays (where the SC.Object.init method is not run).
579
624
 
580
- The fix for this problem was to add an initObservable() method to
625
+ The fix for this problem was to add an initObservable() method to
581
626
  SC.Observable that will configure bindings and dependent keys. This
582
627
  method is called from SC.Object.init() and it is called in
583
628
  SC.Observable._notifyPropertyChanges if it has not been called already.
584
629
 
585
- SC.Enumerable was in turn modified to register reducers as dependent
586
- keys so that now they will be registered on the Array before any
630
+ SC.Enumerable was in turn modified to register reducers as dependent
631
+ keys so that now they will be registered on the Array before any
587
632
  property change notifications are sent.
588
633
  */
589
634
  test("should notify observers even if reduced property is cached on prototype", function() {
590
635
  // make sure reduced property is cached
591
636
  source.get("@max(balance)") ;
592
-
637
+
593
638
  // now make a clone and observe
594
639
  source = SC.$A(CommonArray) ;
595
-
640
+
596
641
  // get the property...this will install the reducer property...
597
642
  source.get("@max(balance)") ;
598
-
643
+
599
644
  // install observer
600
645
  var observedValue = null ;
601
- source.addObserver("@max(balance)", function() {
646
+ source.addObserver("@max(balance)", function() {
602
647
  observedValue = source.get("@max(balance)");
603
648
  }) ;
604
-
649
+
605
650
  //source.addProbe('[]') ;
606
651
  //source.addProbe('@max(balance)');
607
-
652
+
608
653
  // add record to array
609
- source.pushObject({
610
- first: "John",
611
- gender: "male",
612
- californian: NO,
613
- ready: YES,
614
- visited: "Paris",
654
+ source.pushObject({
655
+ first: "John",
656
+ gender: "male",
657
+ californian: NO,
658
+ ready: YES,
659
+ visited: "Paris",
615
660
  balance: 5
616
661
  }) ;
617
-
662
+
618
663
  //SC.NotificationQueue.flush() ; // force observers to trigger
619
664
 
620
665
  // observed value should now be set because the reduced property observer