sproutit-sproutcore 1.0.0.20090407205609 → 1.0.0.20090408130025

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 (574) hide show
  1. data/frameworks/sproutcore/Buildfile +63 -0
  2. data/frameworks/sproutcore/HISTORY +682 -0
  3. data/frameworks/sproutcore/README +22 -0
  4. data/frameworks/sproutcore/apps/sc_jsdoc/controllers/docs.js +149 -0
  5. data/frameworks/sproutcore/apps/sc_jsdoc/core.js +16 -0
  6. data/frameworks/sproutcore/apps/sc_jsdoc/english.lproj/body.css +17 -0
  7. data/frameworks/sproutcore/apps/sc_jsdoc/english.lproj/body.js +99 -0
  8. data/frameworks/sproutcore/apps/sc_jsdoc/english.lproj/images/sproutcore-logo.png +0 -0
  9. data/frameworks/sproutcore/apps/sc_jsdoc/english.lproj/strings.js +15 -0
  10. data/frameworks/sproutcore/apps/sc_jsdoc/main.js +27 -0
  11. data/frameworks/sproutcore/apps/sc_jsdoc/models/doc.js +21 -0
  12. data/frameworks/sproutcore/apps/sc_qunit/controllers/runner.js +209 -0
  13. data/frameworks/sproutcore/apps/sc_qunit/core.js +16 -0
  14. data/frameworks/sproutcore/apps/sc_qunit/english.lproj/body.css +17 -0
  15. data/frameworks/sproutcore/apps/sc_qunit/english.lproj/body.js +107 -0
  16. data/frameworks/sproutcore/apps/sc_qunit/english.lproj/images/sproutcore-logo.png +0 -0
  17. data/frameworks/sproutcore/apps/sc_qunit/english.lproj/strings.js +15 -0
  18. data/frameworks/sproutcore/apps/sc_qunit/main.js +18 -0
  19. data/frameworks/sproutcore/apps/sc_qunit/models/test.js +24 -0
  20. data/frameworks/sproutcore/apps/sc_qunit/views/test_iframe.js +52 -0
  21. data/frameworks/sproutcore/apps/tests/controllers/targets.js +47 -0
  22. data/frameworks/sproutcore/apps/tests/controllers/test.js +20 -0
  23. data/frameworks/sproutcore/apps/tests/controllers/tests.js +38 -0
  24. data/frameworks/sproutcore/apps/tests/core.js +35 -0
  25. data/frameworks/sproutcore/apps/tests/english.lproj/loading.rhtml +9 -0
  26. data/frameworks/sproutcore/apps/tests/english.lproj/main_page.css +19 -0
  27. data/frameworks/sproutcore/apps/tests/english.lproj/main_page.js +86 -0
  28. data/frameworks/sproutcore/apps/tests/english.lproj/strings.js +17 -0
  29. data/frameworks/sproutcore/apps/tests/fixtures/target.js +43 -0
  30. data/frameworks/sproutcore/apps/tests/fixtures/test.js +43 -0
  31. data/frameworks/sproutcore/apps/tests/main.js +39 -0
  32. data/frameworks/sproutcore/apps/tests/models/target.js +49 -0
  33. data/frameworks/sproutcore/apps/tests/models/test.js +20 -0
  34. data/frameworks/sproutcore/apps/tests/tests/controllers/targets.js +15 -0
  35. data/frameworks/sproutcore/apps/tests/tests/controllers/test.js +15 -0
  36. data/frameworks/sproutcore/apps/tests/tests/controllers/tests.js +15 -0
  37. data/frameworks/sproutcore/apps/tests/tests/models/target.js +15 -0
  38. data/frameworks/sproutcore/apps/tests/tests/models/test.js +15 -0
  39. data/frameworks/sproutcore/apps/welcome/core.js +23 -0
  40. data/frameworks/sproutcore/apps/welcome/english.lproj/loading.rhtml +8 -0
  41. data/frameworks/sproutcore/apps/welcome/english.lproj/main_page.js +43 -0
  42. data/frameworks/sproutcore/apps/welcome/english.lproj/strings.js +15 -0
  43. data/frameworks/sproutcore/apps/welcome/main.js +36 -0
  44. data/frameworks/sproutcore/design/Design Charts.graffle +15819 -0
  45. data/frameworks/sproutcore/design/Record State Table.numbers +0 -0
  46. data/frameworks/sproutcore/frameworks/datastore/core.js +14 -0
  47. data/frameworks/sproutcore/frameworks/datastore/data_sources/cascade.js +113 -0
  48. data/frameworks/sproutcore/frameworks/datastore/data_sources/data_source.js +256 -0
  49. data/frameworks/sproutcore/frameworks/datastore/data_sources/fixtures.js +196 -0
  50. data/frameworks/sproutcore/frameworks/datastore/debug/json.js +71 -0
  51. data/frameworks/sproutcore/frameworks/datastore/debug/standard_setup.js +96 -0
  52. data/frameworks/sproutcore/frameworks/datastore/fixtures/author_fixtures.js +2503 -0
  53. data/frameworks/sproutcore/frameworks/datastore/fixtures/sample.js +17 -0
  54. data/frameworks/sproutcore/frameworks/datastore/models/fetched_attribute.js +92 -0
  55. data/frameworks/sproutcore/frameworks/datastore/models/many_attribute.js +38 -0
  56. data/frameworks/sproutcore/frameworks/datastore/models/record.js +430 -0
  57. data/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +361 -0
  58. data/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +305 -0
  59. data/frameworks/sproutcore/frameworks/datastore/system/query.js +128 -0
  60. data/frameworks/sproutcore/frameworks/datastore/system/record_array.js +149 -0
  61. data/frameworks/sproutcore/frameworks/datastore/system/store.js +1689 -0
  62. data/frameworks/sproutcore/frameworks/datastore/tests/data_sources/fixtures.js +86 -0
  63. data/frameworks/sproutcore/frameworks/datastore/tests/integration/contact_model.js +114 -0
  64. data/frameworks/sproutcore/frameworks/datastore/tests/integration/mail_model.js +91 -0
  65. data/frameworks/sproutcore/frameworks/datastore/tests/integration/test_runner_model.js +56 -0
  66. data/frameworks/sproutcore/frameworks/datastore/tests/models/record/destroy.js +73 -0
  67. data/frameworks/sproutcore/frameworks/datastore/tests/models/record/readAttribute.js +48 -0
  68. data/frameworks/sproutcore/frameworks/datastore/tests/models/record/refresh.js +42 -0
  69. data/frameworks/sproutcore/frameworks/datastore/tests/models/record/storeDidChangeProperties.js +138 -0
  70. data/frameworks/sproutcore/frameworks/datastore/tests/models/record/unknownProperty.js +46 -0
  71. data/frameworks/sproutcore/frameworks/datastore/tests/models/record/writeAttribute.js +71 -0
  72. data/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +115 -0
  73. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/chain.js +40 -0
  74. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChanges.js +116 -0
  75. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChangesFromNestedStore.js +135 -0
  76. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/dataHashDidChange.js +110 -0
  77. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/discardChanges.js +99 -0
  78. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readDataHash.js +180 -0
  79. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readEditableDataHash.js +126 -0
  80. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/removeDataHash.js +163 -0
  81. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/writeDataHash.js +166 -0
  82. data/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/core_methods.js +175 -0
  83. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/cancelRecord.js +54 -0
  84. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitChangesFromNestedStore.js +126 -0
  85. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitRecord.js +127 -0
  86. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/createRecord.js +57 -0
  87. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/dataHashDidChange.js +78 -0
  88. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/dataSourceCallbacks.js +247 -0
  89. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/destroyRecord.js +106 -0
  90. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/init.js +21 -0
  91. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/pushChanges.js +61 -0
  92. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/readDataHash.js +74 -0
  93. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/readEditableDataHash.js +74 -0
  94. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/recordDidChange.js +74 -0
  95. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/removeDataHash.js +144 -0
  96. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/retrieveRecord.js +137 -0
  97. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/writeDataHash.js +130 -0
  98. data/frameworks/sproutcore/frameworks/debug/core.js +1 -0
  99. data/frameworks/sproutcore/frameworks/deprecated/core.js +61 -0
  100. data/frameworks/sproutcore/frameworks/deprecated/lib/button_views.rb +330 -0
  101. data/frameworks/sproutcore/frameworks/deprecated/lib/collection_view.rb +83 -0
  102. data/frameworks/sproutcore/frameworks/deprecated/lib/core_views.rb +326 -0
  103. data/frameworks/sproutcore/frameworks/deprecated/lib/form_views.rb +253 -0
  104. data/frameworks/sproutcore/frameworks/deprecated/lib/index.rhtml +75 -0
  105. data/frameworks/sproutcore/frameworks/deprecated/lib/menu_views.rb +93 -0
  106. data/frameworks/sproutcore/frameworks/deprecated/server/rails_server.js +80 -0
  107. data/frameworks/sproutcore/frameworks/deprecated/server/rest_server.js +178 -0
  108. data/frameworks/sproutcore/frameworks/deprecated/server/server.js +674 -0
  109. data/frameworks/sproutcore/frameworks/deprecated/system/animator.js +679 -0
  110. data/frameworks/sproutcore/frameworks/deprecated/system/binding.js +36 -0
  111. data/frameworks/sproutcore/frameworks/deprecated/system/browser.js +77 -0
  112. data/frameworks/sproutcore/frameworks/deprecated/system/classic_responder.js +314 -0
  113. data/frameworks/sproutcore/frameworks/deprecated/system/event.js +60 -0
  114. data/frameworks/sproutcore/frameworks/deprecated/system/globals.js +20 -0
  115. data/frameworks/sproutcore/frameworks/deprecated/system/misc.js +60 -0
  116. data/frameworks/sproutcore/frameworks/deprecated/system/node_descriptor.js +72 -0
  117. data/frameworks/sproutcore/frameworks/deprecated/system/object.js +124 -0
  118. data/frameworks/sproutcore/frameworks/deprecated/system/path_module.js +433 -0
  119. data/frameworks/sproutcore/frameworks/deprecated/system/string.js +109 -0
  120. data/frameworks/sproutcore/frameworks/deprecated/tests/application/application.rhtml +125 -0
  121. data/frameworks/sproutcore/frameworks/deprecated/tests/views/classic_view/clippingFrame.rhtml +401 -0
  122. data/frameworks/sproutcore/frameworks/deprecated/tests/views/classic_view/frame.rhtml +357 -0
  123. data/frameworks/sproutcore/frameworks/deprecated/tests/views/classic_view/isVisibleInWindow.rhtml +147 -0
  124. data/frameworks/sproutcore/frameworks/deprecated/tests/views/collection/base.rhtml +298 -0
  125. data/frameworks/sproutcore/frameworks/deprecated/tests/views/collection/incremental_rendering.rhtml +260 -0
  126. data/frameworks/sproutcore/frameworks/deprecated/tests/views/collection/source_list_rendering.rhtml +143 -0
  127. data/frameworks/sproutcore/frameworks/deprecated/tests/views/popup_button.rhtml +128 -0
  128. data/frameworks/sproutcore/frameworks/deprecated/tests/views/text_field.rhtml +37 -0
  129. data/frameworks/sproutcore/frameworks/deprecated/views/collection.js +24 -0
  130. data/frameworks/sproutcore/frameworks/designer/coders/design.js +30 -0
  131. data/frameworks/sproutcore/frameworks/designer/coders/localization.js +28 -0
  132. data/frameworks/sproutcore/frameworks/designer/coders/object.js +347 -0
  133. data/frameworks/sproutcore/frameworks/designer/controllers/page_design.js +102 -0
  134. data/frameworks/sproutcore/frameworks/designer/css/css_rule.js +22 -0
  135. data/frameworks/sproutcore/frameworks/designer/css/css_style.js +29 -0
  136. data/frameworks/sproutcore/frameworks/designer/css/css_style_sheet.js +201 -0
  137. data/frameworks/sproutcore/frameworks/designer/ext/page.js +88 -0
  138. data/frameworks/sproutcore/frameworks/designer/ext/view.js +40 -0
  139. data/frameworks/sproutcore/frameworks/designer/views/controls/button.js +18 -0
  140. data/frameworks/sproutcore/frameworks/designer/views/designer.js +553 -0
  141. data/frameworks/sproutcore/frameworks/designer/views/label.js +17 -0
  142. data/frameworks/sproutcore/frameworks/designer/views/mixins/button.js +13 -0
  143. data/frameworks/sproutcore/frameworks/designer/views/tab.js +17 -0
  144. data/frameworks/sproutcore/frameworks/desktop/core.js +6 -0
  145. data/frameworks/sproutcore/frameworks/desktop/debug/drag.js +41 -0
  146. data/frameworks/sproutcore/frameworks/desktop/english.lproj/alert.css +56 -0
  147. data/frameworks/sproutcore/frameworks/desktop/english.lproj/debug/a_sample_image.jpg +0 -0
  148. data/frameworks/sproutcore/frameworks/desktop/english.lproj/debug/apple-logo1.jpeg +0 -0
  149. data/frameworks/sproutcore/frameworks/desktop/english.lproj/debug/iframe.html +23 -0
  150. data/frameworks/sproutcore/frameworks/desktop/english.lproj/disclosure.css +71 -0
  151. data/frameworks/sproutcore/frameworks/desktop/english.lproj/icons.css +943 -0
  152. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/blank.gif +0 -0
  153. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/mini_222222.png +0 -0
  154. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/mini_454545.png +0 -0
  155. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/mini_888888.png +0 -0
  156. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/mini_ffffff.png +0 -0
  157. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/shared.png +0 -0
  158. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/indicator.gif +0 -0
  159. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/panels/sprite-x.png +0 -0
  160. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/panels/sprite-y.png +0 -0
  161. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/sc-theme-sprite.png +0 -0
  162. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/standard_fade/000000.png +0 -0
  163. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/standard_fade/ffffff.png +0 -0
  164. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/sticky-note.png +0 -0
  165. data/frameworks/sproutcore/frameworks/desktop/english.lproj/list_item.css +156 -0
  166. data/frameworks/sproutcore/frameworks/desktop/english.lproj/menu.css +83 -0
  167. data/frameworks/sproutcore/frameworks/desktop/english.lproj/menu_item_view.css +99 -0
  168. data/frameworks/sproutcore/frameworks/desktop/english.lproj/palette.css +3 -0
  169. data/frameworks/sproutcore/frameworks/desktop/english.lproj/panel.css +94 -0
  170. data/frameworks/sproutcore/frameworks/desktop/english.lproj/picker.css +39 -0
  171. data/frameworks/sproutcore/frameworks/desktop/english.lproj/progress.css +31 -0
  172. data/frameworks/sproutcore/frameworks/desktop/english.lproj/radio.css +10 -0
  173. data/frameworks/sproutcore/frameworks/desktop/english.lproj/scroller.css +26 -0
  174. data/frameworks/sproutcore/frameworks/desktop/english.lproj/segmented.css +141 -0
  175. data/frameworks/sproutcore/frameworks/desktop/english.lproj/separator.css +19 -0
  176. data/frameworks/sproutcore/frameworks/desktop/english.lproj/slider.css +57 -0
  177. data/frameworks/sproutcore/frameworks/desktop/english.lproj/split.css +70 -0
  178. data/frameworks/sproutcore/frameworks/desktop/english.lproj/split_divider.css +8 -0
  179. data/frameworks/sproutcore/frameworks/desktop/english.lproj/strings.js +14 -0
  180. data/frameworks/sproutcore/frameworks/desktop/english.lproj/tab.css +12 -0
  181. data/frameworks/sproutcore/frameworks/desktop/english.lproj/text_field.css +29 -0
  182. data/frameworks/sproutcore/frameworks/desktop/english.lproj/toolbar.css +6 -0
  183. data/frameworks/sproutcore/frameworks/desktop/mixins/border.js +53 -0
  184. data/frameworks/sproutcore/frameworks/desktop/mixins/collection_group.js +22 -0
  185. data/frameworks/sproutcore/frameworks/desktop/mixins/collection_item.js +22 -0
  186. data/frameworks/sproutcore/frameworks/desktop/mixins/collection_view_delegate.js +226 -0
  187. data/frameworks/sproutcore/frameworks/desktop/mixins/scrollable.js +247 -0
  188. data/frameworks/sproutcore/frameworks/desktop/panes/alert.js +377 -0
  189. data/frameworks/sproutcore/frameworks/desktop/panes/menu.js +504 -0
  190. data/frameworks/sproutcore/frameworks/desktop/panes/modal.js +68 -0
  191. data/frameworks/sproutcore/frameworks/desktop/panes/palette.js +63 -0
  192. data/frameworks/sproutcore/frameworks/desktop/panes/panel.js +184 -0
  193. data/frameworks/sproutcore/frameworks/desktop/panes/picker.js +402 -0
  194. data/frameworks/sproutcore/frameworks/desktop/panes/sheet.js +46 -0
  195. data/frameworks/sproutcore/frameworks/desktop/protocols/drag_data_source.js +39 -0
  196. data/frameworks/sproutcore/frameworks/desktop/protocols/drag_source.js +81 -0
  197. data/frameworks/sproutcore/frameworks/desktop/protocols/drop_target.js +175 -0
  198. data/frameworks/sproutcore/frameworks/desktop/protocols/responder.js +280 -0
  199. data/frameworks/sproutcore/frameworks/desktop/system/drag.js +721 -0
  200. data/frameworks/sproutcore/frameworks/desktop/system/key_bindings.js +40 -0
  201. data/frameworks/sproutcore/frameworks/desktop/system/root_responder.js +641 -0
  202. data/frameworks/sproutcore/frameworks/desktop/system/undo_manager.js +187 -0
  203. data/frameworks/sproutcore/frameworks/desktop/tests/integration/dialog.js +43 -0
  204. data/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/methods.js +10 -0
  205. data/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +152 -0
  206. data/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/methods.js +10 -0
  207. data/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/ui.js +57 -0
  208. data/frameworks/sproutcore/frameworks/desktop/tests/panes/palette/methods.js +10 -0
  209. data/frameworks/sproutcore/frameworks/desktop/tests/panes/palette/ui.js +36 -0
  210. data/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/methods.js +10 -0
  211. data/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/ui.js +40 -0
  212. data/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/methods.js +10 -0
  213. data/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/ui.js +80 -0
  214. data/frameworks/sproutcore/frameworks/desktop/tests/panes/sheet/methods.js +10 -0
  215. data/frameworks/sproutcore/frameworks/desktop/tests/panes/sheet/ui.js +38 -0
  216. data/frameworks/sproutcore/frameworks/desktop/tests/views/button/methods.js +45 -0
  217. data/frameworks/sproutcore/frameworks/desktop/tests/views/button/ui.js +140 -0
  218. data/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +145 -0
  219. data/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/ui.js +99 -0
  220. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/methods.js +10 -0
  221. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selectPreviousItem.js +39 -0
  222. data/frameworks/sproutcore/frameworks/desktop/tests/views/disclosure/methods.js +10 -0
  223. data/frameworks/sproutcore/frameworks/desktop/tests/views/disclosure/ui.js +64 -0
  224. data/frameworks/sproutcore/frameworks/desktop/tests/views/grid/methods.js +10 -0
  225. data/frameworks/sproutcore/frameworks/desktop/tests/views/grid/ui.js +10 -0
  226. data/frameworks/sproutcore/frameworks/desktop/tests/views/list/methods.js +10 -0
  227. data/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui.js +110 -0
  228. data/frameworks/sproutcore/frameworks/desktop/tests/views/list_item.js +255 -0
  229. data/frameworks/sproutcore/frameworks/desktop/tests/views/menu_item/methods.js +10 -0
  230. data/frameworks/sproutcore/frameworks/desktop/tests/views/menu_item/ui.js +44 -0
  231. data/frameworks/sproutcore/frameworks/desktop/tests/views/progress/methods.js +128 -0
  232. data/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +240 -0
  233. data/frameworks/sproutcore/frameworks/desktop/tests/views/radio/methods.js +113 -0
  234. data/frameworks/sproutcore/frameworks/desktop/tests/views/radio/ui.js +202 -0
  235. data/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/methods.js +139 -0
  236. data/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/ui.js +111 -0
  237. data/frameworks/sproutcore/frameworks/desktop/tests/views/scroller/methods.js +63 -0
  238. data/frameworks/sproutcore/frameworks/desktop/tests/views/scroller/ui.js +70 -0
  239. data/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/methods.js +94 -0
  240. data/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +206 -0
  241. data/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/methods.js +81 -0
  242. data/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/ui.js +85 -0
  243. data/frameworks/sproutcore/frameworks/desktop/tests/views/separator.js +37 -0
  244. data/frameworks/sproutcore/frameworks/desktop/tests/views/source_list/methods.js +10 -0
  245. data/frameworks/sproutcore/frameworks/desktop/tests/views/source_list/ui.js +10 -0
  246. data/frameworks/sproutcore/frameworks/desktop/tests/views/split/methods.js +50 -0
  247. data/frameworks/sproutcore/frameworks/desktop/tests/views/split/ui.js +52 -0
  248. data/frameworks/sproutcore/frameworks/desktop/tests/views/tab/methods.js +54 -0
  249. data/frameworks/sproutcore/frameworks/desktop/tests/views/tab/ui.js +88 -0
  250. data/frameworks/sproutcore/frameworks/desktop/tests/views/text_field/methods.js +76 -0
  251. data/frameworks/sproutcore/frameworks/desktop/tests/views/text_field/ui.js +198 -0
  252. data/frameworks/sproutcore/frameworks/desktop/tests/views/web/methods.js +10 -0
  253. data/frameworks/sproutcore/frameworks/desktop/tests/views/web/ui.js +110 -0
  254. data/frameworks/sproutcore/frameworks/desktop/views/button.js +320 -0
  255. data/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +98 -0
  256. data/frameworks/sproutcore/frameworks/desktop/views/collection.js +2141 -0
  257. data/frameworks/sproutcore/frameworks/desktop/views/disclosure.js +44 -0
  258. data/frameworks/sproutcore/frameworks/desktop/views/form.js +595 -0
  259. data/frameworks/sproutcore/frameworks/desktop/views/grid.js +199 -0
  260. data/frameworks/sproutcore/frameworks/desktop/views/list.js +706 -0
  261. data/frameworks/sproutcore/frameworks/desktop/views/list_item.js +523 -0
  262. data/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +437 -0
  263. data/frameworks/sproutcore/frameworks/desktop/views/popup_button.js +62 -0
  264. data/frameworks/sproutcore/frameworks/desktop/views/progress.js +207 -0
  265. data/frameworks/sproutcore/frameworks/desktop/views/radio.js +332 -0
  266. data/frameworks/sproutcore/frameworks/desktop/views/scene.js +56 -0
  267. data/frameworks/sproutcore/frameworks/desktop/views/scroll.js +648 -0
  268. data/frameworks/sproutcore/frameworks/desktop/views/scroller.js +203 -0
  269. data/frameworks/sproutcore/frameworks/desktop/views/segmented.js +509 -0
  270. data/frameworks/sproutcore/frameworks/desktop/views/select_field.js +292 -0
  271. data/frameworks/sproutcore/frameworks/desktop/views/separator.js +37 -0
  272. data/frameworks/sproutcore/frameworks/desktop/views/slider.js +178 -0
  273. data/frameworks/sproutcore/frameworks/desktop/views/source_list.js +1117 -0
  274. data/frameworks/sproutcore/frameworks/desktop/views/source_list_group.js +169 -0
  275. data/frameworks/sproutcore/frameworks/desktop/views/split.js +651 -0
  276. data/frameworks/sproutcore/frameworks/desktop/views/split_divider.js +55 -0
  277. data/frameworks/sproutcore/frameworks/desktop/views/tab.js +190 -0
  278. data/frameworks/sproutcore/frameworks/desktop/views/text_field.js +233 -0
  279. data/frameworks/sproutcore/frameworks/desktop/views/thumb.js +49 -0
  280. data/frameworks/sproutcore/frameworks/desktop/views/toolbar.js +49 -0
  281. data/frameworks/sproutcore/frameworks/desktop/views/web.js +86 -0
  282. data/frameworks/sproutcore/frameworks/foundation/TESTING +46 -0
  283. data/frameworks/sproutcore/frameworks/foundation/controllers/array.js +490 -0
  284. data/frameworks/sproutcore/frameworks/foundation/controllers/controller.js +317 -0
  285. data/frameworks/sproutcore/frameworks/foundation/controllers/object.js +421 -0
  286. data/frameworks/sproutcore/frameworks/foundation/core.js +111 -0
  287. data/frameworks/sproutcore/frameworks/foundation/debug/control_test_pane.js +172 -0
  288. data/frameworks/sproutcore/frameworks/foundation/english.lproj/blank.gif +0 -0
  289. data/frameworks/sproutcore/frameworks/foundation/english.lproj/bootstrap.rhtml +53 -0
  290. data/frameworks/sproutcore/frameworks/foundation/english.lproj/button_view.css +55 -0
  291. data/frameworks/sproutcore/frameworks/foundation/english.lproj/core.css +5 -0
  292. data/frameworks/sproutcore/frameworks/foundation/english.lproj/debug/control-test-pane.css +8 -0
  293. data/frameworks/sproutcore/frameworks/foundation/english.lproj/images/sproutcore-logo.png +0 -0
  294. data/frameworks/sproutcore/frameworks/foundation/english.lproj/static_layout.css +5 -0
  295. data/frameworks/sproutcore/frameworks/foundation/english.lproj/view.css +40 -0
  296. data/frameworks/sproutcore/frameworks/foundation/ext/object.js +81 -0
  297. data/frameworks/sproutcore/frameworks/foundation/ext/run_loop.js +158 -0
  298. data/frameworks/sproutcore/frameworks/foundation/fixtures/file_exists.json +1 -0
  299. data/frameworks/sproutcore/frameworks/foundation/mixins/button.js +291 -0
  300. data/frameworks/sproutcore/frameworks/foundation/mixins/content_display.js +88 -0
  301. data/frameworks/sproutcore/frameworks/foundation/mixins/control.js +352 -0
  302. data/frameworks/sproutcore/frameworks/foundation/mixins/editable.js +146 -0
  303. data/frameworks/sproutcore/frameworks/foundation/mixins/responder.js +156 -0
  304. data/frameworks/sproutcore/frameworks/foundation/mixins/selection_support.js +154 -0
  305. data/frameworks/sproutcore/frameworks/foundation/mixins/static_layout.js +101 -0
  306. data/frameworks/sproutcore/frameworks/foundation/mixins/string.js +237 -0
  307. data/frameworks/sproutcore/frameworks/foundation/mixins/validatable.js +176 -0
  308. data/frameworks/sproutcore/frameworks/foundation/panes/main.js +47 -0
  309. data/frameworks/sproutcore/frameworks/foundation/panes/pane.js +555 -0
  310. data/frameworks/sproutcore/frameworks/foundation/protocols/inline_editor_delegate.js +84 -0
  311. data/frameworks/sproutcore/frameworks/foundation/system/benchmark.js +244 -0
  312. data/frameworks/sproutcore/frameworks/foundation/system/browser.js +64 -0
  313. data/frameworks/sproutcore/frameworks/foundation/system/builder.js +210 -0
  314. data/frameworks/sproutcore/frameworks/foundation/system/core_query.js +2015 -0
  315. data/frameworks/sproutcore/frameworks/foundation/system/cursor.js +129 -0
  316. data/frameworks/sproutcore/frameworks/foundation/system/error.js +93 -0
  317. data/frameworks/sproutcore/frameworks/foundation/system/event.js +817 -0
  318. data/frameworks/sproutcore/frameworks/foundation/system/image_cache.js +433 -0
  319. data/frameworks/sproutcore/frameworks/foundation/system/json.js +440 -0
  320. data/frameworks/sproutcore/frameworks/foundation/system/locale.js +288 -0
  321. data/frameworks/sproutcore/frameworks/foundation/system/page.js +106 -0
  322. data/frameworks/sproutcore/frameworks/foundation/system/ready.js +189 -0
  323. data/frameworks/sproutcore/frameworks/foundation/system/render_context.js +865 -0
  324. data/frameworks/sproutcore/frameworks/foundation/system/request.js +255 -0
  325. data/frameworks/sproutcore/frameworks/foundation/system/root_responder.js +368 -0
  326. data/frameworks/sproutcore/frameworks/foundation/system/routes.js +446 -0
  327. data/frameworks/sproutcore/frameworks/foundation/system/time.js +478 -0
  328. data/frameworks/sproutcore/frameworks/foundation/system/timer.js +549 -0
  329. data/frameworks/sproutcore/frameworks/foundation/system/user_defaults.js +158 -0
  330. data/frameworks/sproutcore/frameworks/foundation/system/utils.js +330 -0
  331. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array.js +118 -0
  332. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/controller.js +268 -0
  333. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object.js +433 -0
  334. data/frameworks/sproutcore/frameworks/foundation/tests/debug/control_test_pane/methods.js +10 -0
  335. data/frameworks/sproutcore/frameworks/foundation/tests/debug/control_test_pane/ui.js +113 -0
  336. data/frameworks/sproutcore/frameworks/foundation/tests/integration/creating_views.js +113 -0
  337. data/frameworks/sproutcore/frameworks/foundation/tests/mixins/button/content.js +195 -0
  338. data/frameworks/sproutcore/frameworks/foundation/tests/mixins/button/displayProperties.js +89 -0
  339. data/frameworks/sproutcore/frameworks/foundation/tests/mixins/control/content.js +168 -0
  340. data/frameworks/sproutcore/frameworks/foundation/tests/mixins/control/displayProperties.js +89 -0
  341. data/frameworks/sproutcore/frameworks/foundation/tests/system/builder.js +42 -0
  342. data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_core.js +1323 -0
  343. data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_dimensions.js +387 -0
  344. data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_selector.js +405 -0
  345. data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/setClass.js +49 -0
  346. data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/within.js +66 -0
  347. data/frameworks/sproutcore/frameworks/foundation/tests/system/error.js +41 -0
  348. data/frameworks/sproutcore/frameworks/foundation/tests/system/json.js +14 -0
  349. data/frameworks/sproutcore/frameworks/foundation/tests/system/locale.js +128 -0
  350. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/begin.js +47 -0
  351. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/element.js +44 -0
  352. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/end.js +119 -0
  353. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/get.js +51 -0
  354. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_attr.js +50 -0
  355. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_basic.js +28 -0
  356. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_className.js +179 -0
  357. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_style.js +100 -0
  358. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/init.js +55 -0
  359. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/join.js +28 -0
  360. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/push_text.js +74 -0
  361. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/tag.js +45 -0
  362. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/update.js +205 -0
  363. data/frameworks/sproutcore/frameworks/foundation/tests/system/request.js +89 -0
  364. data/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/makeKeyPane.js +124 -0
  365. data/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/makeMainPane.js +68 -0
  366. data/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/root_responder.js +97 -0
  367. data/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/targetForAction.js +238 -0
  368. data/frameworks/sproutcore/frameworks/foundation/tests/system/routes.js +33 -0
  369. data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/invalidate.js +38 -0
  370. data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/invokeLater.js +201 -0
  371. data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/isPaused.js +71 -0
  372. data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/performAction.js +67 -0
  373. data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/schedule.js +170 -0
  374. data/frameworks/sproutcore/frameworks/foundation/tests/system/user_defaults.js +27 -0
  375. data/frameworks/sproutcore/frameworks/foundation/tests/system/utils/normalizeURL.js +18 -0
  376. data/frameworks/sproutcore/frameworks/foundation/tests/system/utils/range.js +62 -0
  377. data/frameworks/sproutcore/frameworks/foundation/tests/validators/credit_card.js +35 -0
  378. data/frameworks/sproutcore/frameworks/foundation/tests/validators/date.js +21 -0
  379. data/frameworks/sproutcore/frameworks/foundation/tests/validators/number.js +47 -0
  380. data/frameworks/sproutcore/frameworks/foundation/tests/validators/password.js +13 -0
  381. data/frameworks/sproutcore/frameworks/foundation/tests/views/container/methods.js +10 -0
  382. data/frameworks/sproutcore/frameworks/foundation/tests/views/container/ui.js +83 -0
  383. data/frameworks/sproutcore/frameworks/foundation/tests/views/image/ui.js +39 -0
  384. data/frameworks/sproutcore/frameworks/foundation/tests/views/main_pane.js +31 -0
  385. data/frameworks/sproutcore/frameworks/foundation/tests/views/pane/append_remove.js +89 -0
  386. data/frameworks/sproutcore/frameworks/foundation/tests/views/pane/firstResponder.js +148 -0
  387. data/frameworks/sproutcore/frameworks/foundation/tests/views/pane/keyPane.js +133 -0
  388. data/frameworks/sproutcore/frameworks/foundation/tests/views/pane/sendEvent.js +165 -0
  389. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/clippingFrame.js +132 -0
  390. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/convertFrames.js +246 -0
  391. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/createChildViews.js +87 -0
  392. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/createLayer.js +97 -0
  393. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/destroyLayer.js +85 -0
  394. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/findLayerInParentLayer.js +52 -0
  395. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/init.js +50 -0
  396. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/insertBefore.js +200 -0
  397. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/isVisibleInWindow.js +102 -0
  398. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/layer.js +150 -0
  399. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/layoutChildViews.js +162 -0
  400. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/layoutDidChange.js +127 -0
  401. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/layoutStyle.js +248 -0
  402. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/parentViewDidChange.js +67 -0
  403. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/prepareContext.js +166 -0
  404. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/removeChild.js +189 -0
  405. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/render.js +83 -0
  406. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/replaceChild.js +29 -0
  407. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/updateLayer.js +142 -0
  408. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/updateLayerLocation.js +194 -0
  409. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/viewDidResize.js +185 -0
  410. data/frameworks/sproutcore/frameworks/foundation/validators/credit_card.js +125 -0
  411. data/frameworks/sproutcore/frameworks/foundation/validators/date.js +52 -0
  412. data/frameworks/sproutcore/frameworks/foundation/validators/email.js +45 -0
  413. data/frameworks/sproutcore/frameworks/foundation/validators/not_empty.js +33 -0
  414. data/frameworks/sproutcore/frameworks/foundation/validators/number.js +82 -0
  415. data/frameworks/sproutcore/frameworks/foundation/validators/password.js +86 -0
  416. data/frameworks/sproutcore/frameworks/foundation/validators/validator.js +311 -0
  417. data/frameworks/sproutcore/frameworks/foundation/views/container.js +136 -0
  418. data/frameworks/sproutcore/frameworks/foundation/views/field.js +276 -0
  419. data/frameworks/sproutcore/frameworks/foundation/views/image.js +158 -0
  420. data/frameworks/sproutcore/frameworks/foundation/views/label.js +261 -0
  421. data/frameworks/sproutcore/frameworks/foundation/views/view.js +2160 -0
  422. data/frameworks/sproutcore/frameworks/mobile/english.lproj/core.css +12 -0
  423. data/frameworks/sproutcore/frameworks/mobile/lib/index.rhtml +126 -0
  424. data/frameworks/sproutcore/frameworks/mobile/system/root_responder.js +109 -0
  425. data/frameworks/sproutcore/frameworks/mobile/tests/views/button/ui.js +9 -0
  426. data/frameworks/sproutcore/frameworks/mobile/views/button.js +190 -0
  427. data/frameworks/sproutcore/frameworks/runtime/README +11 -0
  428. data/frameworks/sproutcore/frameworks/runtime/core.js +777 -0
  429. data/frameworks/sproutcore/frameworks/runtime/license.js +28 -0
  430. data/frameworks/sproutcore/frameworks/runtime/mixins/array.js +403 -0
  431. data/frameworks/sproutcore/frameworks/runtime/mixins/delegate_support.js +70 -0
  432. data/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +1193 -0
  433. data/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +1149 -0
  434. data/frameworks/sproutcore/frameworks/runtime/private/chain_observer.js +135 -0
  435. data/frameworks/sproutcore/frameworks/runtime/private/observer_queue.js +108 -0
  436. data/frameworks/sproutcore/frameworks/runtime/private/observer_set.js +128 -0
  437. data/frameworks/sproutcore/frameworks/runtime/protocols/sparse_array_delegate.js +131 -0
  438. data/frameworks/sproutcore/frameworks/runtime/system/binding.js +891 -0
  439. data/frameworks/sproutcore/frameworks/runtime/system/enumerator.js +107 -0
  440. data/frameworks/sproutcore/frameworks/runtime/system/object.js +783 -0
  441. data/frameworks/sproutcore/frameworks/runtime/system/range_observer.js +99 -0
  442. data/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +214 -0
  443. data/frameworks/sproutcore/frameworks/runtime/system/set.js +246 -0
  444. data/frameworks/sproutcore/frameworks/runtime/system/sparse_array.js +286 -0
  445. data/frameworks/sproutcore/frameworks/runtime/tests/core/IsEqual.js +56 -0
  446. data/frameworks/sproutcore/frameworks/runtime/tests/core/beget.js +23 -0
  447. data/frameworks/sproutcore/frameworks/runtime/tests/core/clone.js +66 -0
  448. data/frameworks/sproutcore/frameworks/runtime/tests/core/guidFor.js +147 -0
  449. data/frameworks/sproutcore/frameworks/runtime/tests/core/inspect.js +27 -0
  450. data/frameworks/sproutcore/frameworks/runtime/tests/core/isArray.js +25 -0
  451. data/frameworks/sproutcore/frameworks/runtime/tests/core/itemType.js +38 -0
  452. data/frameworks/sproutcore/frameworks/runtime/tests/core/keys.js +20 -0
  453. data/frameworks/sproutcore/frameworks/runtime/tests/core/makeArray.js +30 -0
  454. data/frameworks/sproutcore/frameworks/runtime/tests/core/objectForPropertyPath.js +19 -0
  455. data/frameworks/sproutcore/frameworks/runtime/tests/core/tupleForPropertyPath.js +37 -0
  456. data/frameworks/sproutcore/frameworks/runtime/tests/mixins/enumerable.js +592 -0
  457. data/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/observable.js +467 -0
  458. data/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/propertyChanges.js +123 -0
  459. data/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/registerDependentKeys.js +79 -0
  460. data/frameworks/sproutcore/frameworks/runtime/tests/mixins/propertyChanges.js +80 -0
  461. data/frameworks/sproutcore/frameworks/runtime/tests/system/array.js +263 -0
  462. data/frameworks/sproutcore/frameworks/runtime/tests/system/binding.js +190 -0
  463. data/frameworks/sproutcore/frameworks/runtime/tests/system/object/base.js +135 -0
  464. data/frameworks/sproutcore/frameworks/runtime/tests/system/object/bindings.js +339 -0
  465. data/frameworks/sproutcore/frameworks/runtime/tests/system/run_loop.js +120 -0
  466. data/frameworks/sproutcore/frameworks/runtime/tests/system/set.js +313 -0
  467. data/frameworks/sproutcore/frameworks/runtime/tests/system/sparse_array.js +84 -0
  468. data/frameworks/sproutcore/frameworks/testing/core.js +13 -0
  469. data/frameworks/sproutcore/frameworks/testing/english.lproj/additions.css +8 -0
  470. data/frameworks/sproutcore/frameworks/testing/english.lproj/testsuite.css +131 -0
  471. data/frameworks/sproutcore/frameworks/testing/extras.js +43 -0
  472. data/frameworks/sproutcore/frameworks/testing/jquery.js +3559 -0
  473. data/frameworks/sproutcore/frameworks/testing/qunit.js +819 -0
  474. data/frameworks/sproutcore/frameworks/testing/tests/debug/qunit.js +25 -0
  475. data/frameworks/sproutcore/frameworks/testing/utils.js +55 -0
  476. data/frameworks/sproutcore/lib/index.rhtml +118 -0
  477. data/frameworks/sproutcore/license.js +28 -0
  478. data/frameworks/sproutcore/themes/empty_theme/tests/mini_icons.rhtml +69 -0
  479. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/button.css +41 -0
  480. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/core.css +8 -0
  481. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/backButton.png +0 -0
  482. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/blueButton.png +0 -0
  483. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/cancel.png +0 -0
  484. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/grayButton.png +0 -0
  485. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/leftButton.png +0 -0
  486. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/listArrow.png +0 -0
  487. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/listArrowSel.png +0 -0
  488. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/listGroup.png +0 -0
  489. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/loading.gif +0 -0
  490. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/pinstripes.png +0 -0
  491. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/rightButton.png +0 -0
  492. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/selection.png +0 -0
  493. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/thumb.png +0 -0
  494. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/toggle.png +0 -0
  495. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/toggleOn.png +0 -0
  496. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/toolButton.png +0 -0
  497. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/toolbar.png +0 -0
  498. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/whiteButton.png +0 -0
  499. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/strings.js +15 -0
  500. data/frameworks/sproutcore/themes/standard_theme/Source/Panel.drawit/Data +0 -0
  501. data/frameworks/sproutcore/themes/standard_theme/Source/Panel.drawit/QuickLook/Preview.jpg +0 -0
  502. data/frameworks/sproutcore/themes/standard_theme/Source/Panel.drawit/QuickLook/Thumbnail.jpg +0 -0
  503. data/frameworks/sproutcore/themes/standard_theme/Source/ToolbarView Pattern.drawit/Data +0 -0
  504. data/frameworks/sproutcore/themes/standard_theme/Source/ToolbarView Pattern.drawit/QuickLook/Preview.jpg +0 -0
  505. data/frameworks/sproutcore/themes/standard_theme/Source/ToolbarView Pattern.drawit/QuickLook/Thumbnail.jpg +0 -0
  506. data/frameworks/sproutcore/themes/standard_theme/Source/panel-sprite-x.drawit/Data +0 -0
  507. data/frameworks/sproutcore/themes/standard_theme/Source/panel-sprite-x.drawit/QuickLook/Preview.jpg +0 -0
  508. data/frameworks/sproutcore/themes/standard_theme/Source/panel-sprite-x.drawit/QuickLook/Thumbnail.jpg +0 -0
  509. data/frameworks/sproutcore/themes/standard_theme/Source/panel-sprite-y.drawit/Data +0 -0
  510. data/frameworks/sproutcore/themes/standard_theme/Source/panel-sprite-y.drawit/QuickLook/Preview.jpg +0 -0
  511. data/frameworks/sproutcore/themes/standard_theme/Source/panel-sprite-y.drawit/QuickLook/Thumbnail.jpg +0 -0
  512. data/frameworks/sproutcore/themes/standard_theme/english.lproj/button.css +333 -0
  513. data/frameworks/sproutcore/themes/standard_theme/english.lproj/checkbox.css +90 -0
  514. data/frameworks/sproutcore/themes/standard_theme/english.lproj/collection.css +53 -0
  515. data/frameworks/sproutcore/themes/standard_theme/english.lproj/core.css +47 -0
  516. data/frameworks/sproutcore/themes/standard_theme/english.lproj/disclosure.css +55 -0
  517. data/frameworks/sproutcore/themes/standard_theme/english.lproj/images/sc-theme-sprite.png +0 -0
  518. data/frameworks/sproutcore/themes/standard_theme/english.lproj/images/sc-theme-ysprite.png +0 -0
  519. data/frameworks/sproutcore/themes/standard_theme/english.lproj/images/sc-toolbar-view.png +0 -0
  520. data/frameworks/sproutcore/themes/standard_theme/english.lproj/label.css +37 -0
  521. data/frameworks/sproutcore/themes/standard_theme/english.lproj/pane.css +8 -0
  522. data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/background-fat.jpg +0 -0
  523. data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/background-thin.jpg +0 -0
  524. data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/bottom-edge.png +0 -0
  525. data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/bottom-left-corner.png +0 -0
  526. data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/bottom-right-corner.png +0 -0
  527. data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/left-edge.png +0 -0
  528. data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/overlay.png +0 -0
  529. data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/right-edge.png +0 -0
  530. data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/top-edge.png +0 -0
  531. data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/top-left-corner.png +0 -0
  532. data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/top-right-corner.png +0 -0
  533. data/frameworks/sproutcore/themes/standard_theme/english.lproj/progress.css +23 -0
  534. data/frameworks/sproutcore/themes/standard_theme/english.lproj/radio.css +113 -0
  535. data/frameworks/sproutcore/themes/standard_theme/english.lproj/segmented.css +141 -0
  536. data/frameworks/sproutcore/themes/standard_theme/english.lproj/slider.css +62 -0
  537. data/frameworks/sproutcore/themes/standard_theme/english.lproj/split_view.css +27 -0
  538. data/frameworks/sproutcore/themes/standard_theme/english.lproj/tab.css +12 -0
  539. data/frameworks/sproutcore/themes/standard_theme/english.lproj/text_field.css +13 -0
  540. data/frameworks/sproutcore/themes/standard_theme/english.lproj/toolbar.css +4 -0
  541. data/lib/thor/.autotest +7 -0
  542. data/lib/thor/CHANGELOG.rdoc +52 -0
  543. data/lib/thor/LICENSE +20 -0
  544. data/lib/thor/README.markdown +76 -0
  545. data/lib/thor/Rakefile +6 -0
  546. data/lib/thor/Thorfile +45 -0
  547. data/lib/thor/bin/rake2thor +83 -0
  548. data/lib/thor/bin/thor +7 -0
  549. data/lib/thor/lib/thor/error.rb +3 -0
  550. data/lib/thor/lib/thor/options.rb +267 -0
  551. data/lib/thor/lib/thor/ordered_hash.rb +64 -0
  552. data/lib/thor/lib/thor/runner.rb +305 -0
  553. data/lib/thor/lib/thor/task.rb +83 -0
  554. data/lib/thor/lib/thor/task_hash.rb +22 -0
  555. data/lib/thor/lib/thor/tasks/package.rb +18 -0
  556. data/lib/thor/lib/thor/tasks.rb +77 -0
  557. data/lib/thor/lib/thor/util.rb +75 -0
  558. data/lib/thor/lib/thor.rb +170 -0
  559. data/lib/thor/script/destroy +14 -0
  560. data/lib/thor/script/generate +14 -0
  561. data/lib/thor/spec/fixtures/task.thor +10 -0
  562. data/lib/thor/spec/options_spec.rb +271 -0
  563. data/lib/thor/spec/ordered_hash_spec.rb +84 -0
  564. data/lib/thor/spec/spec.opts +1 -0
  565. data/lib/thor/spec/spec_helper.rb +30 -0
  566. data/lib/thor/spec/task_spec.rb +11 -0
  567. data/lib/thor/spec/tasks_spec.rb +28 -0
  568. data/lib/thor/spec/thor_runner_spec.rb +194 -0
  569. data/lib/thor/spec/thor_spec.rb +206 -0
  570. data/lib/thor/spec/util_spec.rb +99 -0
  571. data/lib/thor/task.thor +15 -0
  572. data/lib/thor/thor.gemspec +29 -0
  573. metadata +3 -4
  574. data/sproutcore.gemspec +0 -47
