sproutcore 1.7.1.beta → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (445) hide show
  1. data/CHANGELOG +44 -0
  2. data/README.rdoc +20 -20
  3. data/VERSION.yml +3 -3
  4. data/lib/Buildfile +1 -1
  5. data/lib/buildtasks/build.rake +5 -0
  6. data/lib/buildtasks/manifest.rake +19 -1
  7. data/lib/frameworks/sproutcore/Buildfile +19 -17
  8. data/lib/frameworks/sproutcore/CHANGELOG.md +163 -29
  9. data/lib/frameworks/sproutcore/README.md +29 -8
  10. data/lib/frameworks/sproutcore/apps/statechart_routing/Buildfile +12 -0
  11. data/lib/frameworks/sproutcore/apps/statechart_routing/controllers/login_controller.js +11 -0
  12. data/lib/frameworks/sproutcore/apps/statechart_routing/controllers/main_controller.js +7 -0
  13. data/lib/frameworks/sproutcore/apps/statechart_routing/controllers/statechart_controller.js +17 -0
  14. data/lib/frameworks/sproutcore/apps/statechart_routing/core.js +25 -0
  15. data/lib/frameworks/sproutcore/apps/statechart_routing/main.js +15 -0
  16. data/lib/frameworks/sproutcore/apps/statechart_routing/resources/_theme.css +18 -0
  17. data/lib/frameworks/sproutcore/apps/statechart_routing/resources/bar_page.js +14 -0
  18. data/lib/frameworks/sproutcore/apps/statechart_routing/resources/foo_page.js +14 -0
  19. data/lib/frameworks/sproutcore/apps/statechart_routing/resources/loading.rhtml +9 -0
  20. data/lib/frameworks/sproutcore/apps/statechart_routing/resources/login_page.js +61 -0
  21. data/lib/frameworks/sproutcore/apps/statechart_routing/resources/main_page.js +46 -0
  22. data/lib/frameworks/sproutcore/apps/statechart_routing/statechart.js +76 -0
  23. data/lib/frameworks/sproutcore/apps/statechart_routing/theme.js +27 -0
  24. data/lib/frameworks/sproutcore/apps/tests/controllers/targets.js +1 -1
  25. data/lib/frameworks/sproutcore/apps/tests/states/no_targets.js +1 -1
  26. data/lib/frameworks/sproutcore/apps/tests/states/ready_detail.js +1 -1
  27. data/lib/frameworks/sproutcore/apps/tests/states/ready_empty.js +1 -1
  28. data/lib/frameworks/sproutcore/apps/tests/states/ready_list.js +1 -1
  29. data/lib/frameworks/sproutcore/apps/tests/states/ready_no_tests.js +1 -1
  30. data/lib/frameworks/sproutcore/apps/welcome/controllers/targets.js +1 -1
  31. data/lib/frameworks/sproutcore/frameworks/ajax/system/request.js +14 -1
  32. data/lib/frameworks/sproutcore/frameworks/ajax/system/response.js +15 -15
  33. data/lib/frameworks/sproutcore/frameworks/ajax/tests/system/request.js +1 -1
  34. data/lib/frameworks/sproutcore/frameworks/animation/core.js +8 -5
  35. data/lib/frameworks/sproutcore/frameworks/bootstrap/system/browser.js +302 -70
  36. data/lib/frameworks/sproutcore/frameworks/bootstrap/system/loader.js +19 -14
  37. data/lib/frameworks/sproutcore/frameworks/bootstrap/tests/system/browser.js +471 -149
  38. data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/array.js +3 -3
  39. data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/object.js +42 -0
  40. data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/run_loop.js +3 -2
  41. data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/string.js +7 -0
  42. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/action_support.js +1 -1
  43. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/delegate_support.js +2 -2
  44. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/responder_context.js +3 -3
  45. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/selection_support.js +1 -1
  46. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/body_overflow.js +63 -0
  47. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/keyboard.js +1 -1
  48. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/layout.js +37 -2
  49. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/main.js +28 -6
  50. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/pane.js +10 -3
  51. data/lib/frameworks/sproutcore/frameworks/core_foundation/protocols/sparse_array_delegate.js +2 -2
  52. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/browser.js +66 -2
  53. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/builder.js +1 -1
  54. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/cursor.js +1 -1
  55. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/event.js +58 -57
  56. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/locale.js +1 -1
  57. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/locale.js.orig +445 -0
  58. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/platform.js +51 -31
  59. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/ready.js +5 -1
  60. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/render_context.js +53 -69
  61. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/responder.js +1 -1
  62. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/root_responder.js +98 -72
  63. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/string.js +37 -3
  64. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/timer.js +7 -4
  65. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/array_case.js +21 -0
  66. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/object/content_destroyed.js +7 -7
  67. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/string.js +23 -1
  68. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/browser.js +66 -0
  69. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/event.js +22 -0
  70. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/locale.js +11 -11
  71. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/end.js +4 -4
  72. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/escape_html.js +41 -0
  73. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/helpers_className.js +1 -1
  74. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/helpers_style.js +8 -8
  75. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/update.js +17 -16
  76. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/selection_set/remove.js +1 -1
  77. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/build_children.js +1 -1
  78. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/class_name_bindings_test.js +15 -0
  79. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/createChildViews.js +5 -5
  80. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +50 -30
  81. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/acceleration.js +46 -0
  82. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/animation.js +1 -43
  83. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/keyboard.js +8 -34
  84. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout.js +3 -2
  85. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout_style.js +10 -1
  86. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/manipulation.js +6 -5
  87. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/theming.js +22 -2
  88. data/lib/frameworks/sproutcore/frameworks/datastore/data_sources/data_source.js +2 -2
  89. data/lib/frameworks/sproutcore/frameworks/datastore/mixins/relationship_support.js +1 -1
  90. data/lib/frameworks/sproutcore/frameworks/datastore/models/child_attribute.js +0 -2
  91. data/lib/frameworks/sproutcore/frameworks/datastore/models/children_attribute.js +35 -0
  92. data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +46 -19
  93. data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +23 -9
  94. data/lib/frameworks/sproutcore/frameworks/datastore/models/single_attribute.js +2 -3
  95. data/lib/frameworks/sproutcore/frameworks/datastore/system/many_array.js +1 -1
  96. data/lib/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +2 -2
  97. data/lib/frameworks/sproutcore/frameworks/datastore/system/query.js +294 -302
  98. data/lib/frameworks/sproutcore/frameworks/datastore/system/query.js.orig +1531 -0
  99. data/lib/frameworks/sproutcore/frameworks/datastore/system/record_array.js +4 -2
  100. data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +14 -11
  101. data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/many_array.js +63 -0
  102. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/many_attribute.js +1 -1
  103. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record.js +4 -4
  104. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array.js +50 -10
  105. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array_complex.js +4 -4
  106. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_complex.js +3 -3
  107. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/destroy.js +1 -1
  108. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/refresh.js +1 -1
  109. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +1 -1
  110. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/single_attribute.js +114 -67
  111. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChangesFromNestedStore.js +1 -1
  112. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readDataHash.js +1 -1
  113. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/compare.js +54 -1
  114. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/evaluation.js +29 -9
  115. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/parse.js +1 -1
  116. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/core_methods.js +1 -1
  117. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/flush.js +1 -1
  118. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/cancelRecord.js +1 -1
  119. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitChangesFromNestedStore.js +1 -1
  120. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitRecord.js +37 -45
  121. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/find.js +127 -127
  122. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/pushChanges.js +16 -0
  123. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/pushRelationships.js +42 -4
  124. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/readDataHash.js +1 -1
  125. data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/system/datetime.js +13 -7
  126. data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/tests/system/datetime.js +8 -0
  127. data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/localized/resources/strings.js +2 -1
  128. data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/localized/system/datetime.js +1 -0
  129. data/lib/frameworks/sproutcore/frameworks/debug/core.js +3 -3
  130. data/lib/frameworks/sproutcore/frameworks/desktop/core.js +1 -1
  131. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_row_delegate.js +1 -1
  132. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_view_delegate.js +1 -1
  133. data/lib/frameworks/sproutcore/frameworks/desktop/panes/alert.js +1 -4
  134. data/lib/frameworks/sproutcore/frameworks/desktop/panes/menu.js +19 -6
  135. data/lib/frameworks/sproutcore/frameworks/desktop/panes/modal.js +30 -1
  136. data/lib/frameworks/sproutcore/frameworks/desktop/panes/palette.js +1 -1
  137. data/lib/frameworks/sproutcore/frameworks/desktop/panes/panel.js +24 -1
  138. data/lib/frameworks/sproutcore/frameworks/desktop/panes/picker.js +121 -28
  139. data/lib/frameworks/sproutcore/frameworks/desktop/panes/sheet.js +15 -15
  140. data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drag_data_source.js +1 -1
  141. data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drop_target.js +2 -2
  142. data/lib/frameworks/sproutcore/frameworks/desktop/protocols/responder.js +2 -2
  143. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/button.js +39 -15
  144. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/collection.js +3 -3
  145. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/disclosure.js +2 -2
  146. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/image_button.js +2 -2
  147. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/panel.js +14 -6
  148. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/popup_button.js +3 -3
  149. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/progress.js +11 -11
  150. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segment.js +4 -3
  151. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segmented.js +1 -51
  152. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/slider.js +11 -16
  153. data/lib/frameworks/sproutcore/frameworks/desktop/resources/images/icons/sc-icon-error-48.png +0 -0
  154. data/lib/frameworks/sproutcore/frameworks/desktop/resources/slider.css +0 -2
  155. data/lib/frameworks/sproutcore/frameworks/desktop/system/drag.js +3 -3
  156. data/lib/frameworks/sproutcore/frameworks/desktop/system/undo_manager.js +3 -3
  157. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +9 -9
  158. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/content.js +11 -11
  159. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/ui.js +2 -1
  160. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/reload.js +1 -1
  161. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/date_field/ui.js +107 -81
  162. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowDelegate.js +3 -3
  163. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +68 -60
  164. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/radio/methods.js +57 -12
  165. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/integration.js +21 -19
  166. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroller.js +5 -0
  167. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +2 -2
  168. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select/ui.js +32 -3
  169. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/split/methods.js +12 -0
  170. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/stacked/ui_comments.js +12 -0
  171. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/tab/methods.js +0 -8
  172. data/lib/frameworks/sproutcore/frameworks/desktop/views/button.js +77 -132
  173. data/lib/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +5 -6
  174. data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +16 -15
  175. data/lib/frameworks/sproutcore/frameworks/desktop/views/date_field.js +52 -52
  176. data/lib/frameworks/sproutcore/frameworks/desktop/views/disclosure.js +1 -1
  177. data/lib/frameworks/sproutcore/frameworks/desktop/views/grid.js +1 -1
  178. data/lib/frameworks/sproutcore/frameworks/desktop/views/list.js +147 -147
  179. data/lib/frameworks/sproutcore/frameworks/desktop/views/list_item.js +11 -2
  180. data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +2 -2
  181. data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_scroll.js +5 -5
  182. data/lib/frameworks/sproutcore/frameworks/desktop/views/popup_button.js +22 -12
  183. data/lib/frameworks/sproutcore/frameworks/desktop/views/radio.js +13 -7
  184. data/lib/frameworks/sproutcore/frameworks/desktop/views/scene.js +2 -2
  185. data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll.js +462 -441
  186. data/lib/frameworks/sproutcore/frameworks/desktop/views/scroller.js +48 -62
  187. data/lib/frameworks/sproutcore/frameworks/desktop/views/segment.js +22 -2
  188. data/lib/frameworks/sproutcore/frameworks/desktop/views/segmented.js +150 -32
  189. data/lib/frameworks/sproutcore/frameworks/desktop/views/select.js +104 -45
  190. data/lib/frameworks/sproutcore/frameworks/desktop/views/select_button.js +42 -20
  191. data/lib/frameworks/sproutcore/frameworks/desktop/views/slider.js +24 -24
  192. data/lib/frameworks/sproutcore/frameworks/desktop/views/split.js +148 -154
  193. data/lib/frameworks/sproutcore/frameworks/desktop/views/stacked.js +2 -2
  194. data/lib/frameworks/sproutcore/frameworks/desktop/views/static_content.js +2 -2
  195. data/lib/frameworks/sproutcore/frameworks/desktop/views/tab.js +8 -7
  196. data/lib/frameworks/sproutcore/frameworks/desktop/views/web.js +2 -2
  197. data/lib/frameworks/sproutcore/frameworks/experimental/Buildfile +2 -0
  198. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/files.js +1 -1
  199. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/library.js +1 -1
  200. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/targets.js +1 -1
  201. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/view_configs.js +1 -1
  202. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/mixins/drop_down.js +1 -1
  203. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/states/ready.js +1 -1
  204. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/views/plist_item.js +1 -1
  205. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/views/web.js +1 -1
  206. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/controllers/page_design.js +2 -2
  207. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/css/css_style_sheet.js +2 -2
  208. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/designers/object_designer.js +1 -1
  209. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/designers/view_designer.js +2 -2
  210. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/mixins/snap_lines.js +3 -3
  211. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/views/designer_drop_target.js +1 -1
  212. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/views/drawing.js +21 -21
  213. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/views/page_item_view.js +1 -1
  214. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/views/form.js +59 -53
  215. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/menu/views/menu/scroll.js +2 -2
  216. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/tests/models/polymorphism/simple.js +1 -1
  217. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/core_scroll.js +6 -6
  218. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/desktop/scroll.js +2 -2
  219. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/touch/scroll.js +2 -2
  220. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/ext/menu.js +14 -10
  221. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/ext/menu_item.js +17 -6
  222. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/views/popup_button.js +38 -14
  223. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/views/select.js +5 -13
  224. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/mixins/split_child.js +1 -1
  225. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/mixins/split_thumb.js +5 -3
  226. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/children.js +19 -0
  227. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/methods.js +20 -2
  228. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/split_thumb.js +1 -1
  229. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/views/split.js +35 -12
  230. data/lib/frameworks/sproutcore/frameworks/formatters/README +6 -0
  231. data/lib/frameworks/sproutcore/frameworks/formatters/english.lproj/strings.js +174 -0
  232. data/lib/frameworks/sproutcore/frameworks/formatters/formatters/date_formatter.js +351 -0
  233. data/lib/frameworks/sproutcore/frameworks/formatters/tests/date_formatter.js +517 -0
  234. data/lib/frameworks/sproutcore/frameworks/foundation/core.js +1 -1
  235. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_resize.js +345 -138
  236. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/button.js +5 -3
  237. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/content_value_support.js +176 -42
  238. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/editable.js +1 -1
  239. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/flowed_layout.js +137 -105
  240. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/gestureable.js +2 -2
  241. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editable.js +2 -2
  242. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editor.js +16 -1
  243. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/static_layout.js +1 -1
  244. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/validatable.js +47 -47
  245. data/lib/frameworks/sproutcore/frameworks/foundation/private/tree_item_observer.js +3 -3
  246. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/helpers/sizing.js +1 -1
  247. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/label.js +28 -6
  248. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/render_delegate.js +1 -1
  249. data/lib/frameworks/sproutcore/frameworks/foundation/resources/benchmark.css +0 -5
  250. data/lib/frameworks/sproutcore/frameworks/foundation/resources/bootstrap.rhtml +34 -19
  251. data/lib/frameworks/sproutcore/frameworks/foundation/resources/button_view.css +0 -2
  252. data/lib/frameworks/sproutcore/frameworks/foundation/resources/label.css +1 -5
  253. data/lib/frameworks/sproutcore/frameworks/foundation/resources/text_field.css +8 -9
  254. data/lib/frameworks/sproutcore/frameworks/foundation/system/benchmark.js +2 -2
  255. data/lib/frameworks/sproutcore/frameworks/foundation/system/module.js +179 -47
  256. data/lib/frameworks/sproutcore/frameworks/foundation/system/task_queue.js +34 -1
  257. data/lib/frameworks/sproutcore/frameworks/foundation/system/text_selection.js +1 -1
  258. data/lib/frameworks/sproutcore/frameworks/foundation/system/user_defaults.js +26 -12
  259. data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/misc.js +7 -7
  260. data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/string_measurement.js +12 -4
  261. data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/string_metric_optimization.js +202 -0
  262. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/content_value_support/content.js +77 -8
  263. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/flowed_layout/tests.js +1 -0
  264. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editable/beginEditing.js +2 -2
  265. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editable/commitEditing.js +4 -3
  266. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editable/discardEditing.js +4 -2
  267. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editor/beginEditing.js +2 -2
  268. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editor/commitEditing.js +4 -2
  269. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editor/discardEditing.js +4 -2
  270. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/utils/pointInElement.js +2 -2
  271. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/label/ui.js +0 -8
  272. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +163 -149
  273. data/lib/frameworks/sproutcore/frameworks/foundation/validators/credit_card.js +1 -1
  274. data/lib/frameworks/sproutcore/frameworks/foundation/validators/date.js +1 -1
  275. data/lib/frameworks/sproutcore/frameworks/foundation/validators/date_time.js +1 -1
  276. data/lib/frameworks/sproutcore/frameworks/foundation/validators/password.js +1 -1
  277. data/lib/frameworks/sproutcore/frameworks/foundation/validators/validator.js +3 -3
  278. data/lib/frameworks/sproutcore/frameworks/foundation/views/field.js +16 -43
  279. data/lib/frameworks/sproutcore/frameworks/foundation/views/image.js +4 -3
  280. data/lib/frameworks/sproutcore/frameworks/foundation/views/inline_text_field.js +67 -54
  281. data/lib/frameworks/sproutcore/frameworks/foundation/views/label.js +49 -38
  282. data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +285 -242
  283. data/lib/frameworks/sproutcore/frameworks/jquery/jquery-buffer.js +13 -13
  284. data/lib/frameworks/sproutcore/frameworks/jquery/jquery-buffered.js +19 -22
  285. data/lib/frameworks/sproutcore/frameworks/jquery/jquery-sc.js +9 -3
  286. data/lib/frameworks/sproutcore/frameworks/jquery/jquery.js +231 -186
  287. data/lib/frameworks/sproutcore/frameworks/media/views/audio.js +145 -143
  288. data/lib/frameworks/sproutcore/frameworks/media/views/video.js +156 -154
  289. data/lib/frameworks/sproutcore/frameworks/qunit/qunit/qunit.js +5 -5
  290. data/lib/frameworks/sproutcore/frameworks/routing/system/routes.js +3 -3
  291. data/lib/frameworks/sproutcore/frameworks/routing/system/routes.js.orig +540 -0
  292. data/lib/frameworks/sproutcore/frameworks/routing/tests/system/routes.js +2 -2
  293. data/lib/frameworks/sproutcore/frameworks/runtime/core.js +15 -8
  294. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/base.js +5 -5
  295. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/replace.js +12 -0
  296. data/lib/frameworks/sproutcore/frameworks/runtime/ext/function.js +2 -2
  297. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/array.js +1 -1
  298. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/copyable.js +1 -1
  299. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +7 -7
  300. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +98 -32
  301. data/lib/frameworks/sproutcore/frameworks/runtime/private/chain_observer.js +7 -2
  302. data/lib/frameworks/sproutcore/frameworks/runtime/private/observer_queue.js +14 -3
  303. data/lib/frameworks/sproutcore/frameworks/runtime/private/observer_set.js +98 -13
  304. data/lib/frameworks/sproutcore/frameworks/runtime/system/binding.js +8 -14
  305. data/lib/frameworks/sproutcore/frameworks/runtime/system/enumerator.js +1 -1
  306. data/lib/frameworks/sproutcore/frameworks/runtime/system/error.js +2 -2
  307. data/lib/frameworks/sproutcore/frameworks/runtime/system/index_set.js +23 -6
  308. data/lib/frameworks/sproutcore/frameworks/runtime/system/logger.js +69 -18
  309. data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +57 -31
  310. data/lib/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +189 -14
  311. data/lib/frameworks/sproutcore/frameworks/runtime/system/string.js +82 -22
  312. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/chained.js +20 -0
  313. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/observable.js +125 -4
  314. data/lib/frameworks/sproutcore/frameworks/runtime/tests/private/observer_queue.js +1 -1
  315. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/binding.js +2 -2
  316. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/rangeStartForIndex.js +37 -0
  317. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/remove.js +2 -2
  318. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/logger.js +16 -0
  319. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/run_loop.js +75 -4
  320. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/string.js +41 -0
  321. data/lib/frameworks/sproutcore/frameworks/statechart/mixins/statechart_delegate.js +113 -0
  322. data/lib/frameworks/sproutcore/frameworks/statechart/private/state_path_matcher.js +312 -0
  323. data/lib/frameworks/sproutcore/frameworks/statechart/system/async.js +18 -22
  324. data/lib/frameworks/sproutcore/frameworks/statechart/system/state.js +508 -131
  325. data/lib/frameworks/sproutcore/frameworks/statechart/system/state_route_handler_context.js +78 -0
  326. data/lib/frameworks/sproutcore/frameworks/statechart/system/statechart.js +265 -44
  327. data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/basic/with_concurrent_states.js +16 -0
  328. data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/responder/responder_chain.js +11 -3
  329. data/lib/frameworks/sproutcore/frameworks/statechart/tests/private/state_path_matcher.js +116 -0
  330. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/add_substate.js +108 -0
  331. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/find_first_relative_current_state/with_concurrent.js +179 -0
  332. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/find_first_relative_current_state/without_concurrent.js +74 -0
  333. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/get_state.js +141 -0
  334. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/get_substate.js +340 -0
  335. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/route_triggered.js +161 -0
  336. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/try_to_handle_event.js +288 -0
  337. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/history_state/standard/without_concurrent_states/context.js +5 -33
  338. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/routing/with_concurrent_states/basic.js +213 -0
  339. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/routing/without_concurrent_states/basic.js +212 -0
  340. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/standard/without_concurrent_states/core.js +8 -0
  341. data/lib/frameworks/sproutcore/frameworks/statechart/tests/{state/namespacing.js → statechart/methods/get_state.js} +3 -41
  342. data/lib/frameworks/sproutcore/frameworks/statechart/tests/statechart/{invoke_state_method.js → methods/invoke_state_method.js} +1 -1
  343. data/lib/frameworks/sproutcore/frameworks/statechart/tests/{event_handling/advanced → statechart}/respond_to_event.js +1 -1
  344. data/lib/frameworks/sproutcore/frameworks/statechart/tests/system/state_route_handler_context/methods/retry.js +64 -0
  345. data/lib/frameworks/sproutcore/frameworks/table/core.js +2 -0
  346. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/controls/button.js +0 -1
  347. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/ext/handlebars.js +29 -5
  348. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/ext/handlebars/bind.js +4 -3
  349. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/ext/handlebars/collection.js +0 -0
  350. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/ext/handlebars/localization.js +0 -0
  351. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/ext/handlebars/view.js +0 -0
  352. data/lib/frameworks/sproutcore/frameworks/{handlebars → template_view}/handlebars.js +493 -357
  353. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/mixins/template_helpers/checkbox_support.js +0 -0
  354. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/mixins/template_helpers/text_field_support.js +13 -2
  355. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/panes/template.js +0 -0
  356. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/controls/button.js +0 -0
  357. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/mixins/template_helpers/checkbox_support.js +0 -0
  358. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/mixins/template_helpers/text_field_support.js +0 -0
  359. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/panes/template.js +0 -0
  360. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/views/template/collection.js +39 -14
  361. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/views/template/core.js +0 -0
  362. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/views/template/handlebars.js +57 -6
  363. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/views/bindable_span.js +21 -6
  364. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/views/template.js +9 -3
  365. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/views/template_collection.js +55 -26
  366. data/lib/frameworks/sproutcore/frameworks/testing/system/equiv.js +1 -1
  367. data/lib/frameworks/sproutcore/frameworks/testing/system/plan.js +122 -122
  368. data/lib/frameworks/sproutcore/frameworks/testing/system/runner.js +2 -2
  369. data/lib/frameworks/sproutcore/frameworks/testing/system/suite.js +4 -4
  370. data/lib/frameworks/sproutcore/frameworks/yuireset/resources/base.css +1 -1
  371. data/lib/frameworks/sproutcore/frameworks/yuireset/resources/reset.css +0 -1
  372. data/lib/frameworks/sproutcore/frameworks/yuireset/resources/view.css +4 -4
  373. data/lib/frameworks/sproutcore/lib/index.rhtml +55 -32
  374. data/lib/frameworks/sproutcore/license.js +2 -4
  375. data/lib/frameworks/sproutcore/themes/ace/resources/body.css +5 -1
  376. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/18px/button.css +2 -2
  377. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/button.css +21 -13
  378. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/button.css +17 -10
  379. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/44px/button.css +4 -3
  380. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/button.css +20 -12
  381. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/button.css +16 -8
  382. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/jumbo/button.css +17 -0
  383. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/small/button.css +17 -0
  384. data/lib/frameworks/sproutcore/themes/ace/resources/disclosure/ace/disclosure.css +2 -2
  385. data/lib/frameworks/sproutcore/themes/ace/resources/master-detail/master-detail.css +2 -2
  386. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover.css +5 -3
  387. data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/core.css +1 -1
  388. data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/toolbar.css +1 -1
  389. data/lib/gen/app/USAGE +17 -4
  390. data/lib/gen/language/Buildfile +4 -4
  391. data/lib/gen/language/USAGE +4 -4
  392. data/lib/gen/page/templates/pages/@target_name@/Buildfile +7 -7
  393. data/lib/gen/{html_app → statechart_app}/Buildfile +0 -0
  394. data/lib/gen/{html_app → statechart_app}/README +0 -0
  395. data/lib/gen/statechart_app/USAGE +21 -0
  396. data/lib/gen/statechart_app/templates/apps/@target_name@/Buildfile +9 -0
  397. data/lib/gen/statechart_app/templates/apps/@target_name@/core.js +24 -0
  398. data/lib/gen/statechart_app/templates/apps/@target_name@/main.js +26 -0
  399. data/lib/gen/statechart_app/templates/apps/@target_name@/resources/_theme.css +18 -0
  400. data/lib/gen/statechart_app/templates/apps/@target_name@/resources/loading.rhtml +9 -0
  401. data/lib/gen/statechart_app/templates/apps/@target_name@/resources/main_page.js +21 -0
  402. data/lib/gen/statechart_app/templates/apps/@target_name@/statechart.js +8 -0
  403. data/lib/gen/statechart_app/templates/apps/@target_name@/states/ready_state.js +12 -0
  404. data/lib/gen/statechart_app/templates/apps/@target_name@/theme.js +24 -0
  405. data/lib/sproutcore/builders.rb +1 -0
  406. data/lib/sproutcore/builders/base.rb +19 -1
  407. data/lib/sproutcore/builders/chance_file.rb +6 -1
  408. data/lib/sproutcore/builders/handlebars.rb +1 -9
  409. data/lib/sproutcore/builders/javascript.rb +1 -10
  410. data/lib/sproutcore/builders/json.rb +25 -0
  411. data/lib/sproutcore/builders/less.rb +1 -1
  412. data/lib/sproutcore/builders/sass.rb +1 -1
  413. data/lib/sproutcore/builders/stylesheet.rb +1 -9
  414. data/lib/sproutcore/helpers/html5_manifest.rb +1 -1
  415. data/lib/sproutcore/helpers/static_helper.rb +42 -0
  416. data/lib/sproutcore/rack/proxy.rb +21 -3
  417. data/lib/sproutcore/rack/service.rb +3 -2
  418. data/lib/sproutcore/tools.rb +18 -25
  419. data/lib/sproutcore/tools/gen.rb +10 -3
  420. data/lib/sproutcore/tools/init.rb +11 -10
  421. data/spec/buildtasks/manifest/prepare_build_tasks/json_spec.rb +62 -0
  422. data/spec/fixtures/builder_tests/apps/handlebars_test/Buildfile +1 -1
  423. data/spec/fixtures/builder_tests/apps/json_test/sc_static.json +2 -0
  424. data/spec/lib/builders/json_spec.rb +53 -0
  425. data/sproutcore.gemspec +2 -2
  426. data/vendor/chance/lib/chance/parser.rb +1 -1
  427. metadata +222 -177
  428. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/datetime.js +0 -0
  429. data/lib/frameworks/sproutcore/frameworks/debug/invoke_once_last_debugging.js +0 -259
  430. data/lib/frameworks/sproutcore/frameworks/documentation/core.js +0 -0
  431. data/lib/frameworks/sproutcore/frameworks/foundation/system/chance.js +0 -69
  432. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/editable/ui.js +0 -44
  433. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/ui.js +0 -64
  434. data/lib/frameworks/sproutcore/frameworks/mini/license.js +0 -30
  435. data/lib/gen/html_app/USAGE +0 -15
  436. data/lib/gen/html_app/templates/apps/@target_name@/@target_name@.js +0 -11
  437. data/lib/gen/html_app/templates/apps/@target_name@/resources/images/.gitkeep +0 -0
  438. data/lib/gen/html_app/templates/apps/@target_name@/resources/stylesheets/@target_name@.css +0 -6
  439. data/lib/gen/html_app/templates/apps/@target_name@/resources/templates/@target_name@.handlebars +0 -1
  440. data/lib/gen/html_project/Buildfile +0 -45
  441. data/lib/gen/html_project/INIT +0 -3
  442. data/lib/gen/html_project/README +0 -1
  443. data/lib/gen/html_project/USAGE +0 -2
  444. data/lib/gen/html_project/templates/@filename@/Buildfile +0 -5
  445. data/lib/gen/html_project/templates/@filename@/README +0 -4
