sproutit-sproutcore 1.0.0.20090416161445 → 1.0.0.20090720093355

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 (754) hide show
  1. data/Buildfile +4 -2
  2. data/frameworks/sproutcore/Buildfile +3 -2
  3. data/frameworks/sproutcore/README +2 -1
  4. data/frameworks/sproutcore/apps/docs/core.js +27 -0
  5. data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/QuickLook/Preview.pdf +0 -0
  6. data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/QuickLook/Thumbnail.tiff +0 -0
  7. data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/data.plist +14378 -0
  8. data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/image10.png +0 -0
  9. data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/image11.png +0 -0
  10. data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/image13.png +0 -0
  11. data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/image14.png +0 -0
  12. data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/image8.png +0 -0
  13. data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/image9.tiff +0 -0
  14. data/frameworks/sproutcore/apps/docs/english.lproj/loading.rhtml +9 -0
  15. data/frameworks/sproutcore/apps/docs/english.lproj/main_page.js +22 -0
  16. data/frameworks/sproutcore/apps/{sc_jsdoc → docs}/english.lproj/strings.js +7 -7
  17. data/frameworks/sproutcore/apps/docs/main.js +30 -0
  18. data/frameworks/sproutcore/apps/tests/controllers/detail.js +16 -0
  19. data/frameworks/sproutcore/apps/tests/controllers/source.js +29 -0
  20. data/frameworks/sproutcore/apps/tests/controllers/target.js +26 -0
  21. data/frameworks/sproutcore/apps/tests/controllers/targets.js +65 -26
  22. data/frameworks/sproutcore/apps/tests/controllers/tests.js +14 -19
  23. data/frameworks/sproutcore/apps/tests/core.js +114 -16
  24. data/frameworks/sproutcore/apps/tests/data_source.js +96 -0
  25. data/frameworks/sproutcore/apps/tests/english.lproj/main_page.css +22 -2
  26. data/frameworks/sproutcore/apps/tests/english.lproj/main_page.js +168 -22
  27. data/frameworks/sproutcore/apps/tests/english.lproj/strings.js +14 -5
  28. data/frameworks/sproutcore/apps/tests/fixtures/target.js +81 -37
  29. data/frameworks/sproutcore/apps/tests/fixtures/test.js +38 -37
  30. data/frameworks/sproutcore/apps/tests/main.js +9 -20
  31. data/frameworks/sproutcore/apps/tests/models/target.js +74 -31
  32. data/frameworks/sproutcore/apps/tests/models/test.js +30 -2
  33. data/frameworks/sproutcore/{frameworks/desktop/mixins/collection_item.js → apps/tests/states/no_targets.js} +16 -12
  34. data/frameworks/sproutcore/apps/tests/states/ready.js +56 -0
  35. data/frameworks/sproutcore/apps/tests/states/ready_detail.js +41 -0
  36. data/frameworks/sproutcore/apps/tests/states/ready_empty.js +48 -0
  37. data/frameworks/sproutcore/apps/tests/states/ready_list.js +41 -0
  38. data/frameworks/sproutcore/apps/tests/states/ready_loading.js +44 -0
  39. data/frameworks/sproutcore/apps/tests/states/ready_no_tests.js +31 -0
  40. data/frameworks/sproutcore/apps/tests/states/start.js +39 -0
  41. data/frameworks/sproutcore/apps/tests/tests/controllers/{test.js → detail.js} +3 -3
  42. data/frameworks/sproutcore/apps/tests/tests/controllers/source.js +15 -0
  43. data/frameworks/sproutcore/apps/tests/tests/controllers/target.js +15 -0
  44. data/frameworks/sproutcore/apps/tests/tests/controllers/targets.js +3 -3
  45. data/frameworks/sproutcore/apps/tests/tests/views/offset_checkbox.js +15 -0
  46. data/frameworks/sproutcore/apps/tests/views/offset_checkbox.js +26 -0
  47. data/frameworks/sproutcore/design/CollectionView State Charts.graffle +4848 -0
  48. data/frameworks/sproutcore/design/Design Charts.graffle +8788 -6375
  49. data/frameworks/sproutcore/design/SproutCore Design Template.graffle/QuickLook/Preview.pdf +0 -0
  50. data/frameworks/sproutcore/design/SproutCore Design Template.graffle/QuickLook/Thumbnail.tiff +0 -0
  51. data/frameworks/sproutcore/design/SproutCore Design Template.graffle/data.plist +1452 -0
  52. data/frameworks/sproutcore/design/SproutCore Design Template.graffle/image8.png +0 -0
  53. data/frameworks/sproutcore/design/TestRunner Design.graffle/QuickLook/Preview.pdf +0 -0
  54. data/frameworks/sproutcore/design/TestRunner Design.graffle/QuickLook/Thumbnail.tiff +0 -0
  55. data/frameworks/sproutcore/design/TestRunner Design.graffle/data.plist +24187 -0
  56. data/frameworks/sproutcore/design/TestRunner Design.graffle/image10.png +0 -0
  57. data/frameworks/sproutcore/design/TestRunner Design.graffle/image11.png +0 -0
  58. data/frameworks/sproutcore/design/TestRunner Design.graffle/image13.png +0 -0
  59. data/frameworks/sproutcore/design/TestRunner Design.graffle/image15.png +0 -0
  60. data/frameworks/sproutcore/design/TestRunner Design.graffle/image16.png +0 -0
  61. data/frameworks/sproutcore/design/TestRunner Design.graffle/image17.png +0 -0
  62. data/frameworks/sproutcore/design/TestRunner Design.graffle/image18.png +0 -0
  63. data/frameworks/sproutcore/design/TestRunner Design.graffle/image19.png +0 -0
  64. data/frameworks/sproutcore/design/TestRunner Design.graffle/image22.tiff +0 -0
  65. data/frameworks/sproutcore/design/TestRunner Design.graffle/image23.png +0 -0
  66. data/frameworks/sproutcore/design/TestRunner Design.graffle/image24.png +0 -0
  67. data/frameworks/sproutcore/design/TestRunner Design.graffle/image25.png +0 -0
  68. data/frameworks/sproutcore/design/TestRunner Design.graffle/image30.png +0 -0
  69. data/frameworks/sproutcore/design/TestRunner Design.graffle/image31.png +0 -0
  70. data/frameworks/sproutcore/design/TestRunner Design.graffle/image8.png +0 -0
  71. data/frameworks/sproutcore/design/TestRunner Design.graffle/image9.png +0 -0
  72. data/frameworks/sproutcore/frameworks/datastore/data_sources/cascade.js +2 -2
  73. data/frameworks/sproutcore/frameworks/datastore/data_sources/data_source.js +66 -49
  74. data/frameworks/sproutcore/frameworks/datastore/data_sources/fixtures.js +146 -31
  75. data/frameworks/sproutcore/frameworks/datastore/data_sources/fixtures_with_queries.js +238 -0
  76. data/frameworks/sproutcore/frameworks/datastore/models/many_attribute.js +27 -11
  77. data/frameworks/sproutcore/frameworks/datastore/models/record.js +163 -32
  78. data/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +67 -5
  79. data/frameworks/sproutcore/frameworks/datastore/system/many_array.js +157 -0
  80. data/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +202 -19
  81. data/frameworks/sproutcore/frameworks/datastore/system/query.js +929 -78
  82. data/frameworks/sproutcore/frameworks/datastore/system/record_array.js +143 -5
  83. data/frameworks/sproutcore/frameworks/datastore/system/store.js +443 -125
  84. data/frameworks/sproutcore/frameworks/datastore/tests/data_sources/fixtures.js +38 -3
  85. data/frameworks/sproutcore/frameworks/datastore/tests/models/many_attribute.js +94 -0
  86. data/frameworks/sproutcore/frameworks/datastore/tests/models/record/core_methods.js +30 -0
  87. data/frameworks/sproutcore/frameworks/datastore/tests/models/record/normalize.js +238 -0
  88. data/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +105 -16
  89. data/frameworks/sproutcore/frameworks/datastore/tests/system/many_array/core_methods.js +178 -0
  90. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/chain.js +1 -1
  91. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChanges.js +9 -8
  92. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChangesFromNestedStore.js +6 -6
  93. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/dataHashDidChange.js +6 -6
  94. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/discardChanges.js +3 -3
  95. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readDataHash.js +7 -7
  96. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readEditableDataHash.js +4 -4
  97. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/removeDataHash.js +7 -7
  98. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/writeDataHash.js +7 -7
  99. data/frameworks/sproutcore/frameworks/datastore/tests/system/query/compare_records.js +126 -0
  100. data/frameworks/sproutcore/frameworks/datastore/tests/system/query/evaluation.js +165 -0
  101. data/frameworks/sproutcore/frameworks/datastore/tests/system/query/evaluation_of_records.js +82 -0
  102. data/frameworks/sproutcore/frameworks/datastore/tests/system/query/find_all.js +362 -0
  103. data/frameworks/sproutcore/frameworks/datastore/tests/system/query/parsing.js +170 -0
  104. data/frameworks/sproutcore/frameworks/datastore/tests/system/query/record_type_is.js +43 -0
  105. data/frameworks/sproutcore/frameworks/datastore/tests/system/query/registered_comparisons.js +60 -0
  106. data/frameworks/sproutcore/frameworks/datastore/tests/system/query/registered_query_extensions.js +67 -0
  107. data/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/core_methods.js +2 -13
  108. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitRecord.js +3 -4
  109. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/core_methods.js +73 -0
  110. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/createRecord.js +15 -0
  111. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/dataSourceCallbacks.js +4 -2
  112. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/destroyRecord.js +1 -1
  113. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/pushChanges.js +2 -2
  114. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/recordDidChange.js +1 -1
  115. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/retrieveRecord.js +2 -2
  116. data/frameworks/sproutcore/frameworks/debug/core.js +60 -0
  117. data/frameworks/sproutcore/frameworks/deprecated/core.js +0 -2
  118. data/frameworks/sproutcore/frameworks/deprecated/server/server.js +0 -1
  119. data/frameworks/sproutcore/frameworks/deprecated/system/browser.js +0 -2
  120. data/frameworks/sproutcore/frameworks/deprecated/system/classic_responder.js +0 -2
  121. data/frameworks/sproutcore/frameworks/deprecated/system/event.js +0 -2
  122. data/frameworks/sproutcore/frameworks/deprecated/system/misc.js +0 -2
  123. data/frameworks/sproutcore/frameworks/deprecated/system/object.js +0 -2
  124. data/frameworks/sproutcore/frameworks/deprecated/system/path_module.js +0 -1
  125. data/frameworks/sproutcore/frameworks/deprecated/system/string.js +0 -2
  126. data/frameworks/sproutcore/frameworks/designer/coders/design.js +1 -2
  127. data/frameworks/sproutcore/frameworks/designer/coders/localization.js +1 -2
  128. data/frameworks/sproutcore/frameworks/designer/coders/object.js +1 -1
  129. data/frameworks/sproutcore/frameworks/designer/controllers/page_design.js +1 -1
  130. data/frameworks/sproutcore/frameworks/designer/ext/page.js +0 -2
  131. data/frameworks/sproutcore/frameworks/designer/ext/view.js +0 -2
  132. data/frameworks/sproutcore/frameworks/designer/views/controls/button.js +2 -3
  133. data/frameworks/sproutcore/frameworks/designer/views/designer.js +24 -8
  134. data/frameworks/sproutcore/frameworks/designer/views/label.js +1 -2
  135. data/frameworks/sproutcore/frameworks/designer/views/mixins/button.js +0 -2
  136. data/frameworks/sproutcore/frameworks/designer/views/tab.js +1 -2
  137. data/frameworks/sproutcore/frameworks/desktop/english.lproj/alert.css +2 -2
  138. data/frameworks/sproutcore/frameworks/desktop/english.lproj/drag.css +6 -0
  139. data/frameworks/sproutcore/frameworks/desktop/english.lproj/list_item.css +63 -10
  140. data/frameworks/sproutcore/frameworks/desktop/english.lproj/menu_item_view.css +5 -4
  141. data/frameworks/sproutcore/frameworks/desktop/english.lproj/modal.css +5 -0
  142. data/frameworks/sproutcore/frameworks/desktop/english.lproj/panel.css +1 -0
  143. data/frameworks/sproutcore/frameworks/desktop/english.lproj/slider.css +5 -0
  144. data/frameworks/sproutcore/frameworks/desktop/english.lproj/split_divider.css +1 -0
  145. data/frameworks/sproutcore/frameworks/desktop/english.lproj/tab.css +1 -1
  146. data/frameworks/sproutcore/frameworks/desktop/mixins/collection_row_delegate.js +61 -0
  147. data/frameworks/sproutcore/frameworks/desktop/mixins/collection_view_delegate.js +136 -79
  148. data/frameworks/sproutcore/frameworks/desktop/panes/alert.js +55 -24
  149. data/frameworks/sproutcore/frameworks/desktop/panes/menu.js +295 -147
  150. data/frameworks/sproutcore/frameworks/desktop/panes/palette.js +1 -1
  151. data/frameworks/sproutcore/frameworks/desktop/panes/panel.js +1 -1
  152. data/frameworks/sproutcore/frameworks/desktop/panes/picker.js +18 -20
  153. data/frameworks/sproutcore/frameworks/desktop/panes/sheet.js +2 -2
  154. data/frameworks/sproutcore/frameworks/desktop/protocols/drop_target.js +4 -4
  155. data/frameworks/sproutcore/frameworks/desktop/system/drag.js +337 -231
  156. data/frameworks/sproutcore/frameworks/desktop/system/root_responder.js +3 -3
  157. data/frameworks/sproutcore/frameworks/desktop/tests/integration/dialog.js +1 -1
  158. data/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +2 -2
  159. data/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/methods.js +46 -1
  160. data/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/ui.js +4 -2
  161. data/frameworks/sproutcore/frameworks/desktop/tests/panes/palette/ui.js +5 -6
  162. data/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/ui.js +11 -11
  163. data/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/ui.js +11 -7
  164. data/frameworks/sproutcore/frameworks/desktop/tests/panes/sheet/ui.js +9 -9
  165. data/frameworks/sproutcore/frameworks/desktop/tests/views/button/ui.js +19 -0
  166. data/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +0 -1
  167. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/content.js +249 -0
  168. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/deleteSelection.js +82 -0
  169. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/deselect.js +199 -0
  170. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/itemViewForContentIndex.js +288 -0
  171. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/layerIdFor.js +65 -0
  172. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/length.js +88 -0
  173. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/mouse.js +165 -0
  174. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/nowShowing.js +121 -0
  175. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/reload.js +177 -0
  176. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/select.js +240 -0
  177. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selectNextItem.js +191 -0
  178. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selectPreviousItem.js +197 -39
  179. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selection.js +141 -0
  180. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/ui_diagram.js +182 -0
  181. data/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowDelegate.js +183 -0
  182. data/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowHeightForContentIndex.js +133 -0
  183. data/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowOffsetForContentIndex.js +132 -0
  184. data/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_outline.js +56 -0
  185. data/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_row_heights.js +167 -0
  186. data/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_simple.js +127 -0
  187. data/frameworks/sproutcore/frameworks/desktop/tests/views/list_item.js +30 -1
  188. data/frameworks/sproutcore/frameworks/desktop/tests/views/menu_item/ui.js +8 -8
  189. data/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +9 -9
  190. data/frameworks/sproutcore/frameworks/desktop/tests/views/scroller/methods.js +45 -6
  191. data/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/methods.js +2 -1
  192. data/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +17 -1
  193. data/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/ui.js +44 -29
  194. data/frameworks/sproutcore/frameworks/desktop/tests/views/stacked/ui_comments.js +231 -0
  195. data/frameworks/sproutcore/frameworks/desktop/tests/views/web/ui.js +1 -1
  196. data/frameworks/sproutcore/frameworks/desktop/views/button.js +15 -4
  197. data/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +8 -1
  198. data/frameworks/sproutcore/frameworks/desktop/views/collection.js +1739 -1123
  199. data/frameworks/sproutcore/frameworks/desktop/views/form.js +0 -1
  200. data/frameworks/sproutcore/frameworks/desktop/views/grid.js +13 -11
  201. data/frameworks/sproutcore/frameworks/desktop/views/list.js +405 -571
  202. data/frameworks/sproutcore/frameworks/desktop/views/list_item.js +211 -74
  203. data/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +319 -169
  204. data/frameworks/sproutcore/frameworks/desktop/views/popup_button.js +57 -51
  205. data/frameworks/sproutcore/frameworks/desktop/views/progress.js +2 -2
  206. data/frameworks/sproutcore/frameworks/desktop/views/scene.js +150 -2
  207. data/frameworks/sproutcore/frameworks/desktop/views/scroll.js +92 -50
  208. data/frameworks/sproutcore/frameworks/desktop/views/scroller.js +86 -63
  209. data/frameworks/sproutcore/frameworks/desktop/views/segmented.js +38 -22
  210. data/frameworks/sproutcore/frameworks/desktop/views/select_field.js +51 -12
  211. data/frameworks/sproutcore/frameworks/desktop/views/slider.js +2 -0
  212. data/frameworks/sproutcore/frameworks/desktop/views/source_list.js +17 -1087
  213. data/frameworks/sproutcore/frameworks/desktop/views/source_list_group.js +3 -3
  214. data/frameworks/sproutcore/frameworks/desktop/views/split.js +35 -9
  215. data/frameworks/sproutcore/frameworks/desktop/views/stacked.js +101 -0
  216. data/frameworks/sproutcore/frameworks/desktop/views/tab.js +23 -22
  217. data/frameworks/sproutcore/frameworks/desktop/views/toolbar.js +1 -1
  218. data/frameworks/sproutcore/frameworks/foundation/controllers/array.js +382 -363
  219. data/frameworks/sproutcore/frameworks/foundation/controllers/controller.js +7 -279
  220. data/frameworks/sproutcore/frameworks/foundation/controllers/object.js +212 -310
  221. data/frameworks/sproutcore/frameworks/foundation/controllers/tree.js +109 -0
  222. data/frameworks/sproutcore/frameworks/foundation/core.js +25 -0
  223. data/frameworks/sproutcore/frameworks/foundation/debug/control_test_pane.js +30 -8
  224. data/frameworks/sproutcore/frameworks/foundation/english.lproj/bootstrap.rhtml +19 -4
  225. data/frameworks/sproutcore/frameworks/foundation/english.lproj/core.css +219 -3
  226. data/frameworks/sproutcore/frameworks/foundation/english.lproj/debug/control-test-pane.css +1 -0
  227. data/frameworks/sproutcore/frameworks/foundation/english.lproj/label.css +30 -0
  228. data/frameworks/sproutcore/frameworks/foundation/english.lproj/strings.js +15 -0
  229. data/frameworks/sproutcore/frameworks/{desktop → foundation}/english.lproj/text_field.css +19 -3
  230. data/frameworks/sproutcore/frameworks/foundation/english.lproj/view.css +6 -1
  231. data/frameworks/sproutcore/frameworks/foundation/license.js +19 -0
  232. data/frameworks/sproutcore/frameworks/foundation/mixins/button.js +15 -7
  233. data/frameworks/sproutcore/frameworks/foundation/mixins/collection_content.js +171 -0
  234. data/frameworks/sproutcore/frameworks/foundation/mixins/control.js +5 -5
  235. data/frameworks/sproutcore/frameworks/foundation/mixins/inline_text_field.js +462 -0
  236. data/frameworks/sproutcore/frameworks/foundation/mixins/selection_support.js +162 -84
  237. data/frameworks/sproutcore/frameworks/foundation/mixins/static_layout.js +33 -2
  238. data/frameworks/sproutcore/frameworks/foundation/mixins/string.js +17 -3
  239. data/frameworks/sproutcore/frameworks/foundation/mixins/tree_item_content.js +159 -0
  240. data/frameworks/sproutcore/frameworks/foundation/panes/pane.js +49 -20
  241. data/frameworks/sproutcore/frameworks/foundation/private/tree_item_observer.js +887 -0
  242. data/frameworks/sproutcore/frameworks/foundation/system/application.js +36 -0
  243. data/frameworks/sproutcore/frameworks/foundation/system/benchmark.js +310 -62
  244. data/frameworks/sproutcore/frameworks/foundation/system/datetime.js +729 -0
  245. data/frameworks/sproutcore/frameworks/foundation/system/event.js +57 -21
  246. data/frameworks/sproutcore/frameworks/foundation/system/ready.js +11 -5
  247. data/frameworks/sproutcore/frameworks/foundation/system/render_context.js +55 -16
  248. data/frameworks/sproutcore/frameworks/foundation/system/request.js +152 -27
  249. data/frameworks/sproutcore/frameworks/foundation/system/responder.js +120 -0
  250. data/frameworks/sproutcore/frameworks/foundation/system/responder_context.js +243 -0
  251. data/frameworks/sproutcore/frameworks/foundation/system/root_responder.js +29 -6
  252. data/frameworks/sproutcore/frameworks/foundation/system/routes.js +143 -102
  253. data/frameworks/sproutcore/frameworks/foundation/system/user_defaults.js +9 -2
  254. data/frameworks/sproutcore/frameworks/foundation/system/utils.js +104 -9
  255. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/array_case.js +182 -0
  256. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/enum_case.js +193 -0
  257. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/null_case.js +64 -0
  258. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/single_case.js +136 -0
  259. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object/empty_case.js +82 -0
  260. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object/multiple_case.js +111 -0
  261. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object/single_case.js +193 -0
  262. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object/single_enumerable_case.js +179 -0
  263. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/tree/outline_case.js +108 -0
  264. data/frameworks/sproutcore/frameworks/foundation/tests/mixins/button/keyEquivalents.js +35 -0
  265. data/frameworks/sproutcore/frameworks/foundation/tests/mixins/staticLayout.js +128 -0
  266. data/frameworks/sproutcore/frameworks/foundation/tests/mixins/string.js +17 -0
  267. data/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/flat_case.js +325 -0
  268. data/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/group_case.js +718 -0
  269. data/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/outline_case.js +484 -0
  270. data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_core.js +28 -28
  271. data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_selector.js +1 -1
  272. data/frameworks/sproutcore/frameworks/foundation/tests/system/datetime.js +151 -0
  273. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/get.js +2 -2
  274. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_attr.js +1 -1
  275. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_basic.js +1 -1
  276. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_className.js +12 -12
  277. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_style.js +1 -1
  278. data/frameworks/sproutcore/frameworks/foundation/tests/system/request.js +52 -14
  279. data/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/root_responder.js +27 -23
  280. data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/schedule.js +1 -1
  281. data/frameworks/sproutcore/frameworks/foundation/tests/validators/date.js +12 -10
  282. data/frameworks/sproutcore/frameworks/foundation/tests/views/label/ui.js +148 -0
  283. data/frameworks/sproutcore/frameworks/foundation/tests/views/pane/append_remove.js +1 -1
  284. data/frameworks/sproutcore/frameworks/{desktop → foundation}/tests/views/text_field/methods.js +0 -0
  285. data/frameworks/sproutcore/frameworks/{desktop → foundation}/tests/views/text_field/ui.js +53 -1
  286. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/clippingFrame.js +1 -0
  287. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/convertFrames.js +1 -1
  288. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/createChildViews.js +35 -0
  289. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/findLayerInParentLayer.js +1 -1
  290. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/isVisible.js +51 -0
  291. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/isVisibleInWindow.js +12 -1
  292. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/layoutStyle.js +83 -3
  293. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/prepareContext.js +1 -1
  294. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/updateLayer.js +4 -0
  295. data/frameworks/sproutcore/frameworks/foundation/views/container.js +1 -1
  296. data/frameworks/sproutcore/frameworks/foundation/views/field.js +27 -16
  297. data/frameworks/sproutcore/frameworks/foundation/views/image.js +4 -1
  298. data/frameworks/sproutcore/frameworks/foundation/views/label.js +16 -6
  299. data/frameworks/sproutcore/frameworks/{desktop → foundation}/views/text_field.js +39 -15
  300. data/frameworks/sproutcore/frameworks/foundation/views/view.js +328 -83
  301. data/frameworks/sproutcore/frameworks/runtime/README +1 -0
  302. data/frameworks/sproutcore/frameworks/runtime/core.js +110 -31
  303. data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/base.js +238 -0
  304. data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/indexOf.js +33 -0
  305. data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/insertAt.js +121 -0
  306. data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/objectAt.js +34 -0
  307. data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/popObject.js +50 -0
  308. data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/pushObject.js +46 -0
  309. data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/rangeObserver.js +371 -0
  310. data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/removeAt.js +100 -0
  311. data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/removeObject.js +49 -0
  312. data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/replace.js +94 -0
  313. data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/shiftObject.js +50 -0
  314. data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/unshiftObject.js +47 -0
  315. data/frameworks/sproutcore/frameworks/runtime/mixins/array.js +320 -110
  316. data/frameworks/sproutcore/frameworks/runtime/mixins/copyable.js +64 -0
  317. data/frameworks/sproutcore/frameworks/runtime/mixins/delegate_support.js +44 -6
  318. data/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +142 -77
  319. data/frameworks/sproutcore/frameworks/runtime/mixins/freezable.js +104 -0
  320. data/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +298 -142
  321. data/frameworks/sproutcore/frameworks/runtime/private/chain_observer.js +17 -11
  322. data/frameworks/sproutcore/frameworks/runtime/private/observer_queue.js +55 -15
  323. data/frameworks/sproutcore/frameworks/runtime/private/observer_set.js +29 -5
  324. data/frameworks/sproutcore/frameworks/runtime/protocols/observable_protocol.js +40 -0
  325. data/frameworks/sproutcore/frameworks/runtime/system/binding.js +39 -15
  326. data/frameworks/sproutcore/frameworks/runtime/system/index_set.js +1166 -0
  327. data/frameworks/sproutcore/frameworks/runtime/system/object.js +33 -15
  328. data/frameworks/sproutcore/frameworks/runtime/system/range_observer.js +201 -35
  329. data/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +42 -15
  330. data/frameworks/sproutcore/frameworks/runtime/system/selection_set.js +649 -0
  331. data/frameworks/sproutcore/frameworks/runtime/system/set.js +183 -54
  332. data/frameworks/sproutcore/frameworks/runtime/system/sparse_array.js +20 -11
  333. data/frameworks/sproutcore/frameworks/runtime/tests/core/clone.js +2 -2
  334. data/frameworks/sproutcore/frameworks/runtime/tests/core/compare.js +44 -0
  335. data/frameworks/sproutcore/frameworks/runtime/tests/core/console.js +16 -0
  336. data/frameworks/sproutcore/frameworks/runtime/tests/core/keys.js +1 -1
  337. data/frameworks/sproutcore/frameworks/runtime/tests/core/makeArray.js +1 -1
  338. data/frameworks/sproutcore/frameworks/runtime/tests/core/objectForPropertyPath.js +5 -5
  339. data/frameworks/sproutcore/frameworks/runtime/tests/mixins/array.js +57 -0
  340. data/frameworks/sproutcore/frameworks/runtime/tests/mixins/enumerable.js +21 -2
  341. data/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/observable.js +249 -129
  342. data/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/propertyChanges.js +11 -2
  343. data/frameworks/sproutcore/frameworks/runtime/tests/private/observer_queue/isObservingSuspended.js +55 -0
  344. data/frameworks/sproutcore/frameworks/runtime/tests/system/binding.js +81 -6
  345. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/add.js +195 -0
  346. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/clone.js +43 -0
  347. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/contains.js +74 -0
  348. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/create.js +42 -0
  349. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/indexAfter.js +38 -0
  350. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/indexBefore.js +38 -0
  351. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/intersects.js +74 -0
  352. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/max.js +40 -0
  353. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/min.js +40 -0
  354. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/rangeStartForIndex.js +36 -0
  355. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/remove.js +189 -0
  356. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/without.js +89 -0
  357. data/frameworks/sproutcore/frameworks/runtime/tests/system/object/base.js +1 -1
  358. data/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/create.js +59 -0
  359. data/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/destroy.js +75 -0
  360. data/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/objectPropertyDidChange.js +117 -0
  361. data/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/rangeDidChange.js +110 -0
  362. data/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/update.js +65 -0
  363. data/frameworks/sproutcore/frameworks/runtime/tests/system/run_loop.js +3 -3
  364. data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/add.js +92 -0
  365. data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/copy.js +17 -0
  366. data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/indexSetForSource.js +85 -0
  367. data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/isEqual.js +60 -0
  368. data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/remove.js +87 -0
  369. data/frameworks/sproutcore/frameworks/runtime/tests/system/set.js +4 -25
  370. data/frameworks/sproutcore/frameworks/runtime/tests/system/sparse_array.js +39 -1
  371. data/frameworks/sproutcore/frameworks/testing/core.js +183 -0
  372. data/frameworks/sproutcore/frameworks/testing/english.lproj/runner.css +126 -0
  373. data/frameworks/sproutcore/frameworks/testing/extras.js +0 -26
  374. data/frameworks/sproutcore/frameworks/testing/qunit.js +33 -25
  375. data/frameworks/sproutcore/frameworks/testing/system/dump.js +205 -0
  376. data/frameworks/sproutcore/frameworks/testing/system/equiv.js +201 -0
  377. data/frameworks/sproutcore/frameworks/testing/system/plan.js +691 -0
  378. data/frameworks/sproutcore/frameworks/testing/system/runner.js +209 -0
  379. data/frameworks/sproutcore/frameworks/testing/system/suite.js +228 -0
  380. data/frameworks/sproutcore/frameworks/testing/utils.js +8 -1
  381. data/frameworks/sproutcore/lib/index.rhtml +4 -1
  382. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/10.png +0 -0
  383. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/100.png +0 -0
  384. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/102.png +0 -0
  385. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/110.png +0 -0
  386. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/120.png +0 -0
  387. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/127.png +0 -0
  388. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/18.png +0 -0
  389. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/19.png +0 -0
  390. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/2.png +0 -0
  391. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/24.png +0 -0
  392. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/26.png +0 -0
  393. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/27.png +0 -0
  394. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/28.png +0 -0
  395. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/29.png +0 -0
  396. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/30.png +0 -0
  397. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/31.png +0 -0
  398. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/33.png +0 -0
  399. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/37.png +0 -0
  400. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/41.png +0 -0
  401. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/99.png +0 -0
  402. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/10.png +0 -0
  403. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/100.png +0 -0
  404. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/102.png +0 -0
  405. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/110.png +0 -0
  406. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/120.png +0 -0
  407. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/127.png +0 -0
  408. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/18.png +0 -0
  409. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/19.png +0 -0
  410. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/2.png +0 -0
  411. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/24.png +0 -0
  412. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/26.png +0 -0
  413. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/27.png +0 -0
  414. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/28.png +0 -0
  415. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/29.png +0 -0
  416. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/30.png +0 -0
  417. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/31.png +0 -0
  418. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/33.png +0 -0
  419. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/37.png +0 -0
  420. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/41.png +0 -0
  421. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/99.png +0 -0
  422. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/10.png +0 -0
  423. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/100.png +0 -0
  424. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/102.png +0 -0
  425. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/110.png +0 -0
  426. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/120.png +0 -0
  427. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/127.png +0 -0
  428. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/18.png +0 -0
  429. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/19.png +0 -0
  430. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/2.png +0 -0
  431. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/24.png +0 -0
  432. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/26.png +0 -0
  433. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/27.png +0 -0
  434. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/28.png +0 -0
  435. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/29.png +0 -0
  436. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/30.png +0 -0
  437. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/31.png +0 -0
  438. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/33.png +0 -0
  439. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/37.png +0 -0
  440. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/41.png +0 -0
  441. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/99.png +0 -0
  442. data/frameworks/sproutcore/themes/standard_theme/Source/icons/48/10.png +0 -0
  443. data/frameworks/sproutcore/themes/standard_theme/Source/icons/48/18.png +0 -0
  444. data/frameworks/sproutcore/themes/standard_theme/Source/icons/48/19.png +0 -0
  445. data/frameworks/sproutcore/themes/standard_theme/Source/icons/48/2.png +0 -0
  446. data/frameworks/sproutcore/themes/standard_theme/Source/sc-theme-repeat-x-2.psd +0 -0
  447. data/frameworks/sproutcore/themes/standard_theme/Source/sc-theme-repeat-x.psd +0 -0
  448. data/frameworks/sproutcore/themes/standard_theme/Source/sc-theme-sprite.psd +0 -0
  449. data/frameworks/sproutcore/themes/standard_theme/Source/sc-theme-ysprite.psd +0 -0
  450. data/frameworks/sproutcore/themes/standard_theme/Source/shared-icons.psd +0 -0
  451. data/frameworks/sproutcore/themes/standard_theme/Source/sproutcore-logo.psd +0 -0
  452. data/frameworks/sproutcore/themes/standard_theme/Source/sticky-note.psd +0 -0
  453. data/frameworks/sproutcore/themes/standard_theme/english.lproj/button.css +191 -193
  454. data/frameworks/sproutcore/themes/standard_theme/english.lproj/checkbox.css +11 -10
  455. data/frameworks/sproutcore/themes/standard_theme/english.lproj/collection.css +85 -4
  456. data/frameworks/sproutcore/themes/standard_theme/english.lproj/core.css +15 -2
  457. data/frameworks/sproutcore/themes/standard_theme/english.lproj/images/sc-theme-repeat-x.png +0 -0
  458. data/frameworks/sproutcore/themes/standard_theme/english.lproj/label.css +0 -26
  459. data/frameworks/sproutcore/themes/standard_theme/english.lproj/list_item.css +30 -0
  460. data/frameworks/sproutcore/themes/standard_theme/english.lproj/progress.css +9 -6
  461. data/frameworks/sproutcore/themes/standard_theme/english.lproj/radio.css +20 -11
  462. data/frameworks/sproutcore/themes/standard_theme/english.lproj/segmented.css +192 -54
  463. data/frameworks/sproutcore/themes/standard_theme/english.lproj/slider.css +56 -24
  464. data/frameworks/sproutcore/themes/standard_theme/english.lproj/tab.css +13 -7
  465. data/frameworks/sproutcore/themes/standard_theme/english.lproj/text_field.css +1 -4
  466. data/frameworks/sproutcore/themes/standard_theme/english.lproj/toolbar.css +4 -1
  467. data/lib/sproutcore/builders/minify.rb +2 -2
  468. data/lib/sproutcore/builders/test.rb +1 -1
  469. data/lib/sproutcore/buildfile.rb +1 -0
  470. data/lib/sproutcore/rack/dev.rb +1 -1
  471. data/lib/sproutcore/rack/filesystem.rb +265 -0
  472. data/lib/sproutcore/rack/proxy.rb +11 -3
  473. data/lib/sproutcore/rack/service.rb +11 -1
  474. data/lib/sproutcore/tools.rb +11 -1
  475. data/lib/sproutcore/tools/server.rb +6 -4
  476. data/vendor/jsdoc/README.txt +151 -0
  477. data/vendor/jsdoc/changes.txt +47 -0
  478. metadata +263 -308
  479. data/frameworks/sproutcore/apps/sc_jsdoc/controllers/docs.js +0 -149
  480. data/frameworks/sproutcore/apps/sc_jsdoc/core.js +0 -16
  481. data/frameworks/sproutcore/apps/sc_jsdoc/english.lproj/body.css +0 -17
  482. data/frameworks/sproutcore/apps/sc_jsdoc/english.lproj/body.js +0 -99
  483. data/frameworks/sproutcore/apps/sc_jsdoc/english.lproj/images/sproutcore-logo.png +0 -0
  484. data/frameworks/sproutcore/apps/sc_jsdoc/main.js +0 -27
  485. data/frameworks/sproutcore/apps/sc_jsdoc/models/doc.js +0 -21
  486. data/frameworks/sproutcore/apps/sc_qunit/controllers/runner.js +0 -209
  487. data/frameworks/sproutcore/apps/sc_qunit/core.js +0 -16
  488. data/frameworks/sproutcore/apps/sc_qunit/english.lproj/body.css +0 -17
  489. data/frameworks/sproutcore/apps/sc_qunit/english.lproj/body.js +0 -107
  490. data/frameworks/sproutcore/apps/sc_qunit/english.lproj/images/sproutcore-logo.png +0 -0
  491. data/frameworks/sproutcore/apps/sc_qunit/english.lproj/strings.js +0 -15
  492. data/frameworks/sproutcore/apps/sc_qunit/main.js +0 -18
  493. data/frameworks/sproutcore/apps/sc_qunit/models/test.js +0 -24
  494. data/frameworks/sproutcore/apps/sc_qunit/views/test_iframe.js +0 -52
  495. data/frameworks/sproutcore/apps/tests/controllers/test.js +0 -20
  496. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/blank.gif +0 -0
  497. data/frameworks/sproutcore/frameworks/desktop/english.lproj/menu.css +0 -83
  498. data/frameworks/sproutcore/frameworks/desktop/english.lproj/palette.css +0 -3
  499. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/methods.js +0 -10
  500. data/frameworks/sproutcore/frameworks/desktop/tests/views/list/methods.js +0 -10
  501. data/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui.js +0 -110
  502. data/frameworks/sproutcore/frameworks/foundation/mixins/responder.js +0 -156
  503. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array.js +0 -118
  504. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/controller.js +0 -268
  505. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object.js +0 -433
  506. data/frameworks/sproutcore/frameworks/runtime/tests/system/array.js +0 -263
  507. data/frameworks/sproutcore/frameworks/testing/tests/debug/qunit.js +0 -25
  508. data/spec/buildtasks/manifest/spec_helper.rb +0 -35
  509. data/spec/buildtasks/target_spec.rb +0 -214
  510. data/spec/fixtures/builder_tests/Buildfile +0 -15
  511. data/spec/fixtures/builder_tests/apps/combine_test/a.js +0 -1
  512. data/spec/fixtures/builder_tests/apps/combine_test/b.js +0 -1
  513. data/spec/fixtures/builder_tests/apps/combine_test/c.js +0 -1
  514. data/spec/fixtures/builder_tests/apps/combine_test/english.lproj/a.css +0 -1
  515. data/spec/fixtures/builder_tests/apps/combine_test/english.lproj/b.css +0 -1
  516. data/spec/fixtures/builder_tests/apps/combine_test/english.lproj/c.css +0 -1
  517. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/bar1_sample.rhtml +0 -2
  518. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/erb_sample.html.erb +0 -1
  519. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/icons/image.png +0 -0
  520. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/image.jpg +0 -0
  521. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/rhtml_sample.rhtml +0 -1
  522. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/strings.js +0 -4
  523. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/style.css +0 -0
  524. data/spec/fixtures/builder_tests/apps/html_test/french.lproj/french-icons/fr.png +0 -0
  525. data/spec/fixtures/builder_tests/apps/html_test/french.lproj/strings.js +0 -4
  526. data/spec/fixtures/builder_tests/apps/html_test/lib/layout_template.rhtml +0 -1
  527. data/spec/fixtures/builder_tests/apps/html_test/scripts.js +0 -0
  528. data/spec/fixtures/builder_tests/apps/javascript_test/sc_static.js +0 -15
  529. data/spec/fixtures/builder_tests/apps/javascript_test/sc_super.js +0 -4
  530. data/spec/fixtures/builder_tests/apps/javascript_test/strings.js +0 -7
  531. data/spec/fixtures/builder_tests/apps/sass_test/sample.sass +0 -3
  532. data/spec/fixtures/builder_tests/apps/strings_test/lproj/strings.js +0 -8
  533. data/spec/fixtures/builder_tests/apps/stylesheet_test/build_directives.css +0 -9
  534. data/spec/fixtures/builder_tests/apps/stylesheet_test/sc_static.css +0 -12
  535. data/spec/fixtures/builder_tests/apps/test_test/lib/alt_layout.rhtml +0 -1
  536. data/spec/fixtures/builder_tests/apps/test_test/lib/test_layout.rhtml +0 -3
  537. data/spec/fixtures/builder_tests/apps/test_test/tests/qunit_test.js +0 -1
  538. data/spec/fixtures/builder_tests/apps/test_test/tests/qunit_test2.js +0 -1
  539. data/spec/fixtures/builder_tests/apps/test_test/tests/rhtml_test.rhtml +0 -4
  540. data/spec/fixtures/builder_tests/frameworks/debug/core.js +0 -0
  541. data/spec/fixtures/builder_tests/frameworks/debug/english.lproj/dummy.css +0 -0
  542. data/spec/fixtures/builder_tests/frameworks/qunit/core.js +0 -0
  543. data/spec/fixtures/builder_tests/frameworks/qunit/english.lproj/dummy.css +0 -0
  544. data/spec/fixtures/builder_tests/frameworks/req_target_1/english.lproj/req_style_1.css +0 -0
  545. data/spec/fixtures/builder_tests/frameworks/req_target_1/english.lproj/strings.js +0 -4
  546. data/spec/fixtures/builder_tests/frameworks/req_target_1/english.lproj/test.rhtml +0 -1
  547. data/spec/fixtures/builder_tests/frameworks/req_target_1/req_js_1.js +0 -0
  548. data/spec/fixtures/builder_tests/frameworks/req_target_2/english.lproj/req_style_2.css +0 -0
  549. data/spec/fixtures/builder_tests/frameworks/req_target_2/english.lproj/test.rhtml +0 -1
  550. data/spec/fixtures/builder_tests/frameworks/req_target_2/javascript.js +0 -1
  551. data/spec/fixtures/builder_tests/frameworks/req_target_2/lib/alt_layout.rhtml +0 -0
  552. data/spec/fixtures/builder_tests/frameworks/req_target_2/req_js_2.js +0 -0
  553. data/spec/fixtures/builder_tests/themes/sample_theme/Buildfile +0 -1
  554. data/spec/fixtures/buildfiles/basic/Buildfile +0 -16
  555. data/spec/fixtures/buildfiles/basic/task_module.rake +0 -6
  556. data/spec/fixtures/buildfiles/installed/Buildfile +0 -7
  557. data/spec/fixtures/buildfiles/installed/Buildfile2 +0 -5
  558. data/spec/fixtures/buildfiles/project_test/Buildfile +0 -4
  559. data/spec/fixtures/buildfiles/project_test/not_project/Buildfile +0 -2
  560. data/spec/fixtures/buildfiles/project_test/not_project/child/PLACEHOLDER +0 -0
  561. data/spec/fixtures/entry_for_project/Buildfile +0 -1
  562. data/spec/fixtures/entry_for_project/apps/test_app/frameworks/nested/PLACEHOLDER +0 -0
  563. data/spec/fixtures/entry_for_project/frameworks/shared/PLACEHOLDER +0 -0
  564. data/spec/fixtures/find_targets/custom/Buildfile +0 -8
  565. data/spec/fixtures/find_targets/custom/bars/bar1/bars/bar1/PLACEHOLDER +0 -0
  566. data/spec/fixtures/find_targets/custom/bars/bar1/bars/bar2/PLACEHOLDER +0 -0
  567. data/spec/fixtures/find_targets/custom/bars/bar1/foos/foo1/PLACEHOLDER +0 -0
  568. data/spec/fixtures/find_targets/custom/bars/bar1/foos/foo2/PLACEHOLDER +0 -0
  569. data/spec/fixtures/find_targets/custom/foos/custom_foos/Buildfile +0 -5
  570. data/spec/fixtures/find_targets/custom/foos/custom_foos/custom_foodir/foo1/PLACEHOLDER +0 -0
  571. data/spec/fixtures/find_targets/custom/foos/custom_foos/custom_foodir/foo2/PLACEHOLDER +0 -0
  572. data/spec/fixtures/find_targets/custom/foos/custom_foos/foos/not_foo1/PLACEHOLDER +0 -0
  573. data/spec/fixtures/find_targets/custom/foos/foo1/bars/bar1/PLACEHOLDER +0 -0
  574. data/spec/fixtures/find_targets/custom/foos/foo1/bars/bar2/PLACEHOLDER +0 -0
  575. data/spec/fixtures/find_targets/nested/Buildfile +0 -8
  576. data/spec/fixtures/find_targets/nested/apps/app1/Buildfile +0 -1
  577. data/spec/fixtures/find_targets/nested/apps/app1/apps/nested_app/PLACEHOLDER +0 -0
  578. data/spec/fixtures/find_targets/standard/Apps/app1/frameworks/framework1/PLACEHOLDER +0 -0
  579. data/spec/fixtures/find_targets/standard/Apps/app1/frameworks/framework2/PLACEHOLDER +0 -0
  580. data/spec/fixtures/find_targets/standard/clients/client1/PLACEHOLDER +0 -0
  581. data/spec/fixtures/find_targets/standard/frameworks/framework1/frameworks/framework1/PLACEHOLDER +0 -0
  582. data/spec/fixtures/find_targets/standard/frameworks/framework2/PLACEHOLDER +0 -0
  583. data/spec/fixtures/find_targets/standard/themes/theme1/PLACEHOLDER +0 -0
  584. data/spec/fixtures/find_targets/standard/themes/theme2/PLACEHOLDER +0 -0
  585. data/spec/fixtures/languages/apps/caps_long_names/English.lproj/PLACEHOLDER +0 -0
  586. data/spec/fixtures/languages/apps/caps_long_names/FreNCH.lproj/PLACEHOLDER +0 -0
  587. data/spec/fixtures/languages/apps/caps_long_names/UnknOWN.lproj/PLACEHOLDER +0 -0
  588. data/spec/fixtures/languages/apps/long_names/english.lproj/PLACEHOLDER +0 -0
  589. data/spec/fixtures/languages/apps/long_names/french.lproj/PLACEHOLDER +0 -0
  590. data/spec/fixtures/languages/apps/long_names/german.lproj/PLACEHOLDER +0 -0
  591. data/spec/fixtures/languages/apps/long_names/italian.lproj/PLACEHOLDER +0 -0
  592. data/spec/fixtures/languages/apps/long_names/japanese.lproj/PLACEHOLDER +0 -0
  593. data/spec/fixtures/languages/apps/long_names/spanish.lproj/PLACEHOLDER +0 -0
  594. data/spec/fixtures/languages/apps/long_names/unknown.lproj/PLACEHOLDER +0 -0
  595. data/spec/fixtures/languages/apps/no_names/PLACEHOLDER +0 -0
  596. data/spec/fixtures/languages/apps/short_names/de.lproj/PLACEHOLDER +0 -0
  597. data/spec/fixtures/languages/apps/short_names/en-CA.lproj/PLACEHOLDER +0 -0
  598. data/spec/fixtures/languages/apps/short_names/en-GB.lproj/PLACEHOLDER +0 -0
  599. data/spec/fixtures/languages/apps/short_names/en-US.lproj/PLACEHOLDER +0 -0
  600. data/spec/fixtures/languages/apps/short_names/en.lproj/PLACEHOLDER +0 -0
  601. data/spec/fixtures/languages/apps/short_names/es.lproj/PLACEHOLDER +0 -0
  602. data/spec/fixtures/languages/apps/short_names/foo.lproj/PLACEHOLDER +0 -0
  603. data/spec/fixtures/languages/apps/short_names/fr.lproj/PLACEHOLDER +0 -0
  604. data/spec/fixtures/languages/apps/short_names/it.lproj/PLACEHOLDER +0 -0
  605. data/spec/fixtures/languages/apps/short_names/ja.lproj/PLACEHOLDER +0 -0
  606. data/spec/fixtures/ordered_entries/apps/no_requires/1.js +0 -1
  607. data/spec/fixtures/ordered_entries/apps/no_requires/B.js +0 -1
  608. data/spec/fixtures/ordered_entries/apps/no_requires/a.js +0 -1
  609. data/spec/fixtures/ordered_entries/apps/no_requires/a/a.js +0 -1
  610. data/spec/fixtures/ordered_entries/apps/no_requires/a/b.js +0 -1
  611. data/spec/fixtures/ordered_entries/apps/no_requires/b/a.js +0 -1
  612. data/spec/fixtures/ordered_entries/apps/no_requires/c.js +0 -1
  613. data/spec/fixtures/ordered_entries/apps/no_requires/core.js +0 -1
  614. data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/B.css +0 -0
  615. data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/a.css +0 -0
  616. data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/a/a.css +0 -0
  617. data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/a/b.css +0 -0
  618. data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/b/a.css +0 -0
  619. data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/c.css +0 -0
  620. data/spec/fixtures/ordered_entries/apps/no_requires/lproj/strings.js +0 -1
  621. data/spec/fixtures/ordered_entries/apps/no_requires/utils.js +0 -1
  622. data/spec/fixtures/ordered_entries/apps/with_requires/a.js +0 -2
  623. data/spec/fixtures/ordered_entries/apps/with_requires/b.js +0 -3
  624. data/spec/fixtures/ordered_entries/apps/with_requires/c.js +0 -2
  625. data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/a.css +0 -2
  626. data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/b.css +0 -2
  627. data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/c.css +0 -2
  628. data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/d.js +0 -1
  629. data/spec/fixtures/real_world/Buildfile +0 -12
  630. data/spec/fixtures/real_world/apps/account/README +0 -1
  631. data/spec/fixtures/real_world/apps/calendar/README +0 -1
  632. data/spec/fixtures/real_world/apps/contacts/README_BEFORE_EDITING +0 -1
  633. data/spec/fixtures/real_world/apps/files/README +0 -1
  634. data/spec/fixtures/real_world/apps/mail/README +0 -1
  635. data/spec/fixtures/real_world/apps/mobile_photos/README +0 -1
  636. data/spec/fixtures/real_world/apps/photos/README +0 -1
  637. data/spec/fixtures/real_world/apps/uploader/README +0 -1
  638. data/spec/fixtures/real_world/frameworks/core_files/PLACEHOLDER +0 -0
  639. data/spec/fixtures/real_world/frameworks/core_photos/PLACEHOLDER +0 -0
  640. data/spec/fixtures/real_world/frameworks/shared/PLACEHOLDER +0 -0
  641. data/spec/fixtures/real_world/frameworks/sproutcore/Buildfile +0 -26
  642. data/spec/fixtures/real_world/frameworks/sproutcore/README +0 -1
  643. data/spec/fixtures/real_world/frameworks/sproutcore/apps/docs/PLACEHOLDER +0 -0
  644. data/spec/fixtures/real_world/frameworks/sproutcore/apps/test_runner/PLACEHOLDER +0 -0
  645. data/spec/fixtures/real_world/frameworks/sproutcore/core.js +0 -0
  646. data/spec/fixtures/real_world/frameworks/sproutcore/debug/debug-resource.html +0 -0
  647. data/spec/fixtures/real_world/frameworks/sproutcore/debug/sample_debug.js +0 -0
  648. data/spec/fixtures/real_world/frameworks/sproutcore/demo2.js +0 -0
  649. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/debug/sample_debug-loc.js +0 -0
  650. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo.css +0 -4
  651. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo.html +0 -1
  652. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo2.sass +0 -0
  653. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/file_extension_test.haml +0 -0
  654. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/file_extension_test.html.erb +0 -1
  655. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/file_extension_test.rhtml +0 -0
  656. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/fixtures/sample_fixtures-loc.js +0 -0
  657. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/has_require.css +0 -4
  658. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/no_require.css +0 -1
  659. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/no_sc_resource.rhtml +0 -1
  660. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/protocols/sample-loc.js +0 -0
  661. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/sc_resource.css +0 -6
  662. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/sc_resource.rhtml +0 -3
  663. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/strings.js +0 -1
  664. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/tests/sample-loc.js +0 -0
  665. data/spec/fixtures/real_world/frameworks/sproutcore/fixtures/sample-json-fixture.json +0 -1
  666. data/spec/fixtures/real_world/frameworks/sproutcore/fixtures/sample_fixtures.js +0 -0
  667. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/application/PLACEHOLDER +0 -0
  668. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/costello/core.js +0 -0
  669. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/data_store/PLACEHOLDER +0 -0
  670. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/debug/PLACEHOLDER +0 -0
  671. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/desktop/PLACEHOLDER +0 -0
  672. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/empty_theme/PLACEHOLDER +0 -0
  673. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/foundation/PLACEHOLDER +0 -0
  674. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/mobile/PLACEHOLDER +0 -0
  675. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/qunit/PLACEHOLDER +0 -0
  676. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/uploader/PLACEHOLDER +0 -0
  677. data/spec/fixtures/real_world/frameworks/sproutcore/french.lproj/french-resource.js +0 -0
  678. data/spec/fixtures/real_world/frameworks/sproutcore/french.lproj/strings.js +0 -1
  679. data/spec/fixtures/real_world/frameworks/sproutcore/german.lproj/german-resource.js +0 -0
  680. data/spec/fixtures/real_world/frameworks/sproutcore/german.lproj/strings.js +0 -0
  681. data/spec/fixtures/real_world/frameworks/sproutcore/has_require.js +0 -4
  682. data/spec/fixtures/real_world/frameworks/sproutcore/lib/index.html +0 -1
  683. data/spec/fixtures/real_world/frameworks/sproutcore/no_require.js +0 -1
  684. data/spec/fixtures/real_world/frameworks/sproutcore/protocols/sample.js +0 -0
  685. data/spec/fixtures/real_world/frameworks/sproutcore/sc_resource.js +0 -6
  686. data/spec/fixtures/real_world/frameworks/sproutcore/tests/nested/sample1.js +0 -0
  687. data/spec/fixtures/real_world/frameworks/sproutcore/tests/nested/sample2.js +0 -0
  688. data/spec/fixtures/real_world/frameworks/sproutcore/tests/sample.js +0 -0
  689. data/spec/fixtures/real_world/frameworks/sproutcore/tests/sample.rhtml +0 -1
  690. data/spec/fixtures/real_world/frameworks/sproutcore/themes/standard_theme/README +0 -0
  691. data/spec/fixtures/real_world/frameworks/sproutcore/views/view.js +0 -1
  692. data/spec/fixtures/real_world/generators/sample_custom/Buildfile +0 -0
  693. data/spec/fixtures/real_world/generators/sample_custom/templates/{filename}.js +0 -1
  694. data/spec/fixtures/recursive_project/Buildfile +0 -8
  695. data/spec/fixtures/recursive_project/frameworks/sproutcore/frameworks/costello/PLACEHOLDER +0 -0
  696. data/spec/lib/builders/combine_spec.rb +0 -67
  697. data/spec/lib/builders/html_spec.rb +0 -577
  698. data/spec/lib/builders/javascript_spec.rb +0 -81
  699. data/spec/lib/builders/sass_spec.rb +0 -43
  700. data/spec/lib/builders/spec_helper.rb +0 -30
  701. data/spec/lib/builders/strings_spec.rb +0 -52
  702. data/spec/lib/builders/stylesheet_spec.rb +0 -63
  703. data/spec/lib/builders/test_index_spec.rb +0 -44
  704. data/spec/lib/builders/test_spec.rb +0 -135
  705. data/spec/lib/buildfile/config_for_spec.rb +0 -81
  706. data/spec/lib/buildfile/define_spec.rb +0 -59
  707. data/spec/lib/buildfile/dup_spec.rb +0 -65
  708. data/spec/lib/buildfile/invoke_spec.rb +0 -130
  709. data/spec/lib/buildfile/load_spec.rb +0 -49
  710. data/spec/lib/buildfile/task/dup_spec.rb +0 -55
  711. data/spec/lib/buildfile/task_defined_spec.rb +0 -17
  712. data/spec/lib/buildfile_commands/build_task_spec.rb +0 -19
  713. data/spec/lib/buildfile_commands/config_spec.rb +0 -97
  714. data/spec/lib/buildfile_commands/import_spec.rb +0 -17
  715. data/spec/lib/buildfile_commands/namespace_spec.rb +0 -18
  716. data/spec/lib/buildfile_commands/proxies_spec.rb +0 -38
  717. data/spec/lib/buildfile_commands/replace_task_spec.rb +0 -29
  718. data/spec/lib/buildfile_commands/task_spec.rb +0 -36
  719. data/spec/lib/helpers/packing_optimizer/optimize_spec.rb +0 -26
  720. data/spec/lib/models/hash_struct/deep_clone_spec.rb +0 -27
  721. data/spec/lib/models/hash_struct/has_options_spec.rb +0 -32
  722. data/spec/lib/models/hash_struct/hash_spec.rb +0 -64
  723. data/spec/lib/models/hash_struct/merge_spec.rb +0 -26
  724. data/spec/lib/models/hash_struct/method_missing.rb +0 -41
  725. data/spec/lib/models/manifest/add_entry_spec.rb +0 -36
  726. data/spec/lib/models/manifest/add_transform_spec.rb +0 -90
  727. data/spec/lib/models/manifest/build_spec.rb +0 -78
  728. data/spec/lib/models/manifest/entry_for_spec.rb +0 -94
  729. data/spec/lib/models/manifest/find_entry.rb +0 -84
  730. data/spec/lib/models/manifest/prepare_spec.rb +0 -62
  731. data/spec/lib/models/manifest_entry/cacheable_url_spec.rb +0 -31
  732. data/spec/lib/models/manifest_entry/prepare_spec.rb +0 -54
  733. data/spec/lib/models/project/add_target_spec.rb +0 -44
  734. data/spec/lib/models/project/buildfile_spec.rb +0 -35
  735. data/spec/lib/models/project/find_targets_for_spec.rb +0 -77
  736. data/spec/lib/models/project/load_nearest_project_spec.rb +0 -23
  737. data/spec/lib/models/project/target_for_spec.rb +0 -33
  738. data/spec/lib/models/project/targets_spec.rb +0 -62
  739. data/spec/lib/models/target/compute_build_number_spec.rb +0 -125
  740. data/spec/lib/models/target/config_spec.rb +0 -30
  741. data/spec/lib/models/target/expand_required_targets_spec.rb +0 -48
  742. data/spec/lib/models/target/installed_languages_spec.rb +0 -47
  743. data/spec/lib/models/target/lproj_for_spec.rb +0 -38
  744. data/spec/lib/models/target/manifest_for_spec.rb +0 -42
  745. data/spec/lib/models/target/parent_target_spec.rb +0 -21
  746. data/spec/lib/models/target/prepare_spec.rb +0 -53
  747. data/spec/lib/models/target/required_targets_spec.rb +0 -119
  748. data/spec/lib/models/target/target_for_spec.rb +0 -56
  749. data/spec/lib/tools/build_number_spec.rb +0 -28
  750. data/spec/lib/tools/gen_spec.rb +0 -207
  751. data/spec/lib/tools/tools_spec.rb +0 -78
  752. data/spec/spec_helper.rb +0 -138
  753. data/vendor/github_gem_lint.rb +0 -22
  754. data/vendor/yui-compressor/yuicompressor-2.4.2.jar +0 -0
