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
@@ -2149,8 +2149,11 @@ SC.CollectionView = SC.View.extend(SC.CollectionViewDelegate, SC.CollectionConte
2149
2149
  @returns {Boolean} Usually YES.
2150
2150
  */
2151
2151
  mouseDown: function(ev) {
2152
+ var content = this.get('content');
2153
+
2154
+ if (!content) return this.get('isSelectable');
2155
+
2152
2156
  var itemView = this.itemViewForEvent(ev),
2153
- content = this.get('content'),
2154
2157
  contentIndex = itemView ? itemView.get('contentIndex') : -1,
2155
2158
  info, anchor, sel, isSelected, modifierKeyPressed, didSelect = NO,
2156
2159
  allowsMultipleSel = content.get('allowsMultipleSelection');
@@ -4,13 +4,20 @@
4
4
  // Portions ©2008-2011 Apple Inc. All rights reserved.
5
5
  // License: Licensed under MIT license (see license.js)
6
6
  // ==========================================================================
7
-
8
7
  sc_require('views/list') ;
9
8
 
9
+
10
10
  /** @class
11
11
 
12
12
  A grid view renders a collection of items in a grid of rows and columns.
13
13
 
14
+ ## Dropping on an Item
15
+
16
+ When the grid view is configured to accept drags and drops onto its items, it
17
+ will set the isDropTarget property on the target item accordingly. This
18
+ allows you to modify the appearance of the drop target grid item accordingly
19
+ (@see SC.ListItemView#isDropTarget).
20
+
14
21
  @extends SC.ListView
15
22
  @author Charles Jolley
16
23
  @version 1.0
@@ -79,7 +86,7 @@ SC.GridView = SC.ListView.extend(
79
86
  columnWidth = this.get('columnWidth') || 0 ;
80
87
 
81
88
  return (columnWidth <= 0) ? 1 : Math.floor(f.width / columnWidth) ;
82
- }.property('clippingFrame', 'columnWidth').cacheable(),
89
+ }.property('frame', 'columnWidth').cacheable(),
83
90
 
84
91
  /** @private
85
92
  Find the contentIndexes to display in the passed rect. Note that we
@@ -97,7 +104,7 @@ SC.GridView = SC.ListView.extend(
97
104
  /** @private */
98
105
  layoutForContentIndex: function(contentIndex) {
99
106
  var rowHeight = this.get('rowHeight') || 48,
100
- frameWidth = this.get('clippingFrame').width,
107
+ frameWidth = this.get('frame').width,
101
108
  itemsPerRow = this.get('itemsPerRow'),
102
109
  columnWidth = Math.floor(frameWidth/itemsPerRow),
103
110
  row = Math.floor(contentIndex / itemsPerRow),
@@ -144,21 +151,29 @@ SC.GridView = SC.ListView.extend(
144
151
 
145
152
  /** @private */
146
153
  showInsertionPoint: function(itemView, dropOperation) {
147
- if (!itemView) return ;
154
+ if (!itemView) return;
148
155
 
149
156
  // if drop on, then just add a class...
150
- if (dropOperation === SC.DROP_ON) {
151
- if (itemView !== this._dropOnInsertionPoint) {
152
- this.hideInsertionPoint() ;
153
- //itemView.addClassName('drop-target') ;
154
- this._dropOnInsertionPoint = itemView ;
157
+ if (dropOperation & SC.DROP_ON) {
158
+ if (itemView !== this._lastDropOnView) {
159
+ this.hideInsertionPoint();
160
+
161
+ // If the drag is supposed to drop onto an item, notify the item that it
162
+ // is the current target of the drop.
163
+ itemView.set('isDropTarget', YES);
164
+
165
+ // Track the item so that we can clear isDropTarget when the drag changes;
166
+ // versus having to clear it from all items.
167
+ this._lastDropOnView = itemView;
155
168
  }
156
169
 
157
170
  } else {
158
171
 
159
- if (this._dropOnInsertionPoint) {
160
- //this._dropOnInsertionPoint.removeClassName('drop-target') ;
161
- this._dropOnInsertionPoint = null ;
172
+ if (this._lastDropOnView) {
173
+ // If there was an item that was the target of the drop previously, be
174
+ // sure to clear it.
175
+ this._lastDropOnView.set('isDropTarget', NO);
176
+ this._lastDropOnView = null ;
162
177
  }
163
178
 
164
179
  if (!this._insertionPointView) {
@@ -184,15 +199,18 @@ SC.GridView = SC.ListView.extend(
184
199
 
185
200
  },
186
201
 
187
- /** @private */
202
+ /** @see SC.CollectionView#hideInsertionPoint */
188
203
  hideInsertionPoint: function() {
189
- var insertionPoint = this._insertionPointView ;
190
- if (insertionPoint) insertionPoint.removeFromParent() ;
191
-
192
- if (this._dropOnInsertionPoint) {
193
- //this._dropOnInsertionPoint.removeClassName('drop-target') ;
194
- this._dropOnInsertionPoint = null ;
204
+ // If there was an item that was the target of the drop previously, be
205
+ // sure to clear it.
206
+ if (this._lastDropOnView) {
207
+ this._lastDropOnView.set('isDropTarget', NO);
208
+ this._lastDropOnView = null;
195
209
  }
210
+
211
+ var view = this._insertionPointView ;
212
+ if (view) view.removeFromParent().destroy();
213
+ this._insertionPointView = null;
196
214
  },
197
215
 
198
216
  /** @private */
@@ -225,21 +243,36 @@ SC.GridView = SC.ListView.extend(
225
243
  },
226
244
 
227
245
  /** @private
228
- If the size of the clipping frame changes, all of the item views
229
- on screen are potentially in the wrong position. Update all of their
230
- layouts if different.
246
+ Since GridView lays out items evenly from left to right, if the width of the
247
+ frame changes, all of the item views on screen are potentially in
248
+ the wrong position.
249
+
250
+ Update all of their layouts if necessary.
231
251
  */
232
- _gv_clippingFrameDidChange: function() {
233
- var nowShowing = this.get('nowShowing'), itemView, idx, len;
234
- this.notifyPropertyChange('itemsPerRow');
235
-
236
- len = nowShowing.get('length');
237
-
238
- // Only loop through the now showing indexes, if the content is sparsely
239
- // loaded we could inadvertently trigger reloading unneeded content.
240
- nowShowing.forEach(function(idx) {
241
- itemView = this.itemViewForContentIndex(idx);
242
- itemView.adjust(this.layoutForContentIndex(idx));
243
- }, this);
244
- }.observes('clippingFrame')
245
- }) ;
252
+ _gv_frameDidChange: function() {
253
+ var frame = this.get('frame'),
254
+ width;
255
+
256
+ // Changes to the width of the frame is the only variable that
257
+ // alters the layout of item views.
258
+ width = frame.width;
259
+ if (this._lastFrameWidth && width !== this._lastFrameWidth) {
260
+ this.notifyPropertyChange('itemsPerRow');
261
+
262
+ var idx,
263
+ itemView,
264
+ nowShowing = this.get('nowShowing');
265
+
266
+ // Only loop through the now showing indexes, if the content is sparsely
267
+ // loaded we could inadvertently trigger reloading unneeded content.
268
+ nowShowing.forEach(function(idx) {
269
+ itemView = this.itemViewForContentIndex(idx);
270
+ itemView.adjust(this.layoutForContentIndex(idx));
271
+ }, this);
272
+ }
273
+
274
+ // Cache the last width in order to check for differences.
275
+ this._lastFrameWidth = width;
276
+ }.observes('frame')
277
+
278
+ });
@@ -47,13 +47,19 @@ sc_require('mixins/collection_row_delegate');
47
47
  Note that row heights and offsets are cached so once they are calculated
48
48
  the list view will be able to display very quickly.
49
49
 
50
- (Can we also have an 'estimate row heights' property that will simply
51
- cheat for very long data sets to make rendering more efficient?)
50
+ ## Dropping on an Item
51
+
52
+ When the list view is configured to accept drags and drops onto its items, it
53
+ will set the isDropTarget property on the target item accordingly. This
54
+ allows you to modify the appearance of the drop target list item accordingly
55
+ (@see SC.ListItemView#isDropTarget).
52
56
 
53
57
  @extends SC.CollectionView
54
58
  @extends SC.CollectionRowDelegate
55
59
  @since SproutCore 1.0
56
60
  */
61
+ // (Can we also have an 'estimate row heights' property that will simply
62
+ // cheat for very long data sets to make rendering more efficient?)
57
63
  SC.ListView = SC.CollectionView.extend(SC.CollectionRowDelegate,
58
64
  /** @scope SC.ListView.prototype */ {
59
65
 
@@ -433,7 +439,7 @@ SC.ListView = SC.CollectionView.extend(SC.CollectionRowDelegate,
433
439
 
434
440
 
435
441
  // ..........................................................
436
- // DRAG AND ROP SUPPORT
442
+ // DRAG AND DROP SUPPORT
437
443
  //
438
444
 
439
445
  /**
@@ -486,13 +492,23 @@ SC.ListView = SC.CollectionView.extend(SC.CollectionRowDelegate,
486
492
  if (SC.none(level)) level = -1;
487
493
 
488
494
  if (dropOperation & SC.DROP_ON) {
489
- this.hideInsertionPoint();
490
- itemView.set('isSelected', YES);
491
- this._lastDropOnView = itemView;
495
+ if (itemView !== this._lastDropOnView) {
496
+ this.hideInsertionPoint();
497
+
498
+ // If the drag is supposed to drop onto an item, notify the item that it
499
+ // is the current target of the drop.
500
+ itemView.set('isDropTarget', YES);
501
+
502
+ // Track the item so that we can clear isDropTarget when the drag changes;
503
+ // versus having to clear it from all items.
504
+ this._lastDropOnView = itemView;
505
+ }
492
506
  } else {
493
507
 
494
508
  if (this._lastDropOnView) {
495
- this._lastDropOnView.set('isSelected', NO);
509
+ // If there was an item that was the target of the drop previously, be
510
+ // sure to clear it.
511
+ this._lastDropOnView.set('isDropTarget', NO);
496
512
  this._lastDropOnView = null;
497
513
  }
498
514
 
@@ -508,12 +524,12 @@ SC.ListView = SC.CollectionView.extend(SC.CollectionRowDelegate,
508
524
  }
509
525
  },
510
526
 
511
- /**
512
- @see SC.CollectionView#hideInsertionPoint
513
- */
527
+ /** @see SC.CollectionView#hideInsertionPoint */
514
528
  hideInsertionPoint: function() {
529
+ // If there was an item that was the target of the drop previously, be
530
+ // sure to clear it.
515
531
  if (this._lastDropOnView) {
516
- this._lastDropOnView.set('isSelected', NO);
532
+ this._lastDropOnView.set('isDropTarget', NO);
517
533
  this._lastDropOnView = null;
518
534
  }
519
535
 
@@ -56,7 +56,7 @@ SC.ListItemView = SC.View.extend(SC.InlineEditable, SC.Control,
56
56
  @default ['disclosureState', 'escapeHTML']
57
57
  @see SC.View#displayProperties
58
58
  */
59
- displayProperties: ['disclosureState', 'escapeHTML'],
59
+ displayProperties: ['disclosureState', 'escapeHTML', 'isDropTarget'],
60
60
 
61
61
 
62
62
  // ..........................................................
@@ -89,7 +89,7 @@ SC.ListItemView = SC.View.extend(SC.InlineEditable, SC.Control,
89
89
 
90
90
  If false, the icon on the list item view will be hidden. Otherwise,
91
91
  space will be left for the icon next to the list item view.
92
-
92
+
93
93
  @type Boolean
94
94
  @default NO
95
95
  */
@@ -100,7 +100,7 @@ SC.ListItemView = SC.View.extend(SC.InlineEditable, SC.Control,
100
100
 
101
101
  If false, the icon on the list item view will be hidden. Otherwise,
102
102
  space will be left for the icon next to the list item view.
103
-
103
+
104
104
  @type Boolean
105
105
  @default NO
106
106
  */
@@ -111,7 +111,7 @@ SC.ListItemView = SC.View.extend(SC.InlineEditable, SC.Control,
111
111
  arrow.
112
112
 
113
113
  If false, the space for the branch arrow will be collapsed.
114
-
114
+
115
115
  @type Boolean
116
116
  @default NO
117
117
  */
@@ -130,18 +130,31 @@ SC.ListItemView = SC.View.extend(SC.InlineEditable, SC.Control,
130
130
  /**
131
131
  The URL or CSS class name to use for the icon. This is only used if
132
132
  contentIconKey is null, or returns null from the delegate.
133
-
133
+
134
134
  @type String
135
135
  @default null
136
136
  */
137
137
  icon: null,
138
138
 
139
+ /**
140
+ Whether this item is the drop target of a drag operation.
141
+
142
+ If the list view supports the SC.DROP_ON operation, it will set this
143
+ property on whichever list item view is the current target of the drop.
144
+
145
+ When true, the 'drop-target' class is added to the element.
146
+
147
+ @type Boolean
148
+ @default false
149
+ */
150
+ isDropTarget: NO,
151
+
139
152
  /**
140
153
  (displayDelegate) Property key to use for the icon url
141
154
 
142
155
  This property will be checked on the content object to determine the
143
156
  icon to display. It must return either a URL or a CSS class name.
144
-
157
+
145
158
  @type String
146
159
  @default NO
147
160
  */
@@ -150,7 +163,7 @@ SC.ListItemView = SC.View.extend(SC.InlineEditable, SC.Control,
150
163
  /**
151
164
  The URL or CSS class name to use for the right icon. This is only used if
152
165
  contentRightIconKey is null, or returns null from the delegate.
153
-
166
+
154
167
  @type String
155
168
  @default null
156
169
  */
@@ -161,7 +174,7 @@ SC.ListItemView = SC.View.extend(SC.InlineEditable, SC.Control,
161
174
 
162
175
  This property will be checked on the content object to determine the
163
176
  icon to display. It must return either a URL or a CSS class name.
164
-
177
+
165
178
  @type String
166
179
  @default null
167
180
  */
@@ -171,7 +184,7 @@ SC.ListItemView = SC.View.extend(SC.InlineEditable, SC.Control,
171
184
  (displayDelegate) The name of the property used for label itself
172
185
 
173
186
  If null, then the content object itself will be used..
174
-
187
+
175
188
  @type String
176
189
  @default null
177
190
  */
@@ -182,7 +195,7 @@ SC.ListItemView = SC.View.extend(SC.InlineEditable, SC.Control,
182
195
  You should only disable this option if you are sure you will only
183
196
  display content that is already escaped and you need the added
184
197
  performance gain.
185
-
198
+
186
199
  @type Boolean
187
200
  @default YES
188
201
  */
@@ -194,7 +207,7 @@ SC.ListItemView = SC.View.extend(SC.InlineEditable, SC.Control,
194
207
 
195
208
  The count will only be visible if this property is not null and the
196
209
  returned value is not 0.
197
-
210
+
198
211
  @type String
199
212
  @default null
200
213
  */
@@ -207,17 +220,17 @@ SC.ListItemView = SC.View.extend(SC.InlineEditable, SC.Control,
207
220
 
208
221
  If this is null, then the branch view will be completely hidden.
209
222
  Otherwise space will be allocated for it.
210
-
223
+
211
224
  @type String
212
225
  @default null
213
226
  */
214
227
  contentIsBranchKey: null,
215
-
228
+
216
229
  /**
217
230
  Indent to use when rendering a list item with an outline level > 0. The
218
231
  left edge of the list item will be indented by this amount for each
219
232
  outline level.
220
-
233
+
221
234
  @type Number
222
235
  @default 16
223
236
  */
@@ -225,7 +238,7 @@ SC.ListItemView = SC.View.extend(SC.InlineEditable, SC.Control,
225
238
 
226
239
  /**
227
240
  Outline level for this list item. Usually set by the collection view.
228
-
241
+
229
242
  @type Number
230
243
  @default 0
231
244
  */
@@ -234,11 +247,11 @@ SC.ListItemView = SC.View.extend(SC.InlineEditable, SC.Control,
234
247
  /**
235
248
  Disclosure state for this list item. Usually set by the collection view
236
249
  when the list item is created. Possible values:
237
-
250
+
238
251
  - SC.LEAF_NODE
239
252
  - SC.BRANCH_OPEN
240
253
  - SC.BRANCH_CLOSED
241
-
254
+
242
255
  @type String
243
256
  @default SC.LEAF_NODE
244
257
  */
@@ -272,7 +285,7 @@ SC.ListItemView = SC.View.extend(SC.InlineEditable, SC.Control,
272
285
  /**
273
286
  Determines if content is editable or not. Checkboxes and other related
274
287
  components will render disabled if an item is not editable.
275
-
288
+
276
289
  @field
277
290
  @type Boolean
278
291
  @observes content
@@ -281,13 +294,13 @@ SC.ListItemView = SC.View.extend(SC.InlineEditable, SC.Control,
281
294
  var content = this.get('content');
282
295
  return content && (content.get ? content.get('isEditable')!==NO : NO);
283
296
  }.property('content').cacheable(),
284
-
297
+
285
298
  /**
286
299
  @type Object
287
300
  @default SC.InlineTextFieldDelegate
288
301
  */
289
302
  inlineEditorDelegate: SC.InlineTextFieldDelegate,
290
-
303
+
291
304
  /**
292
305
  Finds and retrieves the element containing the label. This is used
293
306
  for inline editing. The default implementation returns a CoreQuery
@@ -309,7 +322,7 @@ SC.ListItemView = SC.View.extend(SC.InlineEditable, SC.Control,
309
322
  if (!layer) return NO ; // no layer yet -- nothing to do
310
323
 
311
324
  var el = SC.$(evt.target) ;
312
- var ret = NO, classNames ;
325
+ var ret = NO;
313
326
  while(!ret && el.length>0 && (el[0] !== layer)) {
314
327
  if (el.hasClass(className)) ret = YES ;
315
328
  el = el.parent() ;
@@ -585,7 +598,7 @@ SC.ListItemView = SC.View.extend(SC.InlineEditable, SC.Control,
585
598
  /*
586
599
  Edits the label portion of the list item. If scrollIfNeeded is YES, will
587
600
  scroll to the item before editing it.
588
-
601
+
589
602
  @params {Boolean} if the parent scroll view should be scrolled to this item
590
603
  before editing begins
591
604
  @returns {Boolean} YES if successful
@@ -686,7 +699,7 @@ SC.ListItemView = SC.View.extend(SC.InlineEditable, SC.Control,
686
699
  this._oldOpacity = el.css('opacity');
687
700
  el.css('opacity', 0.0) ;
688
701
 
689
- // restore old line height for original item if the old line height
702
+ // restore old line height for original item if the old line height
690
703
  // was saved.
691
704
  if (this._oldLineHeight) el.css({ lineHeight: this._oldLineHeight }) ;
692
705
  }.enhance(),
@@ -736,6 +749,7 @@ SC.ListItemView = SC.View.extend(SC.InlineEditable, SC.Control,
736
749
  // add alternating row classes
737
750
  classArray.push((this.get('contentIndex')%2 === 0) ? 'even' : 'odd');
738
751
  context.setClass('disabled', !this.get('isEnabled'));
752
+ context.setClass('drop-target', this.get('isDropTarget'));
739
753
 
740
754
  // outline level wrapper
741
755
  working = context.begin("div").addClass("sc-outline");
@@ -764,8 +778,10 @@ SC.ListItemView = SC.View.extend(SC.InlineEditable, SC.Control,
764
778
  key = this.getDelegateProperty('contentIconKey', del) ;
765
779
  value = (key && content) ? (content.get ? content.get(key) : content[key]) : null ;
766
780
 
767
- this.renderIcon(working, value);
768
- classArray.push('has-icon');
781
+ if (value) {
782
+ this.renderIcon(working, value);
783
+ classArray.push('has-icon');
784
+ }
769
785
  } else if (this.get('icon')) {
770
786
  value = this.get('icon');
771
787
  this.renderIcon(working, value);