@@ -136,47 +136,5 @@ SC.View.reopen(
136
136
  transitionDidEnd: function(evt){
137
137
  // WARNING: Sometimes this will get called more than once for a property. Not sure why.
138
138
  this.get('layoutStyleCalculator').transitionDidEnd(evt);
139
- },
140
-
141
- /**
142
- Setting wantsAcceleratedLayer to YES will use transforms to move the
143
- layer when available. On some platforms transforms are hardware accelerated.
144
- */
145
- wantsAcceleratedLayer: NO,
146
-
147
- /**
148
- Specifies whether transforms can be used to move the layer.
149
- */
150
- hasAcceleratedLayer: function(){
151
- if (this.get('wantsAcceleratedLayer') && SC.platform.supportsAcceleratedLayers) {
152
- var layout = this.get('layout'),
153
- animations = layout.animate,
154
- AUTO = SC.LAYOUT_AUTO,
155
- key;
156
-
157
- if (animations && (animations.top || animations.left)) {
158
- for (key in animations) {
159
- // If we're animating other transforms at different speeds, don't use acceleratedLayer
160
- if (
161
- SC.CSS_TRANSFORM_MAP[key] &&
162
- ((animations.top && animations.top.duration !== animations[key].duration) ||
163
- (animations.left && animations.left.duration !== animations[key].duration))
164
- ) {
165
- return NO;
166
- }
167
- }
168
- }
169
-
170
- // loose comparison used instead of (layout.X === null || layout.X === undefined)
171
- if (
172
- layout.left != null && !SC.isPercentage(layout.left) && layout.left !== AUTO &&
173
- layout.top != null && !SC.isPercentage(layout.top) && layout.top !== AUTO &&
174
- layout.width != null && !SC.isPercentage(layout.width) && layout.width !== AUTO &&
175
- layout.height != null && !SC.isPercentage(layout.height) && layout.height !== AUTO
176
- ) {
177
- return YES;
178
- }
179
- }
180
- return NO;
181
- }.property('wantsAcceleratedLayer').cacheable()
139
+ }
182
140
  });