@@ -0,0 +1,706 @@
1
+ // ==========================================================================
2
+ // Project: SproutCore - JavaScript Application Framework
3
+ // Copyright: ©2006-2009 Sprout Systems, Inc. and contributors.
4
+ // Portions ©2008-2009 Apple, Inc. All rights reserved.
5
+ // License: Licened under MIT license (see license.js)
6
+ // ==========================================================================
7
+
8
+ sc_require('views/collection');
9
+
10
+ /** @class
11
+
12
+ A list view renders vertical lists of items. It is a specialized form of
13
+ collection view that is simpler than the table view, but more refined than
14
+ a generic collection.
15
+
16
+ You can use a list view just like a collection view, except that often you
17
+ also should provide a default rowHeight. Setting this value will allow
18
+ the ListView to optimize its rendering.
19
+
20
+ 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
+ }}}
28
+
29
+ h2. Using ListView with Very Large Data Sets
30
+
31
+ ListView implements incremental rendering, which means it will only render
32
+ HTML for the items that are current visible on the screen. You can use it
33
+ to efficiently render lists with 100K+ items very efficiently.
34
+
35
+ If you need to work with very large lists of items, however, be aware that
36
+ calculate variable rows heights can become very expensive since the list
37
+ view will essentially have to iterate over every item in the collection to
38
+ collect its row height.
39
+
40
+ To work with very large lists, you should consider making your row heights
41
+ uniform. This will allow the list view to efficiently render content
42
+ without worrying about the overall performance.
43
+
44
+ Alternatively, you may want to consider overriding the offsetForRowAtContentIndex() and heightForRowAtContentIndex() methods to
45
+ perform some faster calculations that do not require inspecting every
46
+ item in the collection.
47
+
48
+ Note that row heights and offsets are cached so once they are calculated
49
+ the list view will be able to display very quickly.
50
+
51
+ (Can we also have an 'estimate row heights' property that will simply
52
+ cheat for very long data sets to make rendering more efficient?)
53
+
54
+ @extends SC.CollectionView
55
+ @since SproutCore 1.0
56
+ */
57
+ SC.ListView = SC.CollectionView.extend(
58
+ /** @scope SC.ListView.prototype */ {
59
+
60
+ 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
+
67
+ acceptsFirstResponder: YES,
68
+
69
+ // ..........................................................
70
+ // ROW HEIGHT SUPPORT
71
+ //
72
+
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.
79
+
80
+ The value should be an integer expressed in pixels.
81
+
82
+ You can alternatively set either the rowHeightKey or implement
83
+ the collectionViewHeightForRowAtContentIndex() delegate method.
84
+ */
85
+ rowHeight: 20,
86
+
87
+ /**
88
+ If set, this key will be used to calculate the row height for a given
89
+ content object.
90
+ */
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.
97
+
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.
101
+
102
+ @params {SC.CollectionView} the requesting collection view
103
+ @params {Number} the index into the content
104
+ @returns {Number} rowHeight
105
+ */
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 ;
116
+ },
117
+
118
+ /**
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.
122
+
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
132
+ */
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 ;
140
+
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 ;
155
+ }
156
+ }
157
+ }
158
+
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() ;
167
+ },
168
+
169
+ /**
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.
173
+
174
+ The default version of this property is set to YES unless you set a
175
+ delegate or a rowHeightKey.
176
+ */
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(),
183
+
184
+ /**
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 ;
191
+
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
+ }
238
+ },
239
+
240
+ /**
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.
244
+ */
245
+ heightForRowAtContentIndex: function(contentIndex) {
246
+ if (this.get('hasUniformRowHeights')) {
247
+ return this.get('rowHeight') ;
248
+ } else return this._list_heightForRowAtContentIndex(contentIndex);
249
+ },
250
+
251
+ /** @private
252
+ By-passes the uniform row heights check. Makes offsetForRow... a little
253
+ faster.
254
+ */
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 ;
268
+ },
269
+
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
+ }
398
+
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
+ }
409
+
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
+ }
418
+ }
419
+
420
+ idx = SC.maxRange(range) ;
421
+
422
+ var baseKey = SC.guidFor(this) + '_' ;
423
+ var guids = this._itemViewGuids, guid;
424
+ if (!guids) this._itemViewGuids = guids = {};
425
+
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.
429
+
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() ;
447
+ }
448
+
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
+ }
469
+ }
470
+
471
+ if (SC.DEBUG_PARTIAL_RENDER) console.log('******************************') ;
472
+
473
+ this.set('isDirty', NO);
474
+ this.endPropertyChanges() ;
475
+ if (SC.BENCHMARK_RENDER) SC.Benchmark.end(bkey);
476
+ },
477
+
478
+ // ..........................................................
479
+ // SUBCLASS SUPPORT
480
+ //
481
+
482
+ insertionOrientation: SC.VERTICAL_ORIENTATION,
483
+
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 = {};
495
+
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.
505
+ */
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 } ;
557
+
558
+ // set top & height...
559
+ layout.top = this.offsetForRowAtContentIndex(contentIndex) ;
560
+ layout.height = this.heightForRowAtContentIndex(contentIndex) ;
561
+
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
+ }),
570
+
571
+ // TODO refactor code, remove duplication
572
+ 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 ;
595
+ }
596
+
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
+
605
+ } 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() ;
613
+ }
614
+
615
+ insertionPoint = this._insertionPointView ;
616
+ if (insertionPoint.get('parentView') !== itemView.get('parentView')) {
617
+ itemView.get('parentView').appendChild(insertionPoint) ;
618
+ }
619
+
620
+ var frame = itemView.get('frame') ;
621
+ insertionPoint.adjust({ top: itemView.get('frame').y }) ;
622
+ }
623
+
624
+ },
625
+
626
+ 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 ;
633
+ }
634
+ },
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) ;
674
+
675
+ // console.log('rowHeight is %@'.fmt(rowHeight));
676
+
677
+ idx = cur ;
678
+ }
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;
691
+ }
692
+ } else {
693
+ if (percentage > 0.45) idx++ ;
694
+ }
695
+
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 ;
700
+ }
701
+
702
+ // console.log('[ret, retOp] is [%@, %@]'.fmt(ret, retOp));
703
+ return [idx, retOp] ;
704
+ }
705
+
706
+ });