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
@@ -71,11 +71,22 @@ SC.Observers = {
71
71
  tuple[0].removeObserver(tuple[1], target, method) ;
72
72
  }
73
73
 
74
- idx = this.queue.length; queue = this.queue ;
74
+ // tests show that the fastest way is to create a new array. On Safari,
75
+ // it is fastest to set to null then loop over again to collapse, but for all other browsers
76
+ // it is not. Plus, this code shouldn't get hit very often anyway (it may not ever get hit
77
+ // for some apps).
78
+ idx = this.queue.length; queue = this.queue, newQueue = undefined;
75
79
  while(--idx >= 0) {
76
- item = queue[idx] ;
77
- if ((item[0] === propertyPath) && (item[1] === target) && (item[2] == method) && (item[3] === pathRoot)) queue[idx] = null ;
80
+ item = queue[idx];
81
+
82
+ if (item[0] !== propertyPath || item[1] !== target || item[2] !== method || item[3] !== pathRoot) {
83
+ if (!newQueue) newQueue = [];
84
+ newQueue.push(item);
85
+ }
78
86
  }
87
+
88
+ // even though performance probably won't be a problem, we are defensive about memory alloc.
89
+ this.queue = newQueue || this.queue;
79
90
  },
80
91
 
81
92
  /**
@@ -12,7 +12,7 @@
12
12
  /**
13
13
  @namespace
14
14
 
15
- This private class is used to store information about obversers on a
15
+ This private class is used to store information about observers on a
16
16
  particular key. Note that this object is not observable. You create new
17
17
  instances by calling SC.beget(SC.ObserverSet) ;
18
18
 
@@ -24,23 +24,54 @@ SC.ObserverSet = {
24
24
  /**
25
25
  Adds the named target/method observer to the set. The method must be
26
26
  a function, not a string.
27
-
28
- Note that in debugging mode only, this method is overridden to also record
29
- the name of the object and function that resulted in the target/method
30
- being added.
31
27
  */
32
28
  add: function(target, method, context) {
33
- var targetGuid = SC.guidFor(target), methodGuid = SC.guidFor(method);
34
- var targets = this._members, members = this.members;
29
+ var targetGuid = SC.guidFor(target),
30
+ methodGuid = SC.guidFor(method),
31
+ targets = this._members,
32
+ members = this.members,
33
+ indexes = targets[targetGuid], // get the set of methods
34
+ index, member;
35
35
 
36
- // get the set of methods
37
- var indexes = targets[targetGuid];
38
36
  if ( !indexes ) indexes = targets[targetGuid] = {};
39
37
 
40
- if (indexes[methodGuid] === undefined) indexes[methodGuid] = members.length;
41
- else return;
38
+ index = indexes[methodGuid];
39
+ if (index === undefined) {
40
+ indexes[methodGuid] = members.length;
41
+ member = [target, method, context];
42
42
 
43
- members.push([target, method, context]);
43
+ //@if(debug)
44
+ // If deferred call logging info was specified (i.e., in debug mode when
45
+ // such logging is enabled), we need to add it to the enqueued target/
46
+ // method.
47
+ member[3] = arguments[3];
48
+ //@endif
49
+
50
+ members.push(member);
51
+ }
52
+ else {
53
+ //@if(debug)
54
+ // If deferred call logging info was specified (i.e., in debug mode when
55
+ // such logging is enabled), we need to add it to the enqueued target/
56
+ // method.
57
+ var loggingInfo = arguments[3],
58
+ memberLoggingInfo;
59
+
60
+ if (loggingInfo) {
61
+ member = members[index];
62
+ memberLoggingInfo = member[3];
63
+ if (!memberLoggingInfo) {
64
+ member[3] = [loggingInfo];
65
+ }
66
+ else if (!(memberLoggingInfo instanceof Array)) {
67
+ member[3] = [memberLoggingInfo, loggingInfo];
68
+ }
69
+ else {
70
+ memberLoggingInfo.push(loggingInfo);
71
+ }
72
+ }
73
+ //@endif
74
+ }
44
75
  },
45
76
 