@@ -50,34 +50,7 @@ SC.View.reopen(
50
50
 
51
51
  @param {SC.Responder} responder
52
52
  */
53
- didBecomeKeyResponderFrom: function(responder) {
54
-
55
- // Hack!!!
56
- // If we try to execute the focus code right now, the iPad will take this as an opportunity to break
57
- // execution of the current Run Loop (if that Run Loop was started by a timer expiring) to execute
58
- // any touch event code that is waiting at this time.
59
- //
60
- // This becomes a problem in particular for ScrollView's that use a timer to pass touches to their content,
61
- // because the touchend event can come in while the timer code is executing and pause here to complete
62
- // the touchend code and then continue the timer code afterward. However, the timer code's
63
- // execution context will then be out-of-date and will cause a crash in RootResponder's assignTouch().
64
- //
65
- // To verify this, use the branch sproutcore/timer_touch_debug in any SproutCore project. Then visit
66
- // the app launcher http://my.local.machine.ip:4020 on an iPad 1 and simply press one of the app's
67
- // in the list. The app should crash on the first touch (depending slightly on the speed at which you
68
- // touch the selection; presses will crash it, taps generally won't). It should occur on the first
69
- // touch or else try reloading the app until you get the proper touch speed figured out.
70
- //
71
- // Using the debug branch, when it crashes, notice how the console statements aren't in order according
72
- // to the timestamps and notice how there is a big gap in timestamps around this.$().focus() where the
73
- // touchend block of code runs.
74
- //
75
- // -Tyler Keating : tyler@sproutcore.com
76
-
77
- this.invokeLater(function() {
78
- this.$().focus();
79
- });
80
- },
53
+ didBecomeKeyResponderFrom: function(responder) {},
81
54
 
82
55
  /**
83
56
  This method will process a key input event, attempting to convert it to
@@ -291,7 +264,6 @@ SC.View.reopen(
291
264
  */
292
265
  nextValidKeyView: function() {
293
266
  var cur = this, next;
294
-
295
267
  while(next !== this) {
296
268
  next = null;
297
269
 
@@ -303,8 +275,10 @@ SC.View.reopen(
303
275
 
304
276
  // if we have no children or siblings, unroll up closest parent that has a
305
277
  // next sibling
306
- if(!next) while(cur = cur.get('parentView')) {
307
- if(next = cur._getNextKeyView()) break;
278
+ if(!next) {
279
+ while(cur = cur.get('parentView')) {
280
+ if(next = cur._getNextKeyView()) break;
281
+ }
308
282
  }
309
283
 
310
284
  // if no parents have a next sibling, start over from the beginning
@@ -314,12 +288,12 @@ SC.View.reopen(
314
288
  }
315
289
 
316
290
  // if it's a valid firstResponder, we're done!
317
- if(next.get('isVisibleInWindow') && next.get('acceptsFirstResponder')) return next;
318
-
291
+ if(next.get('isVisibleInWindow') && next.get('acceptsFirstResponder')) {
292
+ return next;
293
+ }
319
294
  // otherwise keep looking
320
295
  cur = next;
321
296
  }
322
-
323
297
  // this will only happen if no views are visible and accept first responder
324
298
  return null;
325
299
  }.property('nextKeyView'),
@@ -230,7 +230,8 @@ SC.View.reopen(
230
230
  ret = (
231
231
  ((layout.width !== undefined) && (layout.height !== undefined)) &&
232
232
  ((layout.width !== SC.LAYOUT_AUTO) && (layout.height !== SC.LAYOUT_AUTO)) &&
233
- ((layout.left !== undefined) && (layout.top !== undefined))
233
+ ((layout.left !== undefined) && (layout.top !== undefined)) &&
234
+ ((layout.left !== SC.LAYOUT_AUTO) && (layout.top !== SC.LAYOUT_AUTO))
234
235
  );
235
236
 
236
237
  // The layout may appear fixed, but only if none of the values are percentages
@@ -838,7 +839,7 @@ SC.View.reopen(
838
839
 
839
840
  /**
840
841
  One of two methods that are invoked whenever one of your childViews
841
- layout changes. This method is invoked everytime a child view's layout
842
+ layout changes. This method is invoked every time a child view's layout
842
843
  changes to give you a chance to record the information about the view.
843
844
 
844
845
  Since this method may be called many times during a single run loop, you
@@ -446,7 +446,16 @@ SC.View.LayoutStyleCalculator = SC.Object.extend({
446
446
 
447
447
  ret.zIndex = this.zIndex;
448
448
  ret.opacity = this.opacity;
449
- ret.mozOpacity = this.opacity;
449
+
450
+ // for ie, we will NOT use alpha. It is just a source of pain.
451
+ // a) it will not affect absolutely positioned child elements, and is therefore
452
+ // useless for most SC purposes.
453
+ //
454
+ // b) It completely breaks semitransparent background images (PNGs with opacity)
455
+ //
456
+ // If users want to use alpha, they should do it on their own.
457
+
458
+ // if(!SC.none(this.opacity)) ret.filter = "alpha(opacity=%@)".fmt(this.opacity * 100);
450
459
 
451
460
  ret.backgroundPosition = this.backgroundPosition;
452
461
 
@@ -137,12 +137,13 @@ SC.View.reopen(
137
137
  if(pane && pane.get('isPaneAttached')) {
138
138
  view._notifyDidAppendToDocument();
139
139
  }
140
-
141
- // notify views
142
- if (this.didAddChild) { this.didAddChild(view, beforeView) ; }
143
- if (view.didAddToParent) { view.didAddToParent(this, beforeView) ; }
144
140
  });
145
141
 
142
+ // Even though its layer has not necessarily been created, the child views
143
+ // are added immediately. Hence notify views immediately.
144
+ if (this.didAddChild) { this.didAddChild(view, beforeView) ; }
145
+ if (view.didAddToParent) { view.didAddToParent(this, beforeView) ; }
146
+
146
147
  return this ;
147
148
  },
148
149
 
@@ -280,7 +281,7 @@ SC.View.reopen(
280
281
  },
281
282
 
282
283
  /**
283
- Implement this, and call didFinsihBuildOut when you are done.
284
+ Implement this, and call didFinishBuildOut when you are done.
284
285
  */
285
286
  buildOut: function() {
286
287
  this.buildOutDidFinish();
@@ -246,7 +246,27 @@ SC.View.reopen(
246
246
  SC.Logger.error("Name '%@' will be ignored.", renderDelegate.name);
247
247
  }
248
248
  // @endif
249
- }.enhance()
249
+ }.enhance(),
250
+
251
+
252
+ /**
253
+ Invokes a method on the render delegate, if one is present and it implements
254
+ that method.
255
+
256
+ @param {String} method The name of the method to call.
257
+ @param arg One or more arguments.
258
+ */
259
+ invokeRenderDelegateMethod: function(method, args) {
260
+ var renderDelegate = this.get('renderDelegate');
261
+ if (!renderDelegate) return undefined;
262
+
263
+ if (SC.typeOf(renderDelegate[method]) !== SC.T_FUNCTION) return undefined;
264
+
265
+ args = SC.$A(arguments);
266
+ args.shift();
267
+ args.unshift(this.get('renderDelegateProxy'));
268
+ return renderDelegate[method].apply(renderDelegate, args);
269
+ }
250
270
  });
251
271
 
252
272
  /**
@@ -358,7 +378,7 @@ SC.View._RenderDelegateProxy = {
358
378
  the view's render delegate, if present. You may specify a default value to
359
379
  return if there is no such property or is no render delegate.
360
380
 
361
- The generated property is read+write, so it may be overriden.
381
+ The generated property is read+write, so it may be overridden.
362
382
 
363
383
  @param {String} propertyName The name of the property to get from the render delegate..
364
384
  @param {Value} def The default value to use if the property is not present.
@@ -260,7 +260,7 @@ SC.DataSource = SC.Object.extend( /** @scope SC.DataSource.prototype */ {
260
260
  queries, you can do so by passing a SC.SparseArray instance instead of
261
261
  a regular array of storeKeys and then populate the sparse array on demand.
262
262
 
263
- ### Handling Errors and Cancelations
263
+ ### Handling Errors and Cancellations
264
264
 
265
265
  If you encounter an error while trying to fetch the results for a query
266
266
  you can call SC.Store#dataSourceDidErrorQuery() instead. This will put
@@ -424,7 +424,7 @@ SC.DataSource = SC.Object.extend( /** @scope SC.DataSource.prototype */ {
424
424
  },
425
425
 
426
426
  /**
427
- Called from `commitRecords()` to commit destroted records to the
427
+ Called from `commitRecords()` to commit destroyed records to the
428
428
  store. You can override this method to actually send the destroyed
429
429
  records to your store. The default version will simply call
430
430
  `destroyRecord()` for each storeKey.
@@ -189,7 +189,7 @@ SC.RelationshipSupport = {
189
189
  } else if (SC.instanceOf(proto[key], SC.ManyAttribute)) {
190
190
  dataHash[hashKey] = dataHash[hashKey] || [];
191
191
 
192
- if (dataHash[key].indexOf(relativeID) < 0) {
192
+ if (dataHash[hashKey].indexOf(relativeID) < 0) {
193
193
  dataHash[hashKey].push(relativeID);
194
194
  }
195
195
  }
@@ -84,9 +84,7 @@ SC.ChildAttribute = SC.RecordAttribute.extend(
84
84
  var attrKey = this.get('key') || key, cRef,
85
85
  cacheKey = SC.keyFor('__kid__', SC.guidFor(this));
86
86
  if (value !== undefined) {
87
- // this.orphan(record, cacheKey, value);
88
87
  value = this.fromType(record, key, value) ; // convert to attribute.
89
- // record[cacheKey] = value;
90
88
  } else {
91
89
  value = record.readAttribute(attrKey);
92
90
  if (SC.none(value) && (value = this.get('defaultValue'))) {
@@ -68,7 +68,42 @@ SC.ChildrenAttribute = SC.ChildAttribute.extend(
68
68
  }
69
69
 
70
70
  return ret;
71
+ },
72
+
73
+ /**
74
+ The core handler. Called from the property.
75
+ @param {SC.Record} record the record instance
76
+ @param {String} key the key used to access this attribute on the record
77
+ @param {Object} value the property value if called as a setter
78
+ @returns {Object} property value
79
+ */
80
+ call: function(record, key, value) {
81
+ var attrKey = this.get('key') || key, cRef,
82
+ cacheKey = SC.keyFor('__kid__', SC.guidFor(this));
83
+ if (value !== undefined) {
84
+ value = this.fromType(record, key, value) ; // convert to attribute.
85
+ } else {
86
+ value = record.readAttribute(attrKey);
87
+ if (SC.none(value) && (value = this.get('defaultValue'))) {
88
+ if (typeof value === SC.T_FUNCTION) {
89
+ value = this.defaultValue(record, key, this);
90
+ // write default value so it doesn't have to be executed again
91
+ if (record.attributes()) {
92
+ // Check for an array
93
+ if (value instanceof Array) {
94
+ // Instantiate the construct and replace all of the content.
95
+ value = this.toType(record, key, value).replace(0, value.length, value);
96
+ } else {
97
+ record.writeAttribute(attrKey, value, true);
98
+ }
99
+ }
100
+ }
101
+ } else value = this.toType(record, key, value);
102
+ }
103
+
104
+ return value ;
71
105
  }
106
+
72
107
  });
73
108
 
74
109
 
@@ -336,7 +336,7 @@ SC.Record = SC.Object.extend(
336
336
 
337
337
  /**
338
338
  You can invoke this method anytime you need to make the record as dirty.
339
- This will cause the record to be commited when you `commitChanges()`
339
+ This will cause the record to be committed when you `commitChanges()`
340
340
  on the underlying store.
341
341
 
342
342
  If you use the `writeAttribute()` primitive, this method will be called
@@ -466,23 +466,22 @@ SC.Record = SC.Object.extend(
466
466
  Should not have to be called manually.
467
467
  */
468
468
  propagateToAggregates: function() {
469
- var storeKey = this.get('storeKey'),
469
+ var storeKey = this.get('storeKey'),
470
470
  recordType = SC.Store.recordTypeFor(storeKey),
471
- idx, len, key, val, recs;
472
-
473
- var aggregates = recordType.aggregates;
471
+ aggregates = recordType.__sc_aggregate_keys,
472
+ idx, len, key, prop, val, recs;
474
473
 
475
474
  // if recordType aggregates are not set up yet, make sure to
476
475
  // create the cache first
477
476
  if (!aggregates) {
478
- var dataHash = this.get('store').readDataHash(storeKey);
479
477
  aggregates = [];
480
- for(var k in dataHash) {
481
- if(this[k] && this[k].get && this[k].get('aggregate')===YES) {
482
- aggregates.push(k);
478
+ for (key in this) {
479
+ prop = this[key];
480
+ if (prop && prop.isRecordAttribute && prop.aggregate === YES) {
481
+ aggregates.push(key);
483
482
  }
484
483
  }
485
- recordType.aggregates = aggregates;
484
+ recordType.__sc_aggregate_keys = aggregates;
486
485
  }
487
486
 
488
487
  // now loop through all aggregate properties and mark their related
@@ -505,13 +504,19 @@ SC.Record = SC.Object.extend(
505
504
  @param {SC.Record} record to propagate to
506
505
  */
507
506
  iter = function(rec) {
508
- var childStatus, parentStatus;
507
+ var childStatus, parentStore, parentStoreKey, parentStatus;
509
508
 
510
509
  if (rec) {
511
510
  childStatus = this.get('status');
512
511
  if ((childStatus & dirty) ||
513
512
  (childStatus & readyNew) || (childStatus & destroyed)) {
514
- parentStatus = rec.get('status');
513
+
514
+ // Since the parent can cache 'status', and we might be called before
515
+ // it has been invalidated, we'll read the status directly rather than
516
+ // trusting the cache.
517
+ parentStore = rec.get('store');
518
+ parentStoreKey = rec.get('storeKey');
519
+ parentStatus = parentStore.peekStatus(parentStoreKey);
515
520
  if (parentStatus === readyClean) {
516
521
  // Note: storeDidChangeProperties() won't put it in the
517
522
  // changelog!
@@ -583,6 +588,7 @@ SC.Record = SC.Object.extend(
583
588
  recordId = this.get('id'),
584
589
  store = this.get('store'),
585
590
  storeKey = this.get('storeKey'),
591
+ keysToKeep = {},
586
592
  key, valueForKey, typeClass, recHash, attrValue, normChild, isRecord,
587
593
  isChild, defaultVal, keyForDataHash, attr;
588
594
 
@@ -597,11 +603,17 @@ SC.Record = SC.Object.extend(
597
603
  typeClass = valueForKey.typeClass;
598
604
  if (typeClass) {
599
605
  keyForDataHash = valueForKey.get('key') || key; // handle alt keys
606
+
607
+ // As we go, we'll build up a key —> attribute mapping table that we
608
+ // can use when purging keys from the data hash that are not defined
609
+ // in the schema, below.
610
+ keysToKeep[keyForDataHash] = YES;
611
+
600
612
  isRecord = SC.typeOf(typeClass.call(valueForKey))===SC.T_CLASS;
601
613
  isChild = valueForKey.isNestedRecordTransform;
602
614
  if (!isRecord && !isChild) {
603
615
  attrValue = this.get(key);
604
- if(attrValue!==undefined || (attrValue===null && includeNull)) {
616
+ if(attrValue!==undefined && (attrValue!==null || includeNull)) {
605
617
  attr = this[key];
606
618
  // if record attribute, make sure we transform with the fromType
607
619
  if(SC.instanceOf(attr, SC.RecordAttribute)) {
@@ -609,6 +621,9 @@ SC.Record = SC.Object.extend(
609
621
  }
610
622
  dataHash[keyForDataHash] = attrValue;
611
623
  }
624
+ else if(!includeNull) {
625
+ keysToKeep[keyForDataHash] = NO;
626
+ }
612
627
 
613
628
  } else if (isChild) {
614
629
  attrValue = this.get(key);
@@ -640,6 +655,18 @@ SC.Record = SC.Object.extend(
640
655
  }
641
656
  }
642
657
 
658
+ // Finally, we'll go through the underlying data hash and remove anything
659
+ // for which no appropriate attribute is defined. We can do this using
660
+ // the mapping table we prepared above.
661
+ for (key in dataHash) {
662
+ if (!keysToKeep[key]) {
663
+ // Deleting a key doesn't seem too common unless it's a mistake, so
664
+ // we'll log it in debug mode.
665
+ SC.debug("%@: Deleting key from underlying data hash due to normalization: %@", this, key);
666
+ delete dataHash[key];
667
+ }
668
+ }
669
+
643
670
  return this;
644
671
  },
645
672
 
@@ -691,7 +718,7 @@ SC.Record = SC.Object.extend(
691
718
  Lets you commit this specific record to the store which will trigger
692
719
  the appropriate methods in the data source for you.
693
720
 
694
- @param {Hash} params optional additonal params that will passed down
721
+ @param {Hash} params optional additional params that will passed down
695
722
  to the data source
696
723
  @param {boolean} recordOnly optional param if you want to only commit a single
697
724
  record if it has a parent.
@@ -913,7 +940,7 @@ SC.Record = SC.Object.extend(
913
940
 
914
941
  if (!id && (pk = recordType.prototype.primaryKey)) {
915
942
  id = hash[pk];
916
- // In case there isnt a primary key supplied then we create on
943
+ // In case there is not a primary key supplied then we create on
917
944
  // on the fly
918
945
  sk = id ? store.storeKeyExists(recordType, id) : null;
919
946
  if (sk){
@@ -1336,9 +1363,9 @@ SC.Record.mixin( /** @scope SC.Record */ {
1336
1363
  opts = opts || {};
1337
1364
  var isNested = opts.nested || opts.isNested;
1338
1365
  var attr;
1339
-
1366
+
1340
1367
  this._throwUnlessRecordTypeDefined(recordType, 'toMany');
1341
-
1368
+
1342
1369
  if(isNested){
1343
1370
  attr = SC.ChildrenAttribute.attr(recordType, opts);
1344
1371
  }
@@ -1352,7 +1379,7 @@ SC.Record.mixin( /** @scope SC.Record */ {
1352
1379
  Will return one of the following:
1353
1380
 
1354
1381
  1. `SC.SingleAttribute` that converts the underlying ID to a single
1355
- record. If you modify this property, it will rewrite the underyling
1382
+ record. If you modify this property, it will rewrite the underlying
1356
1383
  ID. It will also modify the inverse of the relationship, if you set it.
1357
1384
  2. `SC.ChildAttribute` that you can edit the contents
1358
1385
  of this relationship.
@@ -1376,7 +1403,7 @@ SC.Record.mixin( /** @scope SC.Record */ {
1376
1403
  }
1377
1404
  return attr;
1378
1405
  },
1379
-
1406
+
1380
1407
  _throwUnlessRecordTypeDefined: function(recordType, relationshipType) {
1381
1408
  if (!recordType) {
1382
1409
  throw "Attempted to create " + relationshipType + " attribute with " +