@@ -3,7 +3,6 @@
3
3
  // copyright 2006-2008 Sprout Systems, Inc.
4
4
  // ========================================================================
5
5
 
6
- require('views/text_field') ;
7
6
 
8
7
  /**
9
8
  FormView provides a simple way for you to focus a group of views onto a
@@ -56,22 +56,22 @@ SC.GridView = SC.ListView.extend(
56
56
  }.observes('itemsPerRow'),
57
57
 
58
58
  /** @private
59
- Find the contentRange to display in the passed frame. Note that we
60
- ignore the width of the frame passed since we need to have a single
59
+ Find the contentIndexes to display in the passed rect. Note that we
60
+ ignore the width of the rect passed since we need to have a single
61
61
  contiguous range.
62
62
  */
63
- contentRangeInFrame: function(frame) {
63
+ contentIndexesInRect: function(rect) {
64
64
  var rowHeight = this.get('rowHeight') || 48 ;
65
65
  var itemsPerRow = this.get('itemsPerRow') ;
66
66
 
67
- var min = Math.floor(SC.minY(frame) / rowHeight) * itemsPerRow ;
68
- var max = Math.ceil(SC.maxY(frame) / rowHeight) * itemsPerRow ;
67
+ var min = Math.floor(SC.minY(rect) / rowHeight) * itemsPerRow ;
68
+ var max = Math.ceil(SC.maxY(rect) / rowHeight) * itemsPerRow ;
69
69
 
70
- return { start: min, length: max - min } ;
70
+ return SC.IndexSet.create(min, max-min);
71
71
  },
72
72
 
73
73
  /** @private */
74
- itemViewLayoutAtContentIndex: function(contentIndex) {
74
+ layoutForContentIndex: function(contentIndex) {
75
75
  var rowHeight = this.get('rowHeight') || 48 ;
76
76
  var frameWidth = this.get('frame').width ;
77
77
  var itemsPerRow = this.get('itemsPerRow') ;
@@ -80,8 +80,10 @@ SC.GridView = SC.ListView.extend(
80
80
  var row = Math.floor(contentIndex / itemsPerRow) ;
81
81
  var col = contentIndex - (itemsPerRow*row) ;
82
82
  return {
83
- left: col * columnWidth, top: row * rowHeight,
84
- height: rowHeight, width: columnWidth
83
+ left: col * columnWidth,
84
+ top: row * rowHeight,
85
+ height: rowHeight,
86
+ width: columnWidth
85
87
  };
86
88
  },
87
89
 
@@ -134,11 +136,11 @@ SC.GridView = SC.ListView.extend(
134
136
 
135
137
  if (!this._insertionPointView) {
136
138
  this._insertionPointView = this.insertionPointClass.create() ;
137
- } ;
139
+ }
138
140
 
139
141
  var insertionPoint = this._insertionPointView ;
140
142
  var itemViewFrame = itemView.get('frame') ;
141
- f = { height: itemViewFrame.height - 6,
143
+ var f = { height: itemViewFrame.height - 6,
142
144
  x: itemViewFrame.x,
143
145
  y: itemViewFrame.y + 6,
144
146
  width: 0
@@ -6,6 +6,7 @@
6
6
  // ==========================================================================
7
7
 
8
8
  sc_require('views/collection');
9
+ sc_require('mixins/collection_row_delegate');
9
10
 
10
11
  /** @class
11
12
 
@@ -18,13 +19,10 @@ sc_require('views/collection');
18
19
  the ListView to optimize its rendering.
19
20
 
20
21
  h2. Variable Row Heights
21
-
22
- ListView now supports variable row heights
23
- The ListView adds support for a single delegate method:
24
-
25
- {{{
26
- collectionViewRowHeightForContent()
27
- }}}
22
+
23
+ Normally you set the row height through the rowHeight property. You can
24
+ also support custom row heights by implementing the
25
+ contentCustomRowHeightIndexes property to return an index set.
28
26
 
29
27
  h2. Using ListView with Very Large Data Sets
30
28
 
@@ -41,7 +39,8 @@ sc_require('views/collection');
41
39
  uniform. This will allow the list view to efficiently render content
42
40
  without worrying about the overall performance.
43
41
 
44
- Alternatively, you may want to consider overriding the offsetForRowAtContentIndex() and heightForRowAtContentIndex() methods to
42
+ Alternatively, you may want to consider overriding the
43
+ offsetForRowAtContentIndex() and heightForRowAtContentIndex() methods to
45
44
  perform some faster calculations that do not require inspecting every
46
45
  item in the collection.
47
46
 
@@ -52,655 +51,490 @@ sc_require('views/collection');
52
51
  cheat for very long data sets to make rendering more efficient?)
53
52
 
54
53
  @extends SC.CollectionView
54
+ @extends SC.CollectionRowDelegate
55
55
  @since SproutCore 1.0
56
56
  */
57
57
  SC.ListView = SC.CollectionView.extend(
58
+ SC.CollectionRowDelegate,
58
59
  /** @scope SC.ListView.prototype */ {
59
60
 
60
61
  classNames: ['sc-list-view'],
61
-
62
- /**
63
- The default layout for the list view simply fills the entire parentView.
64
- */
65
- layout: { left: 0, right: 0, top: 0, height: 100 },
66
-
62
+
67
63
  acceptsFirstResponder: YES,
68
-
64
+
69
65
  // ..........................................................
70
- // ROW HEIGHT SUPPORT
66
+ // COLLECTION ROW DELEGATE SUPPORT
71
67
  //
72
68
 
73
- /**
74
- The common row height for list view items.
75
-
76
- If you set this property, then the ListView will be able to use this
77
- property to perform absolute layout of its children and to minimize t
78
- number of actual views it has to create.
69
+
70
+ /**
71
+ Returns the current collectionRowDelegate. This property will recompute
72
+ everytime the content changes.
73
+ */
74
+ rowDelegate: function() {
75
+ var del = this.delegate,
76
+ content = this.get('content');
77
+ return this.delegateFor('isCollectionRowDelegate', del, content);
78
+ }.property('delegate', 'content').cacheable(),
79
+
80
+ /** @private
81
+ Whenever the rowDelegate changes, begin observing important properties
82
+ */
83
+ _sclv_rowDelegateDidChange: function() {
84
+ var last = this._sclv_rowDelegate,
85
+ del = this.get('rowDelegate'),
86
+ func = this._sclv_rowHeightDidChange,
87
+ func2 = this._sclv_customRowHeightIndexesDidChange;
88
+
89
+ if (last === del) return this; // nothing to do
90
+ this._sclv_rowDelegate = del;
91
+
92
+ // last may be null on a new object
93
+ if (last) {
94
+ last.removeObserver('rowHeight', this, func);
95
+ last.removeObserver('customRowHeightIndexes', this, func2);
96
+ }
79
97
 
80
- The value should be an integer expressed in pixels.
98
+ if (!del) {
99
+ throw "Internal Inconsistancy: ListView must always have CollectionRowDelegate";
100
+ }
81
101
 
82
- You can alternatively set either the rowHeightKey or implement
83
- the collectionViewHeightForRowAtContentIndex() delegate method.
102
+ del.addObserver('rowHeight', this, func);
103
+ del.addObserver('customRowHeightIndexes', this, func2);
104
+ this._sclv_rowHeightDidChange()._sclv_customRowHeightIndexesDidChange();
105
+ return this ;
106
+ }.observes('rowDelegate'),
107
+
108
+ /** @private
109
+ called whenever the rowHeight changes. If the property actually changed
110
+ then invalidate all row heights.
84
111
  */
85
- rowHeight: 20,
86
-
87
- /**
88
- If set, this key will be used to calculate the row height for a given
89
- content object.
112
+ _sclv_rowHeightDidChange: function() {
113
+ var del = this.get('rowDelegate'),
114
+ height = del.get('rowHeight'),
115
+ indexes;
116
+
117
+ if (height === this._sclv_rowHeight) return this; // nothing to do
118
+ this._sclv_rowHeight = height;
119
+
120
+ indexes = SC.IndexSet.create(0, this.get('length'));
121
+ this.rowHeightDidChangeForIndexes(indexes);
122
+ return this ;
123
+ },
124
+
125
+ /** @private
126
+ called whenever the customRowHeightIndexes changes. If the property
127
+ actually changed then invalidate affected row heights.
90
128
  */
91
- rowHeightKey: null,
92
-
93
- /**
94
- This optional delegate method will be called for each item in your
95
- content, giving you a chance to decide what row height to use for the
96
- content at the named index.
129
+ _sclv_customRowHeightIndexesDidChange: function() {
130
+ var del = this.get('rowDelegate'),
131
+ indexes = del.get('customRowHeightIndexes'),
132
+ last = this._sclv_customRowHeightIndexes,
133
+ func = this._sclv_customRowHeightIndexesContentDidChange;
134
+
135
+ // nothing to do
136
+ if ((indexes===last) || (last && last.isEqual(indexes))) return this;
137
+
138
+ // if we were observing the last index set, then remove observer
139
+ if (last && this._sclv_isObservingCustomRowHeightIndexes) {
140
+ last.removeObserver('[]', this, func);
141
+ }
97
142
 
98
- The default version will return either the fixed rowHeight you
99
- specified or will lookup the row height on the content object using the
100
- rowHeightKey.
143
+ // only observe new index set if it exists and it is not frozen.
144
+ if (this._sclv_isObservingCustomRowHeightIndexes = indexes && !indexes.get('isFrozen')) {
145
+ indexes.addObserver('[]', this, func);
146
+ }
101
147
 
102
- @params {SC.CollectionView} the requesting collection view
103
- @params {Number} the index into the content
104
- @returns {Number} rowHeight
148
+ this._sclv_customRowHeightIndexesContentDidChange();
149
+ return this ;
150
+ },
151
+
152
+ /** @private
153
+ Called whenever the customRowHeightIndexes set is modified.
105
154
  */
106
- collectionViewHeightForRowAtContentIndex: function(collectionView, contentIndex) {
107
- // console.log('collectionViewHeightForRowAtContentIndex invoked in %@ with index %@'.fmt(this, contentIndex));
108
- // console.log('rowHeightKey is %@'.fmt(this.get('rowHeightKey')));
109
- // just test for presence of a rowHeightKey..to implement fast path...
110
- if (!this.rowHeightKey) return this.get('rowHeight');
111
- var key = this.get('rowHeightKey'), content = this.get('content'), rowHeight;
112
- if (content) content = content.objectAt(contentIndex);
113
- rowHeight = content ? content.get(key) : this.get('rowHeight');
114
- // console.log('content.get(key) is %@'.fmt(content ? content.get(key) : undefined));
115
- return rowHeight ;
155
+ _sclv_customRowHeightIndexesContentDidChange: function() {
156
+ var del = this.get('rowDelegate'),
157
+ indexes = del.get('customRowHeightIndexes'),
158
+ last = this._sclv_customRowHeightIndexes,
159
+ changed;
160
+
161
+ // compute the set to invalidate. the union of cur and last set
162
+ if (indexes && last) {
163
+ changed = indexes.copy().add(last);
164
+ } else changed = indexes || last ;
165
+ this._sclv_customRowHeightIndexes = indexes ? indexes.frozenCopy() : null;
166
+
167
+ // invalidate
168
+ this.rowHeightDidChangeForIndexes(changed);
169
+ return this ;
116
170
  },
117
171
 
172
+ // ..........................................................
173
+ // ROW PROPERTIES
174
+ //
175
+
118
176
  /**
119
- If some state changes that causes the row height for a range of rows
120
- then you should call this method to notify the view that it needs to
121
- recalculate the row heights for the collection.
177
+ Returns the top offset for the specified content index. This will take
178
+ into account any custom row heights and group views.
122
179
 
123
- Anytime your content array changes, the rows are invalidated
124
- automatically so you only need to use this for cases where your rows
125
- heights may change without changing the content array itself.
126
-
127
- If all rows heights have changed, you can pass null to invalidate the
128
- whole range.
129
-
130
- @param {Range} range or null.
131
- @returns {SC.CollectionView} reciever
180
+ @param {Number} idx the content index
181
+ @returns {Number} the row offset
132
182
  */
133
- rowHeightsDidChangeInRange: function(range) {
134
- if (this.get('hasUniformRowHeights')) return ; // nothing to do...
135
-
136
- // console.log('rowHeightsDidChangeInRange called on %@ with range %@'.fmt(this, $I(range)));
137
- // if no range is passed, just wipe the cached...
138
- if (!range) {
139
- this._list_rowOffsets = this._list_rowHeights = null ;
183
+ rowOffsetForContentIndex: function(idx) {
184
+ if (idx === 0) return 0 ; // fastpath
185
+
186
+ var del = this.get('rowDelegate'),
187
+ rowHeight = del.get('rowHeight'),
188
+ ret, custom, cache, delta, max, content ;
189
+
190
+ ret = idx * rowHeight;
191
+
192
+ if(this.get('rowSpacing')){
193
+ ret += idx * this.get('rowSpacing');
194
+ }
195
+
196
+ if (del.customRowHeightIndexes && (custom=del.get('customRowHeightIndexes'))) {
197
+
198
+ // prefill the cache with custom rows.
199
+ cache = this._sclv_offsetCache;
200
+ if (!cache) {
201
+ cache = this._sclv_offsetCache = [];
202
+ delta = max = 0 ;
203
+ custom.forEach(function(idx) {
204
+ delta += this.rowHeightForContentIndex(idx)-rowHeight;
205
+ cache[idx+1] = delta;
206
+ max = idx ;
207
+ }, this);
208
+ this._sclv_max = max+1;
209
+ }
140
210
 
141
- // otherwise, truncate the array of rowOffsets so that everything after
142
- // the start of this range will be recalc'd. For cached rowHeights,
143
- // set to undefined unless max range exceeds length, in which case you
144
- // just truncate.
145
- } else {
146
- var min = Math.max(0,range.start) ;
147
- var offsets = this._list_rowOffsets, heights = this._list_rowHeights;
148
- if (offsets) offsets.length = min ;
149
- if (heights) {
150
- var max = SC.maxRange(range);
151
- if (max >= heights.length) {
152
- heights.length = min ;
153
- } else {
154
- while(min<max) heights[min++] = undefined ;
211
+ // now just get the delta for the last custom row before the current
212
+ // idx.
213
+ delta = cache[idx];
214
+ if (delta === undefined) {
215
+ delta = cache[idx] = cache[idx-1];
216
+ if (delta === undefined) {
217
+ max = this._sclv_max;
218
+ if (idx < max) max = custom.indexBefore(idx)+1;
219
+ delta = cache[idx] = cache[max] || 0;
155
220
  }
156
221
  }
222
+
223
+ ret += delta ;
157
224
  }
158
225
 
159
- // now update the layout...
160
- this.adjust(this.computeLayout());
161
-
162
- // force recomputation of contentRangeInFrame
163
- this.notifyPropertyChange('content');
164
-
165
- // and notify that nowShowingRange may have changed...
166
- this.invalidateNowShowingRange() ;
226
+ return ret ;
167
227
  },
168
228
 
169
229
  /**
170
- Set to YES if your list view should have uniform row heights. This will
171
- enable an optimization that avoids inspecting actual content objects
172
- when calculating the size of the view.
230
+ Returns the row height for the specified content index. This will take
231
+ into account custom row heights and group rows.
173
232
 
174
- The default version of this property is set to YES unless you set a
175
- delegate or a rowHeightKey.
233
+ @param {Number} idx content index
234
+ @returns {Number} the row height
176
235
  */
177
- hasUniformRowHeights: YES,
178
- // function(key, value) {
179
- // if (value !== undefined) this._list_hasUniformRowHeights = value ;
180
- // value = this._list_hasUniformRowHeights;
181
- // return SC.none(value) ? !((this.delegate && this.delegate.collectionViewHeightForRowAtContentIndex) || this.rowHeightKey) : value ;
182
- // }.property('delegate', 'rowHeightKey').cacheable(),
236
+ rowHeightForContentIndex: function(idx) {
237
+ var del = this.get('rowDelegate'),
238
+ ret, cache, content, indexes;
239
+
240
+ if (del.customRowHeightIndexes && (indexes=del.get('customRowHeightIndexes'))) {
241
+ cache = this._sclv_heightCache ;
242
+ if (!cache) {
243
+ cache = this._sclv_heightCache = [];
244
+ content = this.get('content');
245
+ indexes.forEach(function(idx) {
246
+ cache[idx] = del.contentIndexRowHeight(this, content, idx);
247
+ }, this);
248
+ }
249
+
250
+ ret = cache[idx];
251
+ if (ret === undefined) ret = del.get('rowHeight');
252
+ } else ret = del.get('rowHeight');
253
+
254
+ return ret ;
255
+ },
183
256
 
184
257
  /**
185
- Calculates the offset for the row at the specified index. Based on the
186
- current setting this may compute the row heights for previous items or
187
- it will simply do some math...
188
- */
189
- offsetForRowAtContentIndex: function(contentIndex) {
190
- if (contentIndex === 0) return 0 ;
258
+ Call this method whenever a row height has changed in one or more indexes.
259
+ This will invalidate the row height cache and reload the content indexes.
260
+ Pass either an index set or a single index number.
261
+
262
+ This method is called automatically whenever you change the rowHeight
263
+ or customRowHeightIndexes properties on the collectionRowDelegate.
264
+
265
+ @param {SC.IndexSet|Number} indexes
266
+ @returns {SC.ListView} receiver
267
+ */
268
+ rowHeightDidChangeForIndexes: function(indexes) {
269
+ var len = this.get('length');
270
+
271
+ // clear any cached offsets
272
+ this._sclv_heightCache = this._sclv_offsetCache = null;
191
273
 
192
- // do some simple math if we have uniform row heights...
193
- if (this.get('hasUniformRowHeights')) {
194
- return this.get('rowHeight') * contentIndex ;
195
-
196
- // otherwise, use the rowOffsets cache...
197
- } else {
198
- // get caches
199
- var offsets = this._list_rowOffsets;
200
- if (!offsets) offsets = this._list_rowOffsets = [] ;
201
-
202
- // OK, now try the fast path...if undefined, loop backwards until we
203
- // find an offset that IS cached...
204
- var len = offsets.length, cur = contentIndex, height, ret;
205
-
206
- // get the cached offset. Note that if the requested index is longer
207
- // than the length of the offsets cache, then just assume the value is
208
- // undefined. We don't want to accidentally read an old value...
209
- if (contentIndex < len) {
210
- ret = offsets[cur];
211
- } else {
212
- ret = undefined ;
213
- cur = len; // start search at current end of offsets...
214
- }
215
-
216
- // if the cached value was undefined, loop backwards through the offsets
217
- // hash looking for a cached value to start from
218
- while((cur>0) && (ret===undefined)) ret = offsets[--cur];
219
-
220
- // now, work our way forward, building the cache of offsets. Use
221
- // cached heights...
222
- if (ret===undefined) ret = offsets[cur] = 0 ;
223
- while (cur < contentIndex) {
224
- // get height...recache if needed....
225
- height = this._list_heightForRowAtContentIndex(cur) ;
226
-
227
- // console.log('index %@ has height %@'.fmt(cur, height));
228
-
229
- // add to ret and save in cache
230
- ret = ret + height ;
231
-
232
- cur++; // go to next offset
233
- offsets[cur] = ret ;
234
- }
235
-
236
- return ret ;
237
- }
274
+ // find the smallest index changed; invalidate everything past it
275
+ if (indexes && indexes.isIndexSet) indexes = indexes.get('min');
276
+ this.reload(SC.IndexSet.create(indexes, len-indexes));
277
+ return this ;
238
278
  },
239
279
 
280
+ // ..........................................................
281
+ // SUBCLASS IMPLEMENTATIONS
282
+ //
283
+
240
284
  /**
241
- Calculates the height for the row at content index. This method will
242
- perform some simple math if hasUniformRowHeights is enabled. Otherwise
243
- it will consult the collection view delegate to compute the row heights.
285
+ The layout for a ListView is computed from the total number of rows
286
+ along with any custom row heights.
244
287
  */
245
- heightForRowAtContentIndex: function(contentIndex) {
246
- if (this.get('hasUniformRowHeights')) {
247
- return this.get('rowHeight') ;
248
- } else return this._list_heightForRowAtContentIndex(contentIndex);
288
+ computeLayout: function() {
289
+ // default layout
290
+ var ret = this._sclv_layout;
291
+ if (!ret) ret = this._sclv_layout = {};
292
+ ret.minHeight = this.rowOffsetForContentIndex(this.get('length'))+4;
293
+ return ret ;
249
294
  },
250
295
 
251
- /** @private
252
- By-passes the uniform row heights check. Makes offsetForRow... a little
253
- faster.
296
+ /**
297
+
298
+ Computes the layout for a specific content index by combining the current
299
+ row heights.
300
+
254
301
  */
255
- _list_heightForRowAtContentIndex: function(contentIndex) {
256
- // console.log('_list_heightForRowAtContentIndex invoked on %@ with index %@'.fmt(this, index));
257
- var heights = this._list_rowHeights;
258
- if (!heights) heights = this._list_rowHeights = [] ;
259
-
260
- var height = (contentIndex < heights.length) ?
261
- heights[contentIndex] :
262
- undefined ;
263
- if (height===undefined) {
264
- height = heights[contentIndex] = this.invokeDelegateMethod(this.delegate, 'collectionViewHeightForRowAtContentIndex', this, contentIndex) || 0 ;
265
- }
266
-
267
- return height ;
302
+ layoutForContentIndex: function(contentIndex) {
303
+ return {
304
+ top: this.rowOffsetForContentIndex(contentIndex),
305
+ height: this.rowHeightForContentIndex(contentIndex),
306
+ left: 0,
307
+ right: 0
308
+ };
268
309
  },
269
310
 
270
- // ..........................................................
271
- // RENDERING
272
- //
273
-
274
- render: function(context, firstTime) {
275
- if (SC.BENCHMARK_RENDER) {
276
- var bkey = '%@.render'.fmt(this) ;
277
- SC.Benchmark.start(bkey);
278
- }
279
- this.beginPropertyChanges() ; // avoid sending notifications
280
-
281
- var content = SC.makeArray(this.get('content')) ;
282
- var selection = SC.makeArray(this.get('selection'));
283
- var oldRange = this._oldNowShowingRange ;
284
- var range = SC.cloneRange(this.get('nowShowingRange')) ;
285
- this._oldNowShowingRange = SC.cloneRange(range) ;
286
- var key, itemView = this.createExampleView(content), c ;
287
- var range2 ; // only used if the old range fits inside the new range
288
- var idx, end, childId, maxLen ;
289
-
290
- // keep track of children we've got rendered
291
- var childSet = this._childSet ;
292
- if (!childSet) childSet = this._childSet = [] ;
293
-
294
- if (SC.ENABLE_COLLECTION_PARTIAL_RENDER) {
295
- // used for santity checks during debugging
296
- if (SC.SANITY_CHECK_PARTIAL_RENDER) var maxLen = range.length ;
297
-
298
- if (SC.DEBUG_PARTIAL_RENDER) {
299
- console.log('oldRange = ') ;
300
- console.log(oldRange) ;
301
- console.log('range = ') ;
302
- console.log(range) ;
303
- }
304
-
305
- // if we're dirty, redraw everything visible
306
- // (selection changed, content changed, etc.)
307
- if (this.get('isDirty')) {
308
- childSet.length = 0 ; // full render
309
-
310
- // else, only redaw objects we haven't previously drawn
311
- } else if (oldRange) {
312
- // ignore ranges that don't overlap above..
313
- if (range.start >= oldRange.start + oldRange.length) {
314
- childSet.length = 0 ; // full render
315
-
316
- // and below...
317
- } else if (range.start + range.length <= oldRange.start) {
318
- childSet.length = 0 ; // full render
319
-
320
- // okay, the ranges do overlap. are they equal?
321
- } else if (SC.rangesEqual(oldRange, range)) {
322
- range = SC.EMPTY_RANGE ; // nothing to render
323
-
324
- // nope, is the old range inside the new range?
325
- } else if (range.start <= oldRange.start && range.start + range.length >= oldRange.start + oldRange.length) {
326
- // need to render two ranges...all pre-existing views are valid
327
- context.partialUpdate = YES ;
328
- range2 = { start: oldRange.start + oldRange.length, length: (range.start + range.length) - (oldRange.start + oldRange.length) } ;
329
- range.length = oldRange.start - range.start ;
330
-
331
- // nope, is the new range inside the old range?
332
- } else if (range.start >= oldRange.start && range.start + range.length <= oldRange.start + oldRange.length) {
333
- // need to remove unused childNodes at both ends, start with bottom...
334
- idx = oldRange.start ;
335
- end = range.start ;
336
- while (idx < end) {
337
- if (SC.DEBUG_PARTIAL_RENDER) console.log('looping on bottom range');
338
- childId = childSet[idx] ;
339
- if (childId) context.remove(childId) ;
340
- if (SC.DEBUG_PARTIAL_RENDER) console.log('deleting content at index %@'.fmt(idx));
341
- delete childSet[idx] ;
342
- ++idx ;
343
- }
344
-
345
- // now remove unused childNodes at the top of the range...
346
- idx = range.start + range.length ;
347
- end = oldRange.start + oldRange.length ;
348
- while (idx < end) {
349
- if (SC.DEBUG_PARTIAL_RENDER) console.log('looping on top range');
350
- childId = childSet[idx] ;
351
- if (childId) context.remove(childId) ;
352
- if (SC.DEBUG_PARTIAL_RENDER) console.log('deleting content at index %@'.fmt(idx));
353
- delete childSet[idx] ;
354
- ++idx ;
355
- }
356
-
357
- range = SC.EMPTY_RANGE ; // nothing to render
358
-
359
- // nope, is the new range lower than the old range?
360
- } else if (range.start < oldRange.start) {
361
- context.partialUpdate = YES ;
362
-
363
- // need to remove unused childNodes at the top of the old range
364
- idx = range.start + range.length ;
365
- end = oldRange.start + oldRange.length ;
366
- while (idx < end) {
367
- if (SC.DEBUG_PARTIAL_RENDER) console.log('looping on top only');
368
- childId = childSet[idx] ;
369
- if (childId) context.remove(childId) ;
370
- if (SC.DEBUG_PARTIAL_RENDER) console.log('deleting content at index %@'.fmt(idx));
371
- delete childSet[idx] ;
372
- ++idx ;
373
- }
374
-
375
- range.length = Math.min(range.length, oldRange.start - range.start) ;
376
-
377
- // nope, so the new range is higher than the old range
378
- } else {
379
- context.partialUpdate = YES ;
380
-
381
- // need to remove unused childNodes at the bottom of the old range
382
- idx = oldRange.start ;
383
- end = range.start ;
384
- while (idx < end) {
385
- if (SC.DEBUG_PARTIAL_RENDER) console.log('looping on bottom only');
386
- childId = childSet[idx] ;
387
- if (childId) context.remove(childId) ;
388
- if (SC.DEBUG_PARTIAL_RENDER) console.log('deleting content at index %@'.fmt(idx));
389
- delete childSet[idx] ;
390
- ++idx ;
391
- }
392
-
393
- end = range.start + range.length ;
394
- range.start = oldRange.start + oldRange.length ;
395
- range.length = end - range.start ;
396
- }
397
- }
311
+ /**
312
+ Override to return an IndexSet with the indexes that are at least
313
+ partially visible in the passed rectangle. This method is used by the
314
+ default implementation of computeNowShowing() to determine the new
315
+ nowShowing range after a scroll.
398
316
 
399
- if (SC.SANITY_CHECK_PARTIAL_RENDER) {
400
- if (range.length < 0) throw "range.length is " + range.length ;
401
- if (range.length > maxLen) throw "range.length is " + range.length + ', max length is ' + maxLen ;
402
- if (range.start < 0) throw "range.start is " + range.start ;
403
- if (range2) {
404
- if (range2.length < 0) throw "range2.length is " + range2.length ;
405
- if (range2.length > maxLen) throw "range2.length is " + range2.length + ', max length is ' + maxLen ;
406
- if (range2.start < 0) throw "range2.start is " + range2.start ;
407
- }
408
- }
317
+ Override this method to implement incremental rendering.
409
318
 
410
- if (SC.DEBUG_PARTIAL_RENDER) {
411
- console.log('rendering = ') ;
412
- console.log(range) ;
413
- if (range2) {
414
- console.log('also rendering = ') ;
415
- console.log(range2) ;
416
- }
417
- }
319
+ The default simply returns the current content length.
320
+
321
+ @param {Rect} rect the visible rect or a point
322
+ @returns {SC.IndexSet} now showing indexes
323
+ */
324
+ contentIndexesInRect: function(rect) {
325
+ var rowHeight = this.get('rowDelegate').get('rowHeight'),
326
+ top = SC.minY(rect),
327
+ bottom = SC.maxY(rect),
328
+ height = rect.height || 0,
329
+ len = this.get('length'),
330
+ offset, start, end;
331
+
332
+ // estimate the starting row and then get actual offsets until we are
333
+ // right.
334
+ start = (top - (top % rowHeight)) / rowHeight;
335
+ offset = this.rowOffsetForContentIndex(start);
336
+
337
+ // go backwards until top of row is before top edge
338
+ while(start>0 && offset>=top) {
339
+ start--;
340
+ offset -= this.rowHeightForContentIndex(start);
418
341
  }
419
342
 
420
- idx = SC.maxRange(range) ;
343
+ // go forwards until bottom of row is after top edge
344
+ offset += this.rowHeightForContentIndex(start);
345
+ while(start<len && offset<top) {
346
+ offset += this.rowHeightForContentIndex(start);
347
+ start++ ;
348
+ }
349
+ if (start<0) start = 0;
350
+ if (start>=len) start=len;
421
351
 
422
- var baseKey = SC.guidFor(this) + '_' ;
423
- var guids = this._itemViewGuids, guid;
424
- if (!guids) this._itemViewGuids = guids = {};
425
352
 
426
- // TODO: Use SC.IndexSet, not separate ranges, once it's ready.
427
- // This will also make it possible to do partial updates during content
428
- // and selection changes. Now we always do a full update.
353
+ // estimate the final row and then get the actual offsets until we are
354
+ // right. - look at the offset of the _following_ row
355
+ end = start + ((height - (height % rowHeight)) / rowHeight) ;
356
+ if (end > len) end = len;
357
+ offset = this.rowOffsetForContentIndex(end);
429
358
 
430
- while (--idx >= range.start) {
431
- c = content.objectAt(idx) ;
432
- if (SC.DEBUG_PARTIAL_RENDER) console.log('rendering content(%@) at index %@'.fmt(c.unread, idx));
433
-
434
- // use cache of item view guids to avoid creating temporary objects
435
- guid = SC.guidFor(c);
436
- if (!(key = guids[guid])) key = guids[guid] = baseKey+guid;
437
-
438
- itemView.set('content', c) ;
439
- itemView.set('isSelected', (selection.indexOf(c) == -1) ? NO : YES) ;
440
- itemView.layerId = key ; // cannot use .set, layerId is RO
441
- if (SC.SANITY_CHECK_PARTIAL_RENDER && childSet[idx]) throw key + '(' + c.unread + ')'+ ' at index ' + idx ; // should not re-render a child in the index!
442
- childSet[idx] = key ;
443
- itemView.adjust(this.itemViewLayoutAtContentIndex(idx)) ;
444
- context = context.begin(itemView.get('tagName')) ;
445
- itemView.prepareContext(context, YES) ;
446
- context = context.end() ;
359
+ // walk backwards until top of row is before or at bottom edge
360
+ while(end>=start && offset>=bottom) {
361
+ end-- ;
362
+ offset -= this.rowHeightForContentIndex(end);
447
363
  }
448
364
 
449
- if (range2) {
450
- idx = SC.maxRange(range2) ;
451
- while (--idx >= range2.start) {
452
- c = content.objectAt(idx) ;
453
- if (SC.DEBUG_PARTIAL_RENDER) console.log('rendering content(%@) at index %@'.fmt(c.unread, idx));
454
-
455
- // use cache of item view guids to avoid creating temporary objects
456
- guid = SC.guidFor(c);
457
- if (!(key = guids[guid])) key = guids[guid] = baseKey+guid;
458
-
459
- itemView.set('content', c) ;
460
- itemView.set('isSelected', (selection.indexOf(c) == -1) ? NO : YES) ;
461
- itemView.layerId = key ; // cannot use .set, layerId is RO
462
- if (SC.SANITY_CHECK_PARTIAL_RENDER && childSet[idx]) throw key + '(' + c.unread + ')'+ ' at index ' + idx ; // should not re-render a child in the index!
463
- childSet[idx] = key ;
464
- itemView.adjust(this.itemViewLayoutAtContentIndex(idx)) ;
465
- context = context.begin(itemView.get('tagName')) ;
466
- itemView.prepareContext(context, YES) ;
467
- context = context.end() ;
468
- }
365
+ // go forwards until bottom of row is after bottom edge
366
+ offset += this.rowHeightForContentIndex(end);
367
+ while(end<len && offset<=bottom) {
368
+ offset += this.rowHeightForContentIndex(end);
369
+ end++ ;
469
370
  }
470
371
 
471
- if (SC.DEBUG_PARTIAL_RENDER) console.log('******************************') ;
372
+ end++; // end should be after start
373
+ if (end<start) end = start;
374
+ if (end>len) end = len ;
472
375
 
473
- this.set('isDirty', NO);
474
- this.endPropertyChanges() ;
475
- if (SC.BENCHMARK_RENDER) SC.Benchmark.end(bkey);
376
+ // convert to IndexSet and return
377
+ return SC.IndexSet.create(start, end-start);
476
378
  },
477
379
 
478
380
  // ..........................................................
479
- // SUBCLASS SUPPORT
381
+ // DRAG AND ROP SUPPORT
480
382
  //
481
383
 
482
- insertionOrientation: SC.VERTICAL_ORIENTATION,
483
384
 
484
- /** @private
485
- Overrides default CollectionView method to compute the minimim height
486
- of the list view.
487
- */
488
- computeLayout: function() {
489
- var content = this.get('content') ;
490
- var rows = (content) ? content.get('length') : 0 ;
491
-
492
- // use this cached layout hash to avoid allocing memory...
493
- var ret = this._cachedLayoutHash ;
494
- if (!ret) ret = this._cachedLayoutHash = {};
385
+ /**
386
+ Default view class used to draw an insertion point. The default
387
+ view will show a vertical line. Any view you create
388
+ should expect an outlineLevel property set, which should impact your left
389
+ offset.
495
390
 
496
- // set minHeight
497
- ret.minHeight = this.offsetForRowAtContentIndex(rows);
498
- return ret;
499
- },
500
-
501
- /** @private
502
- Calculates the visible content range in the specified frame. If
503
- uniform rows are set, this will use some simple math. Otherwise it will
504
- compute all row offsets leading up to the frame.
391
+ @property
392
+ @type {SC.View}
505
393
  */
506
- contentRangeInFrame: function(frame) {
507
- // console.log('contentRangeInFrame invoked on %@ with frame {%@, %@, %@, %@}'.fmt(this, frame.x, frame.y, frame.width, frame.height));
508
- var min, max, ret, rowHeight ;
509
- var minY = SC.minY(frame), maxY = SC.maxY(frame);
510
- // use some simple math...
511
- if (this.get('hasUniformRowHeights')) {
512
- rowHeight = this.get('rowHeight') || 20 ;
513
- min = Math.max(0,Math.floor(minY / rowHeight)-1) ;
514
- max = Math.ceil(maxY / rowHeight) ;
515
-
516
- var content = this.get('content') ;
517
- min = Math.min(min, content.get('length')) ;
518
- max = Math.min(max, content.get('length')) ;
519
-
520
- // convert to range...
521
- ret = { start: min, length: max - min } ;
522
-
523
- // otherwise, get the cached row offsets...
524
- } else {
525
- content = this.get('content');
526
- var len = (content ? content.get('length') : 0), offset = 0;
527
-
528
- // console.log('contentRangeInFrame content length is %@'.fmt(len));
529
-
530
- // console.log('minY = ' + minY) ;
531
- // console.log('maxY = ' + maxY) ;
532
-
533
- min = null;
534
- max = 0;
535
- do {
536
- offset = this.offsetForRowAtContentIndex(max); // add offset.
537
- // console.log('offset is now %@'.fmt(offset));
538
- if ((min===null) && (offset >= minY)) min = max; // set min
539
- max++ ;
540
- } while (max<len && offset < maxY);
541
-
542
- // console.log('min = ' + min) ;
543
- // console.log('max = ' + max) ;
544
-
545
- // convert to range...
546
- ret = { start: Math.max(min-1, 0), length: Math.min(max - min + 2, len) } ;
547
- }
548
-
549
- // console.log('contentRangeInFrame is {%@, %@}'.fmt(ret.start, ret.length));
550
- return ret ;
551
- },
552
-
553
- /** @private */
554
- itemViewLayoutAtContentIndex: function(contentIndex) {
555
- // console.log('%@.itemViewLayoutAtContentIndex(%@)'.fmt(this, contentIndex));
556
- var layout = { left: 0, right: 0 } ;
394
+ insertionPointView: SC.View.extend({
395
+ classNames: 'sc-list-insertion-point',
557
396
 
558
- // set top & height...
559
- layout.top = this.offsetForRowAtContentIndex(contentIndex) ;
560
- layout.height = this.heightForRowAtContentIndex(contentIndex) ;
397
+ render: function(context, firstTime) {
398
+ if (firstTime) context.push('<div class="anchor"></div>');
399
+ }
561
400
 
562
- return layout ;
563
- },
564
-
565
- insertionPointClass: SC.View.extend({
566
- emptyElement: '<div><span class="anchor"></span></div>',
567
- classNames: ['sc-list-insertion-point'],
568
- layout: { top: -6, height: 2, left: 4, right: 2 }
569
401
  }),
570
-
571
- // TODO refactor code, remove duplication
402
+
403
+ /**
404
+ Default implementation will show an insertion point
405
+ */
572
406
  showInsertionPoint: function(itemView, dropOperation) {
573
- if (!itemView) {
574
- // show insertion point below final itemView
575
- var content = this.get('content') ;
576
- content = content.objectAt(content.get('length')-1) ;
577
- itemView = this.itemViewForContent(content) ;
578
-
579
- if (!itemView) return ;
580
-
581
- var f = itemView.get('frame') ;
582
- var top = f.y, height = f.height ;
583
-
584
- if (!this._insertionPointView) {
585
- this._insertionPointView = this.insertionPointClass.create() ;
586
- }
587
-
588
- var insertionPoint = this._insertionPointView ;
589
- if (insertionPoint.get('parentView') !== itemView.get('parentView')) {
590
- itemView.get('parentView').appendChild(insertionPoint) ;
591
- }
592
-
593
- insertionPoint.adjust({ top: top + height }) ;
594
- return ;
407
+ var view = this._insertionPointView;
408
+ if (!view) {
409
+ view = this._insertionPointView
410
+ = this.get('insertionPointView').create();
595
411
  }
596
412
 
597
- // if drop on, then just add a class...
598
- if (dropOperation === SC.DROP_ON) {
599
- if (itemView !== this._dropOnInsertionPoint) {
600
- this.hideInsertionPoint() ;
601
- itemView.$().addClass('drop-target') ;
602
- this._dropOnInsertionPoint = itemView ;
603
- }
604
-
413
+ var layout = SC.clone(itemView.get('layout')),
414
+ level = itemView.get('outlineLevel'),
415
+ indent = itemView.get('outlineIndent') || 0;
416
+ if (SC.none(level)) level = -1;
417
+
418
+ if (dropOperation & SC.DROP_ON) {
419
+ this.hideInsertionPoint();
420
+ itemView.set('isSelected', YES);
421
+ this._lastDropOnView = itemView;
605
422
  } else {
606
- if (this._dropOnInsertionPoint) {
607
- this._dropOnInsertionPoint.$().removeClass('drop-target') ;
608
- this._dropOnInsertionPoint = null ;
609
- }
610
-
611
- if (!this._insertionPointView) {
612
- this._insertionPointView = this.insertionPointClass.create() ;
423
+
424
+ if (this._lastDropOnView) {
425
+ this._lastDropOnView.set('isSelected', NO);
426
+ this._lastDropOnView = null;
613
427
  }
614
428
 
615
- insertionPoint = this._insertionPointView ;
616
- if (insertionPoint.get('parentView') !== itemView.get('parentView')) {
617
- itemView.get('parentView').appendChild(insertionPoint) ;
618
- }
429
+ if (dropOperation & SC.DROP_AFTER) layout.top += layout.height;
619
430
 
620
- var frame = itemView.get('frame') ;
621
- insertionPoint.adjust({ top: itemView.get('frame').y }) ;
431
+ layout.height = 2;
432
+ layout.right = 0;
433
+ layout.left = ((level+1) * indent) + 12;
434
+ delete layout.width;
435
+
436
+ view.set('layout', layout);
437
+ this.appendChild(view);
622
438
  }
623
-
624
439
  },
625
440
 
626
441
  hideInsertionPoint: function() {
627
- var insertionPoint = this._insertionPointView ;
628
- if (insertionPoint) insertionPoint.removeFromParent() ;
629
-
630
- if (this._dropOnInsertionPoint) {
631
- this._dropOnInsertionPoint.removeClassName('drop-target') ;
632
- this._dropOnInsertionPoint = null ;
442
+ if (this._lastDropOnView) {
443
+ this._lastDropOnView.set('isSelected', NO);
444
+ this._lastDropOnView = null;
633
445
  }
446
+
447
+ var view = this._insertionPointView;
448
+ if (view) view.removeFromParent().destroy();
449
+ this._insertionPointView = null;
634
450
  },
635
-
636
- // We can do this much faster programatically using the rowHeight
637
- insertionIndexForLocation: function(loc, dropOperation) {
638
- // console.log('insertionIndexForLocation called on %@'.fmt(this));
639
- var f = this.get('clippingFrame') ;
640
- var sf = f ; // FIXME this.get('scrollFrame') ;
641
- var retOp = SC.DROP_BEFORE ;
642
-
643
- // find the rowHeight and offset to work with
644
- var offset = loc.y - f.y - sf.y ;
645
- var rowOffset, rowHeight, idx ;
646
-
647
- // do some simple math if we have uniform row heights...
648
- if (this.get('hasUniformRowHeights')) {
649
- rowHeight = this.get('rowHeight') || 0 ;
650
- idx = Math.floor(offset / rowHeight) ;
651
- rowOffset = idx * rowHeight ;
652
- // otherwise, use the rowOffsets cache...
653
- } else {
654
- // get caches
655
- var offsets = this._list_rowOffsets;
656
- if (!offsets) offsets = this._list_rowOffsets = [] ;
657
-
658
- // console.log('offset of pointer is %@'.fmt(offset));
659
- // console.log('offsets are %@'.fmt(offsets.join(', ')));
660
-
661
- // OK, now try the fast path...if undefined, loop backwards until we
662
- // find an offset that IS cached...
663
- var len = offsets.length, cur = len, ret;
664
-
665
- // if the cached value was undefined, loop backwards through the offsets
666
- // hash looking for a cached value to start from
667
- while (cur>0) {
668
- ret = offsets[--cur];
669
- if (ret < offset) break ;
670
- }
671
-
672
- rowOffset = offset[cur] ;
673
- rowHeight = this._list_heightForRowAtContentIndex(cur) ;
451
+
452
+ /**
453
+ Compute the insertion index for the passed location. The location is
454
+ a point, relative to the top/left corner of the receiver view. The return
455
+ value is an index plus a dropOperation, which is computed as such:
456
+
457
+ - if outlining is not used and you are within 5px of an edge, DROP_BEFORE
458
+ the item after the edge.
674
459
 
675
- // console.log('rowHeight is %@'.fmt(rowHeight));
460
+ - if outlining is used and you are within 5px of an edge and the previous
461
+ item has a different outline level then the next item, then DROP_AFTER
462
+ the previous item if you are closer to that outline level.
676
463
 
677
- idx = cur ;
464
+ - if dropOperation = SC.DROP_ON and you are over the middle of a row, then
465
+ use DROP_ON.
466
+ */
467
+ insertionIndexForLocation: function(loc, dropOperation) {
468
+ var indexes = this.contentIndexesInRect(loc),
469
+ index = indexes.get('min'),
470
+ len = this.get('length'),
471
+ min, max, diff, clevel, cindent, plevel, pindent, itemView;
472
+
473
+ // if there are no indexes in the rect, then we need to either insert
474
+ // before the top item or after the last item. Figure that out by
475
+ // computing both.
476
+ if (SC.none(index) || index<0) {
477
+ if ((len===0) || (loc.y <= this.rowOffsetForContentIndex(0))) index = 0;
478
+ else if (loc.y >= this.rowOffsetForContentIndex(len)) index = len;
678
479
  }
679
-
680
- // find the percent through the row...
681
- var percentage = ((offset - rowOffset) / rowHeight) ;
682
-
683
- // console.log('percentage is %@'.fmt(percentage));
684
-
685
- // if the dropOperation is SC.DROP_ON and we are in the center 60%
686
- // then return the current item.
687
- if (dropOperation === SC.DROP_ON) {
688
- if (percentage > 0.80) idx++ ;
689
- if ((percentage >= 0.20) && (percentage <= 0.80)) {
690
- retOp = SC.DROP_ON;
480
+
481
+ // figure the range of the row the location must be within.
482
+ min = this.rowOffsetForContentIndex(index);
483
+ max = min + this.rowHeightForContentIndex(index);
484
+
485
+ dropOperation = SC.DROP_BEFORE;
486
+
487
+ // now we know which index we are in. if dropOperation is DROP_ON, figure
488
+ // if we can drop on or not.
489
+ if (dropOperation == SC.DROP_ON) {
490
+ // editable size - reduce height by a bit to handle dropping
491
+ if (this.get('isEditable')) diff=Math.min(Math.floor((max-min)*0.2),5);
492
+ else diff = 0;
493
+
494
+ // if we're inside the range, then DROP_ON
495
+ if (loc.y >= (min+diff) || loc.y <= (max+diff)) {
496
+ return [index, SC.DROP_ON];
691
497
  }
692
- } else {
693
- if (percentage > 0.45) idx++ ;
694
498
  }
695
499
 
696
- if (idx !== this._idx || retOp !== this._retOp) {
697
- // console.log('insertionIndex is %@, op is %@'.fmt(idx, retOp));
698
- this._idx = idx ;
699
- this._retOp = retOp ;
500
+ // ok, now if we are in last 10px, go to next item.
501
+ if ((index<len) && (loc.y >= max-10)) index++;
502
+
503
+ // finally, let's decide if we want to actually insert before/after. Only
504
+ // matters if we are using outlining.
505
+ if (index>0) {
506
+ itemView = this.itemViewForContentIndex(index);
507
+ clevel = itemView ? itemView.get('outlineLevel') : 0;
508
+ cindent = (itemView ? itemView.get('outlineIndent') : 0) || 0;
509
+ cindent *= clevel;
510
+
511
+ itemView = this.itemViewForContentIndex(index);
512
+ pindent = (itemView ? itemView.get('outlineIndent') : 0) || 0;
513
+ plevel = itemView ? itemView.get('outlineLevel') : 0;
514
+ pindent *= plevel;
515
+
516
+ // if indent levels are different, then try to figure out which level
517
+ // it should be on.
518
+ if ((clevel !== plevel) && (cindent !== pindent)) {
519
+ // use most inner indent as boundary
520
+ if (((pindent > cindent) && (loc.x >= pindent)) ||
521
+ ((pindent < cindent) && (loc.x <= cindent))) {
522
+ index-- ;
523
+ dropOperation = SC.DROP_AFTER;
524
+ }
525
+ }
700
526
  }
701
-
702
- // console.log('[ret, retOp] is [%@, %@]'.fmt(ret, retOp));
703
- return [idx, retOp] ;
704
- }
527
+
528
+ return [index, dropOperation];
529
+ },
530
+
531
+ // ..........................................................
532
+ // INTERNAL SUPPORT
533
+ //
534
+
535
+ init: function() {
536
+ sc_super();
537
+ this._sclv_rowDelegateDidChange();
538
+ }
705
539
 
706
540
  });