46
77
  /**
@@ -77,11 +108,60 @@ SC.ObserverSet = {
77
108
  invokeMethods: function() {
78
109
  var members = this.members, member;
79
110
 
111
+ //@if(debug)
112
+ var shouldLog = SC.LOG_DEFERRED_CALLS,
113
+ target, method, methodName, loggingInfo, loggingInfos,
114
+ originatingTarget, originatingMethod, originatingMethodName,
115
+ originatingStack, j, jLen;
116
+ //@endif
117
+
80
118
  for( var i=0, l=members.length; i<l; i++ ) {
81
119
  member = members[i];
82
120
 
83
121
  // method.call(target);
84
122
  member[1].call(member[0]);
123
+
124
+ //@if(debug)
125
+ // If we have logging info specified for who scheduled the particular
126
+ // invocation, and logging is enabled, then output it.
127
+ if (shouldLog) {
128
+ target = member[0];
129
+ method = member[1];
130
+ methodName = method.displayName || method;
131
+ loggingInfo = member[3];
132
+ if (loggingInfo) {
133
+ // If the logging info is not an array, that means only one place
134
+ // scheduled the invocation.
135
+ if (!(loggingInfo instanceof Array)) {
136
+ // We'll treat single-scheduler cases specially to make the output
137
+ // better for the user, even if it means some essentially-duplicated
138
+ // code.
139
+ originatingTarget = loggingInfo.originatingTarget;
140
+ originatingMethod = loggingInfo.originatingMethod;
141
+ originatingStack = loggingInfo.originatingStack;
142
+ originatingMethodName = (originatingMethod ? originatingMethod.displayName : "(unknown)") || originatingMethod;
143
+ SC.Logger.log("Invoking runloop-scheduled method %@ on %@. Originated by target %@, method %@, stack: ".fmt(methodName, target, originatingTarget, originatingMethodName), originatingStack);
144
+ }
145
+ else {
146
+ SC.Logger.log("Invoking runloop-scheduled method %@ on %@, which was scheduled by multiple target/method pairs:".fmt(methodName, target));
147
+ loggingInfos = loggingInfo;
148
+ for (j = 0, jLen = loggingInfos.length; j < jLen; ++j) {
149
+ loggingInfo = loggingInfos[j];
150
+ originatingTarget = loggingInfo.originatingTarget;
151
+ originatingMethod = loggingInfo.originatingMethod;
152
+ originatingStack = loggingInfo.originatingStack;
153
+ originatingMethodName = (originatingMethod ? originatingMethod.displayName : "(unknown)") || originatingMethod;
154
+ SC.Logger.log(" [%@] originated by target %@, method %@, stack:".fmt(j, originatingTarget, originatingMethodName), originatingStack);
155
+ }
156
+ }
157
+ }
158
+ else {
159
+ // If we didn't capture information for this invocation, just report
160
+ // what we can.
161
+ SC.Logger.log("Invoking runloop-scheduled method %@ on %@, but we didn’t capture information about who scheduled it…".fmt(methodName, target));
162
+ }
163
+ }
164
+ //@endif
85
165
  }
86
166
  },
87
167
 
@@ -97,6 +177,9 @@ SC.ObserverSet = {
97
177
  for( var i=0, l=memberArray.length; i<l; i++ ) {
98
178
  newMembers[i] = SC.clone(memberArray[i]);
99
179
  newMembers[i].length = 3;
180
+ //@if(debug)
181
+ newMembers[i].length = 4;
182
+ //@endif
100
183
  }
101
184
 
102
185
  return newSet;
@@ -119,6 +202,8 @@ SC.ObserverSet = {
119
202
  }
120
203
 
121
204
  } ;
205
+
122
206
  SC.ObserverSet.constructor.prototype = SC.ObserverSet;
123
- SC.ObserverSet.slice = SC.ObserverSet.clone ;
207
+ SC.ObserverSet.slice = SC.ObserverSet.clone;
208
+ SC.ObserverSet.copy = SC.ObserverSet.clone;
124
209
 
@@ -18,7 +18,7 @@ sc_require('system/object');
18
18
  SC.LOG_BINDINGS = NO ;
19
19
 
20
20
  /**
21
- Performance paramter. This will benchmark the time spent firing each
21
+ Performance parameter. This will benchmark the time spent firing each
22
22
  binding.
23
23
 
24
24
  @property {Boolean}
@@ -285,7 +285,7 @@ SC.Binding = /** @scope SC.Binding.prototype */{
285
285
  until you connect the binding.
286
286
 
287
287
  The binding will search for the property path starting at the root level
288
- unless you specify an alternate root object as the second paramter to this
288
+ unless you specify an alternate root object as the second parameter to this
289
289
  method. Alternatively, you can begin your property path with either "." or
290
290
  "*", which will use the root object of the to side be default. This special
291
291
  behavior is used to support the high-level API provided by SC.Object.
@@ -488,12 +488,9 @@ SC.Binding = /** @scope SC.Binding.prototype */{
488
488
  },
489
489
 
490
490
  _scheduleSync: function() {
491
- if (SC.RunLoop.isRunLoopInProgress() || this._syncScheduled) { return; }
492
-
493
- this._syncScheduled = YES;
494
- var self = this;
495
-
496
- setTimeout(function() { SC.run(); self._syncScheduled = NO; }, 1);
491
+ if (SC.RunLoop.isRunLoopInProgress() || SC.Binding._syncScheduled) { return; }
492
+ SC.Binding._syncScheduled = YES;
493
+ setTimeout(function() { SC.run(); SC.Binding._syncScheduled = NO; }, 1);
497
494
  },
498
495
 
499
496
  /** @private
@@ -650,17 +647,14 @@ SC.Binding = /** @scope SC.Binding.prototype */{
650
647
  key = this._fromPropertyKey ;
651
648
  if (!target || !key) return this ; // nothing to do
652
649
 
653
- // in debug, let's check for whether target is a valid observable with getPath.
650
+ // Let's check for whether target is a valid observable with getPath.
654
651
  // Common cases might have it be a Window or a DOM object.
655
652
  //
656
653
  // If we have a target, it is ready, but if it is invalid, that is WRONG.
657
- //
658
- // @if (debug)
659
654
  if (!target.isObservable) {
660
655
  SC.Logger.warn("Cannot bind '%@' to property '%@' on non-observable '%@'".fmt(this._toPropertyPath, key, target));
661
656
  return this;
662
657
  }
663
- // @endif
664
658
 
665
659
  // get the new value
666
660
  var v = target.getPath(key) ;
@@ -855,7 +849,7 @@ SC.Binding = /** @scope SC.Binding.prototype */{
855
849
  notEmpty: function(fromPath, placeholder) {
856
850
  if (placeholder === undefined) placeholder = SC.EMPTY_PLACEHOLDER ;
857
851
  return this.from(fromPath).transform(function(value, isForward) {
858
- if (SC.none(value) || (value === '') || (SC.isArray(value) && value.length === 0)) {
852
+ if (SC.none(value) || (value === '') || (SC.isArray(value) && (value.get ? value.get('length') : value.length)=== 0)) {
859
853
  value = placeholder ;
860
854
  }
861
855
  return value ;
@@ -864,7 +858,7 @@ SC.Binding = /** @scope SC.Binding.prototype */{
864
858
 
865
859
  /**
866
860
  Adds a transform that will return the placeholder value if the value is
867
- null or undefined. Otherwise it will passthrough untouched. See also notEmpty().
861
+ null or undefined. Otherwise it will pass through untouched. See also notEmpty().
868
862
 
869
863
  @param {String} fromPath from path or null
870
864
  @param {Object} [placeholder]
@@ -10,7 +10,7 @@
10
10
 
11
11
  An object that iterates over all of the values in an object.
12
12
 
13
- An instance of this object is returned everytime you call the
13
+ An instance of this object is returned every time you call the
14
14
  enumerator() method on an object that implements the SC.Enumerable mixin.
15
15
 
16
16
  Once you create an enumerator instance, you can call nextObject() on it
@@ -67,8 +67,8 @@ SC.Error = SC.Object.extend(
67
67
 
68
68
  /**
69
69
  The original error object. Normally this will return the receiver.
70
- However, sometimes another object will masquarade as an error; this gives
71
- you a way to get at the underyling error.
70
+ However, sometimes another object will masquerade as an error; this gives
71
+ you a way to get at the underlying error.
72
72
 
73
73
  @type SC.Error
74
74
  */
@@ -15,7 +15,7 @@ sc_require('mixins/copyable');
15
15
 
16
16
  A collection of ranges. You can use an IndexSet to keep track of non-
17
17
  continuous ranges of items in a parent array. IndexSet's are used for
18
- selection, for managing invalidation ranges and other data-propogation.
18
+ selection, for managing invalidation ranges and other data-propagation.
19
19
 
20
20
  Examples
21
21
  ---
@@ -69,8 +69,8 @@ SC.IndexSet = SC.mixin({},
69
69
  /**
70
70
  To create a set, pass either a start and index or another IndexSet.
71
71
 
72
- @param {Number} start
73
- @param {Number} length
72
+ @param {Number|SC.IndexSet} start The start of the range or an index set.
73
+ @param {Number} [length] The length of the range (by default set to 1 if start is a Number)
74
74
  @returns {SC.IndexSet}
75
75
  */
76
76
  create: function(start, length) {
@@ -78,6 +78,16 @@ SC.IndexSet = SC.mixin({},
78
78
  ret.initObservable();
79
79
  ret.registerDependentKey('min', '[]');
80
80
 
81
+ // @if (debug)
82
+ // Validate the input to ensure that the parameters
83
+ // match the function definition.
84
+ // This is here because `create` doesn't follow the
85
+ // idiomatic SC convention of passing in an object literal to `create`.
86
+ if (start && !(SC.typeOf(start) === SC.T_NUMBER || start.isIndexSet)) {
87
+ throw "SC.IndexSet does not accept `%@` as a parameter to `create`. Take a look at the function signature for proper usage.".fmt(start);
88
+ }
89
+ // @endif
90
+
81
91
  // optimized method to clone an index set.
82
92
  if (start && start.isIndexSet) {
83
93
  ret._content = this._sc_sliceContent(start._content);
@@ -164,7 +174,14 @@ SC.IndexSet = SC.mixin({},
164
174
  accel = index - (index % SC.IndexSet.HINT_SIZE);
165
175
  ret = content[accel];
166
176
  if (ret<0 || ret>index) ret = accel;
167
- next = Math.abs(content[ret]);
177
+ next = content[ret];
178
+
179
+ // the accelerator pointed to the middle of a range
180
+ if (next === undefined) {
181
+ next = this.rangeStartForIndex(ret);
182
+ } else {
183
+ next = Math.abs(next);
184
+ }
168
185
 
169
186
  // now step forward through ranges until we find one that includes the
170
187
  // index.
@@ -817,7 +834,7 @@ SC.IndexSet = SC.mixin({},
817
834
  },
818
835
 
819
836
  /**
820
- Invoke the callback, passing each occuppied range instead of each
837
+ Invoke the callback, passing each occupied range instead of each
821
838
  index. This can be a more efficient way to iterate in some cases. The
822
839
  callback should have the signature:
823
840
 
@@ -1137,7 +1154,7 @@ SC.IndexSet = SC.mixin({},
1137
1154
 
1138
1155
  /**
1139
1156
  Usually observing notifications from IndexSet are not useful, so
1140
- supress them by default.
1157
+ suppress them by default.
1141
1158
 
1142
1159
  @type Boolean
1143
1160
  */
@@ -149,6 +149,37 @@ SC.Logger = SC.Object.create(
149
149
  // PROPERTIES
150
150
  //
151
151
 
152
+ /**
153
+ An optional prefix that will be prepended to all log messages, but not any
154
+ group titles.
155
+
156
+ @property {String}
157
+ */
158
+ messagePrefix: null,
159
+
160
+
161
+ /**
162
+ An optional prefix that will be prepended to all log messages that are
163
+ output to the browser console, but not those that are recorded. If you
164
+ specify both this and a 'messagePrefix', both will be output, and only the
165
+ 'messagePrefix' will be recorded.
166
+
167
+ @property {String}
168
+ */
169
+ outputMessagePrefix: null,
170
+
171
+
172
+ /**
173
+ An optional prefix that will be prepended to all log messages that are
174
+ recorded, but not those that are output to the browser console. If you
175
+ specify both this and a 'messagePrefix', both will be recorded, and only the
176
+ 'messagePrefix' will be output to the browser console.
177
+
178
+ @property {String}
179
+ */
180
+ recordedMessagePrefix: null,
181
+
182
+
152
183
  /**
153
184
  The current log level determining what is output to the reporter object
154
185
  (usually your browser’s console). Valid values are:
@@ -169,8 +200,8 @@ SC.Logger = SC.Object.create(
169
200
 
170
201
 
171
202
  /**
172
- The current log level determining what is output to the reporter object
173
- (usually your browser’s console). Valid values are the same as with
203
+ The current log level determining what is recorded to the
204
+ 'recordedLogMessages' buffer. Valid values are the same as with
174
205
  'logOutputLevel':
175
206
 
176
207
  - SC.LOGGER_LEVEL_DEBUG
@@ -181,7 +212,7 @@ SC.Logger = SC.Object.create(
181
212
 
182
213
  If you do not specify this value, it will default to SC.LOGGER_LEVEL_NONE.
183
214
 
184
- @property: {Constant}
215
+ @property {Constant}
185
216
  */
186
217
  logRecordingLevel: SC.LOGGER_LEVEL_NONE,
187
218
 
@@ -350,7 +381,7 @@ SC.Logger = SC.Object.create(
350
381
 
351
382
  /**
352
383
  Begins a new group in the console and/or in the recorded array provided
353
- the respective log levels are set to ouput/record 'debug' messages.
384
+ the respective log levels are set to output/record 'debug' messages.
354
385
  Every message after this call (at any log level) will be indented for
355
386
  readability until a matching {@link SC.Logger.debugGroupEnd} is invoked,
356
387
  and you can create as many levels as you want.
@@ -445,7 +476,7 @@ SC.Logger = SC.Object.create(
445
476
 
446
477
  /**
447
478
  Begins a new group in the console and/or in the recorded array provided
448
- the respective log levels are set to ouput/record 'info' messages.
479
+ the respective log levels are set to output/record 'info' messages.
449
480
  Every message after this call (at any log level) will be indented for
450
481
  readability until a matching {@link SC.Logger.infoGroupEnd} is invoked,
451
482
  and you can create as many levels as you want.
@@ -541,7 +572,7 @@ SC.Logger = SC.Object.create(
541
572
 
542
573
  /**
543
574
  Begins a new group in the console and/or in the recorded array provided
544
- the respective log levels are set to ouput/record 'warn' messages.
575
+ the respective log levels are set to output/record 'warn' messages.
545
576
  Every message after this call (at any log level) will be indented for
546
577
  readability until a matching {@link SC.Logger.warnGroupEnd} is invoked,
547
578
  and you can create as many levels as you want.
@@ -635,7 +666,7 @@ SC.Logger = SC.Object.create(
635
666
 
636
667
  /**
637
668
  Begins a new group in the console and/or in the recorded array provided
638
- the respective log levels are set to ouput/record 'error' messages.
669
+ the respective log levels are set to output/record 'error' messages.
639
670
  Every message after this call (at any log level) will be indented for
640
671
  readability until a matching {@link SC.Logger.errorGroupEnd} is invoked,
641
672
  and you can create as many levels as you want.
@@ -804,7 +835,7 @@ SC.Logger = SC.Object.create(
804
835
  message = entry.message;
805
836
  if (message) {
806
837
  // It's a message entry. Were arguments used, or did we format a
807
- // message? If arguments were used, we need to stringfy those
838
+ // message? If arguments were used, we need to stringify those
808
839
  // instead of using the message.
809
840
  originalArguments = entry.originalArguments;
810
841
  line = prefix + this._indentation(indentation);
@@ -851,8 +882,20 @@ SC.Logger = SC.Object.create(
851
882
  @returns {Boolean} Whether or not anything was logged
852
883
  */
853
884
  log: function() {
854
- var reporter = this.get('reporter'),
855
- ret = NO;
885
+ var reporter = this.get('reporter'),
886
+ message = arguments[0],
887
+ prefix = this.get('messagePrefix'),
888
+ outputPrefix = this.get('outputMessagePrefix'),
889
+ ret = NO;
890
+
891
+ // If the first argument is a string and a prefix was specified, use it.
892
+ if (message && SC.typeOf(message) === SC.T_STRING) {
893
+ if (prefix || outputPrefix) {
894
+ if (prefix) message = prefix + message;
895
+ if (outputPrefix) message = outputPrefix + message;
896
+ arguments[0] = message;
897
+ }
898
+ }
856
899
 
857
900
  // Log through the reporter.
858
901
  if (this.get('exists')) {
@@ -1106,7 +1149,8 @@ SC.Logger = SC.Object.create(
1106
1149
  // Are we configured to show this type?
1107
1150
  var shouldOutput = this._shouldOutputType(type),
1108
1151
  shouldRecord = this._shouldRecordType(type),
1109
- hasOtherArguments, i, len, args, output, entry;
1152
+ hasOtherArguments, i, len, args, output, entry, prefix,
1153
+ outputPrefix, recordedPrefix;
1110
1154
 
1111
1155
  // If we're neither going to output nor record the message, then stop now.
1112
1156
  if (!(shouldOutput || shouldRecord)) return;
@@ -1134,18 +1178,26 @@ SC.Logger = SC.Object.create(
1134
1178
  }
1135
1179
  }
1136
1180
 
1181
+ // If a message prefix was specified, use it.
1182
+ prefix = this.get('messagePrefix');
1183
+ if (prefix) message = prefix + message;
1184
+
1137
1185
  if (shouldOutput) {
1186
+ outputPrefix = this.get('outputMessagePrefix');
1187
+
1138
1188
  // We only want to pass the original arguments to _outputMessage() if we
1139
1189
  // didn't format the message ourselves.
1140
1190
  args = automaticallyFormat ? null : originalArguments;
1141
- this._outputMessage(type, null, this._outputIndentationLevel, message, args);
1191
+ this._outputMessage(type, null, this._outputIndentationLevel, (outputPrefix ? outputPrefix + message : message), args);
1142
1192
  }
1143
1193
 
1144
1194
  // If we're recording the log, append the message now.
1145
1195
  if (shouldRecord) {
1196
+ recordedPrefix = this.get('recordedMessagePrefix');
1197
+
1146
1198
  entry = {
1147
1199
  type: type,
1148
- message: message ? message : YES,
1200
+ message: message ? (recordedPrefix ? recordedPrefix + message : message) : YES,
1149
1201
  timestamp: new Date()
1150
1202
  };
1151
1203
 
@@ -1346,9 +1398,8 @@ SC.Logger = SC.Object.create(
1346
1398
  // If we formatted, just include the message. Otherwise, include all
1347
1399
  // the original arguments.
1348
1400
  if (!originalArguments) {
1349
- output = "";
1350
- if (timestampStr) output = timestampStr;
1351
- if (shouldIndent) output =+ this._indentation(indentation);
1401
+ output = timestampStr ? timestampStr : "";
1402
+ if (shouldIndent) output += this._indentation(indentation);
1352
1403
  output += message;
1353
1404
  reporter[type](output);
1354
1405
  }
@@ -1493,11 +1544,11 @@ SC.Logger = SC.Object.create(
1493
1544
  */
1494
1545
  _argumentsToString: function() {
1495
1546
  var ret = "",
1496
- delimeter = SC.LOGGER_LOG_DELIMITER,
1547
+ delimiter = SC.LOGGER_LOG_DELIMITER,
1497
1548
  i, len;
1498
1549
 
1499
1550
  for (i = 0, len = (arguments.length - 1); i < len; ++i) {
1500
- ret += arguments[i] + delimeter;
1551
+ ret += arguments[i] + delimiter;
1501
1552
  }
1502
1553
  ret += arguments[len];
1503
1554
  return ret;