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,721 @@
1
+ // ========================================================================
2
+ // SproutCore -- JavaScript Application Framework
3
+ // Copyright ©2006-2008, Sprout Systems, Inc. and contributors.
4
+ // Portions copyright ©2008 Apple, Inc. All rights reserved.
5
+ // ========================================================================
6
+
7
+ SC.DRAG_LINK = 0x0004; SC.DRAG_COPY = 0x0001; SC.DRAG_MOVE = 0x0002;
8
+ SC.DRAG_NONE = 0x0000; SC.DRAG_ANY = 0x0007 ; // includes SC.DRAG_REORDER as well
9
+ SC.DRAG_AUTOSCROLL_ZONE_THICKNESS = 20 ;
10
+
11
+ /**
12
+
13
+ @class
14
+
15
+ An instance of this object is created whenever a drag occurs. The instance
16
+ manages the mouse events and coordinating with droppable targets until the
17
+ user releases the mouse button.
18
+
19
+ To initiate a drag, you should call SC.Drag.start() with the options below
20
+ specified in a hash. Pass the ones you need to get the drag you want:
21
+
22
+ - *event: (req)* The mouse event that triggered the drag. This will be used
23
+ to position the element.
24
+
25
+ - *source: (req)* The drag source object that should be consulted during
26
+ the drag operations. This is usually the container view that initiated
27
+ the drag.
28
+
29
+ - *dragView: (req)* This should point to a view that will be used as the
30
+ source image for the drag. The drag operation will clone the DOM elements
31
+ for this view and parent them under the drag pane, which has the class
32
+ name 'sc-ghost-view'.
33
+
34
+ - *ghost: YES | NO* If YES or not passed, then drag view image will show,
35
+ but the source dragView will not be hidden. set to NO to make it appear
36
+ that the dragView itself is being dragged around.
37
+
38
+ - *slideBack: YES | NO* If YES or not specified, then if the drag
39
+ operation is cancelled, the dragView will slide back to its source
40
+ origin.
41
+
42
+ - *origin:* If passed, this will be used as the origin point for the
43
+ ghostView when it slides back. You normally do not need to pass this
44
+ unless the ghost view does not appear in the main UI.
45
+
46
+ - *data:* Optional hash of data types and values. You can use this to pass
47
+ a static set of data instead of providing a dataSource. If you provide
48
+ a dataSource, it will override this.
49
+
50
+ - *dataSource:* Optional object that will provide the data for the drag to
51
+ be consumed by the drop target. If you do not pass this parameter or the
52
+ data hash, then the source object will be used if it implements the
53
+ SC.DragDataSource protocol.
54
+
55
+ - *anchorView:* if you pass this optional view, then the drag will only be
56
+ allowed to happen within this view. The ghostView will actually be added
57
+ as a child of this view during the drag. Normally the anchorView is the
58
+ window.
59
+
60
+ @extends SC.Object
61
+ */
62
+ SC.Drag = SC.Object.extend(
63
+ /** @scope SC.Drag.prototype */ {
64
+
65
+ /** [RO] The source object used to coordinate this drag. */
66
+ source: null,
67
+
68
+ /** The actual image being dragged around the screen.
69
+
70
+ This is created automatically from the dragView.
71
+ */
72
+ ghostView: null,
73
+
74
+ /**
75
+ The view that was used as the source of the ghostView.
76
+
77
+ The drag view is not moved from its original location during a drag.
78
+ Instead, the DOM content of the view is cloned and managed by the
79
+ ghostView. If you want to visually indicate that the view is being
80
+ movied, you may want to temporarily hide it during the drag.
81
+ */
82
+ dragView: null,
83
+
84
+ /**
85
+ If YES, the dragView is automatically hidden while dragging around the ghost.
86
+ */
87
+ ghost: YES,
88
+
89
+ /**
90
+ If YES, then the ghostView will slide back to its original location if drag is cancelled.
91
+ */
92
+ slideBack: YES,
93
+
94
+ /** The original mouse down event. */
95
+ mouseDownEvent: null,
96
+
97
+ /**
98
+ The origin to slide back to in the coordinate of the dragView's offsetParent.
99
+ */
100
+ ghostOffset: { x: 0, y: 0 },
101
+
102
+ /**
103
+ The current location of the mouse pointer in window coordinates.
104
+
105
+ This is updated as long as the mouse button is pressed.
106
+ */
107
+ location: {},
108
+
109
+ // ..........................................
110
+ // DRAG DATA
111
+ //
112
+
113
+ /**
114
+ Data types supported by this drag operation.
115
+
116
+ Returns an array of data types supported by the drag source. This may
117
+ be generated dynamically depending on the data source.
118
+
119
+ If you are implementing a drag source, you will need to provide these data
120
+ types so that drop targets can detect if they can accept your drag data.
121
+
122
+ If you are implementing a drop target, you should inspect this property
123
+ on your dragEntered() and prepareForDragOperation() methods to determine
124
+ if you can handle any of the data types offered up by the drag source.
125
+
126
+ @field {Array} available data types
127
+ */
128
+ dataTypes: function() {
129
+ // first try to use the data source.
130
+ if (this.dataSource) return this.dataSource.get('dragDataTypes') || [] ;
131
+
132
+ // if that fails, get the keys from the data hash.
133
+ var hash = this.data ;
134
+ if (hash) {
135
+ var ret = [];
136
+ for (var key in hash) {
137
+ if (hash.hasOwnProperty(key)) ret.push(key) ;
138
+ }
139
+ return ret ;
140
+ }
141
+
142
+ // if that fails, then check to see if the source object is a dataSource.
143
+ var source = this.get('source') ;
144
+ if (source && source.dragDataTypes) return source.get('dragDataTypes') || [] ;
145
+
146
+ // no data types found. :(
147
+ return [] ;
148
+ }.property().cacheable(),
149
+
150
+ /**
151
+ Checks for a named data type in the drag.
152
+
153
+ @param dataType {String} the data type
154
+ @returns {Boolean} YES if data type is present in dataTypes array.
155
+ */
156
+ hasDataType: function(dataType) {
157
+ return (this.get('dataTypes').indexOf(dataType) >= 0) ;
158
+ },
159
+
160
+ /**
161
+ Retrieve the data for the specified dataType from the drag source.
162
+
163
+ Drop targets can use this method during their performDragOperation() method
164
+ to retrieve the actual data provided by the drag data source. This data
165
+ may be generated dynamically depending on the data source.
166
+
167
+ @param {Object} dataType data type you want to retrieve. Should be one of the values returned in the dataTypes property
168
+
169
+ @returns {Object} The generated data.
170
+ */
171
+ dataForType: function(dataType) {
172
+ // first try to use the data Source.
173
+ if (this.dataSource) {
174
+ return this.dataSource.dragDataForType(this, dataType) ;
175
+
176
+ // then try to use the data hash.
177
+ } else if (this.data) {
178
+ return this.data[dataType];
179
+
180
+ // if all else fails, check to see if the source object is a data source.
181
+ } else {
182
+ var source = this.get('source') ;
183
+ if (source && SC.typeOf(source.dragDataForType) == SC.T_FUNCTION) {
184
+ return source.dragDataForType(this, dataType) ;
185
+
186
+ // no data source found. :(
187
+ } else return null ;
188
+ }
189
+ },
190
+
191
+ /**
192
+ Optional object used to provide the data for the drag.
193
+
194
+ Drag source can designate a dataSource object to generate the data for
195
+ a drag dynamically. The data source can and often is the drag source
196
+ object itself.
197
+
198
+ Data Source objects must comply with the SC.DragDataSource interface. If
199
+ you do not want to implement this interface, you can provide the data
200
+ directly with the data property.
201
+
202
+ If you are implementing a drop target, use the dataTypes property and
203
+ dataForTypes() method to access data instead of working directly with these
204
+ properties.
205
+
206
+ @type {Object}
207
+ */
208
+ dataSource: null,
209
+
210
+ /**
211
+ Optional hash of data. Used if no dataSource was provided.
212
+
213
+ Drag sources can provide a hash of data when the drag begins instead of
214
+ specifying an actual dataSource. The data is stored in this property.
215
+ If you are implementing a drop target, use the dataTypes property and
216
+ dataForTypes() method to access data instead of working directly with these
217
+ properties.
218
+
219
+ @type {Object}
220
+ */
221
+ data: null,
222
+
223
+ // required by autoscroll
224
+ _dragInProgress: YES,
225
+
226
+ // this will actually start the drag process.
227
+ startDrag: function() {
228
+ // create the ghost view
229
+ this._createGhostView() ;
230
+
231
+ // compute the ghost offset from the original mouse location
232
+ var dragView = this.dragView ;
233
+ var origin = dragView.convertFrameToView(dragView.get('frame'), null) ;
234
+ var pointer = { x: this.event.pageX, y: this.event.pageY } ;
235
+ this.ghostOffset = { x: (pointer.x-origin.x), y: (pointer.y-origin.y) } ;
236
+
237
+ // position the ghost view
238
+ this._positionGhostView(this.event) ;
239
+
240
+ // notify root responder that a drag is in process
241
+ this._ghostView.rootResponder.dragDidStart(this);
242
+
243
+ var source = this.source ;
244
+ if (source && source.dragDidBegin) source.dragDidBegin(this, pointer) ;
245
+
246
+ // let all drop targets know that a drag has started
247
+ var ary = this._dropTargets() ;
248
+ for (var idx=0, len=ary.length; idx<len; idx++) {
249
+ ary[idx].tryToPerform('dragStarted', this.event) ;
250
+ }
251
+ },
252
+
253
+ /**
254
+ @private
255
+
256
+ This method is called repeatedly during a mouse drag. It updates the
257
+ position of the ghost image, then it looks for a current drop target and
258
+ notifies it.
259
+ */
260
+ mouseDragged: function(evt) {
261
+ var scrolled = this._autoscroll(evt) ;
262
+ var loc = this.get('location') ;
263
+ if (!scrolled && (evt.pageX == loc.x) && (evt.pageY == loc.y)) {
264
+ return ; // quickly ignore duplicate calls
265
+ }
266
+
267
+ // cache the current location to avoid processing duplicate mouseDragged calls
268
+ this.set('location', { x: evt.pageX, y: evt.pageY }) ;
269
+
270
+ // reposition the ghostView
271
+ this._positionGhostView(evt) ;
272
+
273
+ // STEP 1: Determine the deepest drop target that allows an operation.
274
+ // if the drop target selected the last time this method was called differs
275
+ // from the deepest target found, then go up the chain until we either hit the
276
+ // last one or find one that will allow a drag operation
277
+ var source = this.source ;
278
+ var last = this._lastTarget ;
279
+ var target = this._findDropTarget(evt) ; // deepest drop target
280
+ var op = SC.DRAG_NONE ;
281
+
282
+ while (target && (target != last) && (op == SC.DRAG_NONE)) {
283
+ // make sure the drag source will permit a drop operation on the named target
284
+ if (target && source && source.dragSourceOperationMaskFor) {
285
+ op = source.dragSourceOperationMaskFor(this, target) ;
286
+ } else op = SC.DRAG_ANY ; // assume drops are allowed
287
+
288
+ this.sourceDropOperations = op ;
289
+
290
+ // now, let's see if the target will accept the drag
291
+ if ((op != SC.DRAG_NONE) && target && target.computeDragOperations) {
292
+ op = op & target.computeDragOperations(this, evt) ;
293
+ } else op = SC.DRAG_NONE ; // assume drops AREN'T allowed
294
+
295
+ this.dropOperations = op ;
296
+
297
+ // if DRAG_NONE, then look for the next parent that is a drop zone
298
+ if (op == SC.DRAG_NONE) target = this._findNextDropTarget(target) ;
299
+ }
300
+
301
+ // STEP 2: Refocus the drop target if needed
302
+ if (target != last) {
303
+ if (last && last.dragExited) last.dragExited(this, evt) ;
304
+
305
+ if (target) {
306
+ if (target.dragEntered) target.dragEntered(this, evt) ;
307
+ if (target.dragUpdated) target.dragUpdated(this, evt) ;
308
+ }
309
+
310
+ this._lastTarget = target ;
311
+ } else {
312
+ if (target && target.dragUpdated) target.dragUpdated(this, evt) ;
313
+ }
314
+
315
+ // notify source that the drag moved
316
+ if (source && source.dragDidMove) source.dragDidMove(this, loc) ;
317
+ },
318
+
319
+ /**
320
+ @private
321
+
322
+ Called when the mouse is released. Performs any necessary cleanup and
323
+ executes the drop target protocol to try to complete the drag operation.
324
+ */
325
+ mouseUp: function(evt) {
326
+ var loc = { x: evt.pageX, y: evt.pageY } ;
327
+ var target = this._lastTarget, op = this.dropOperations;
328
+
329
+ // try to have the drop target perform the drop...
330
+ try {
331
+ if (target && target.acceptDragOperation && target.acceptDragOperation(this, op)) {
332
+ op = (target.performDragOperation) ? target.performDragOperation(this, op) : SC.DRAG_NONE ;
333
+ } else {
334
+ op = SC.DRAG_NONE;
335
+ }
336
+ } catch (e) {
337
+ console.log('Exception in SC.Drag.mouseUp(acceptDragOperation|performDragOperation): %@'.fmt(e)) ;
338
+ }
339
+
340
+ try {
341
+ // notify last drop target that the drag exited, to allow it to cleanup
342
+ if (target && target.dragExited) target.dragExited(this, evt) ;
343
+ } catch (e) {
344
+ onsole.log('Exception in SC.Drag.mouseUp(target.dragExited): %@'.fmt(e)) ;
345
+ }
346
+
347
+ // notify all drop targets that the drag ended
348
+ var ary = this._dropTargets() ;
349
+ for (var idx=0, len=ary.length; idx<len; idx++) {
350
+ try {
351
+ ary[idx].tryToPerform('dragEnded', evt) ;
352
+ } catch (e) {
353
+ console.log('Exception in SC.Drag.mouseUp(dragEnded on %@): %@'.fmt(ary[idx], e)) ;
354
+ }
355
+ }
356
+
357
+ // destroy the ghost view
358
+ this._destroyGhostView() ;
359
+
360
+ // notify the source that everything has completed
361
+ var source = this.source ;
362
+ if (source && source.dragDidEnd) source.dragDidEnd(this, loc, op) ;
363
+
364
+ this._lastTarget = null ;
365
+ this._dragInProgress = NO ; // required by autoscroll, which is invoked by a timer
366
+ },
367
+
368
+ // ..........................................
369
+ // PRIVATE PROPERTIES AND METHODS
370
+ //
371
+
372
+ _ghostView: null,
373
+
374
+ // this will create the ghostView and add it to the document.
375
+ _createGhostView: function() {
376
+ var view = this._ghostView = SC.Pane.create({ owner: this }) ;
377
+ view.$().addClass('sc-ghost-view').append(this.dragView.rootElement.cloneNode(true)) ;
378
+ // var f = this.dragView.get('frame') ;
379
+ // console.log('dragView %@ frame is { top: %@, left: %@, width: %@, height: %@ }'.fmt(this.dragView, f.y, f.x, f.width, f.height)) ;
380
+ view.adjust(this.dragView.get('frame')) ;
381
+ view.append() ; // add to window
382
+ },
383
+
384
+ // positions the ghost view underneath the mouse with the initial offset
385
+ // recorded by when the drag started.
386
+ _positionGhostView: function(evt) {
387
+ var loc = { x: evt.pageX, y: evt.pageY } ;
388
+ loc.x -= this.ghostOffset.x ;
389
+ loc.y -= this.ghostOffset.y ;
390
+ this._ghostView.adjust({ top: loc.y, left: loc.x }) ;
391
+ },
392
+
393
+ _destroyGhostView: function() {
394
+ if (this._ghostView) {
395
+ this._ghostView.remove() ;
396
+ this._ghostView = null ; // this will allow the GC to collect it.
397
+ }
398
+ },
399
+
400
+ // Return an array of drop targets, sorted with any nested drop targets
401
+ // at the top of the array. The first time this method is called during
402
+ // a drag, it will reconstruct this array using the current set of
403
+ // drop targets. Afterwards it uses the cached set until the drop
404
+ // completes.
405
+ //
406
+ // This means that if you change the view hierarchy of your drop targets
407
+ // during a drag, it will probably be wrong.
408
+ _dropTargets: function() {
409
+ if (this._cachedDropTargets) return this._cachedDropTargets ;
410
+
411
+ // build array of drop targets
412
+ var ret = [] ;
413
+ var hash = SC.Drag._dropTargets ;
414
+ for (var key in hash) {
415
+ if (hash.hasOwnProperty(key)) ret.push(hash[key]) ;
416
+ }
417
+
418
+ // views must be sorted so that drop targets with the deepest nesting
419
+ // levels appear first in the array. The getDepthFor().
420
+ var depth = {} ;
421
+ var dropTargets = SC.Drag._dropTargets ;
422
+ var getDepthFor = function(x) {
423
+ if (!x) return 0 ;
424
+ var guid = SC.guidFor(x);
425
+ var ret = depth[guid];
426
+ if (!ret) {
427
+ ret = 1 ;
428
+ while (x = x.get('parentView')) {
429
+ if (dropTargets[SC.guidFor(x)] !== undefined) ret++ ;
430
+ }
431
+ depth[guid] = ret ;
432
+ }
433
+ return ret ;
434
+ } ;
435
+
436
+ // sort array of drop targets
437
+ ret.sort(function(a,b) {
438
+ if (a===b) return 0;
439
+ a = getDepthFor(a) ;
440
+ b = getDepthFor(b) ;
441
+ return (a > b) ? -1 : 1 ;
442
+ }) ;
443
+
444
+ this._cachedDropTargets = ret ;
445
+ return ret ;
446
+ },
447
+
448
+ // This will search through the drop targets, looking for one in the target area.
449
+ _findDropTarget: function(evt) {
450
+ var loc = { x: evt.pageX, y: evt.pageY } ;
451
+
452
+ var target, frame ;
453
+ var ary = this._dropTargets() ;
454
+ for (var idx=0, len=ary.length; idx<len; idx++) {
455
+ target = ary[idx] ;
456
+
457
+ // FIXME if (!target.get('isVisibleInWindow')) continue ;
458
+
459
+ // get clippingFrame, converted to the pane.
460
+ frame = target.convertFrameToView(target.get('clippingFrame'), null) ;
461
+
462
+ // check to see if loc is inside. If so, then make this the drop target unless
463
+ // there is a drop target and the current one is not deeper.
464
+ if (SC.pointInRect(loc, frame)) return target;
465
+ }
466
+ return null ;
467
+ },
468
+
469
+ // Search the parent nodes of the target to find another view matching the
470
+ // drop target. Returns null if no matching target is found.
471
+ _findNextDropTarget: function(target) {
472
+ var dropTargets = SC.Drag._dropTargets ;
473
+ while (target = target.get('parentView')) {
474
+ if (dropTargets[SC.guidFor(target)]) return target ;
475
+ }
476
+ return null ;
477
+ },
478
+
479
+ // ............................................
480
+ // AUTOSCROLLING
481
+ //
482
+
483
+ // Performs auto-scrolling for the drag. This will only do anything if
484
+ // the user keeps the mouse within a few pixels of one location for a little
485
+ // while.
486
+ //
487
+ // Returns true if a scroll was performed
488
+ _autoscroll: function(evt) {
489
+ return NO ; // TODO FIXME
490
+
491
+ // If drag has ended, exit
492
+ if (!this._dragInProgress) return NO;
493
+
494
+ // STEP 1: Find the first view that we can actually scroll. This view
495
+ // must be:
496
+ // - scrollable
497
+ // - the mouse pointer must be within a scrolling hot zone
498
+ // - there must be room left to scroll in that direction.
499
+
500
+ // NOTE: an event is passed only when called from mouseDragged
501
+ var loc = (evt) ? { x: evt.pageX, y: evt.pageY } : this.get('location') ;
502
+ var view = this._findScrollableView(loc) ;
503
+
504
+ // these will become either 1 or -1 to indicate scroll direction or 0 for no scroll.
505
+ var verticalScroll, horizontalScroll ;
506
+ var min, max, edge ;
507
+ var scrollableView = null;
508
+
509
+ while (view && !scrollableView) {
510
+
511
+ // quick check...can we scroll this view right now?
512
+ verticalScroll = view.get('hasVerticalScroller') ? 1 : 0;
513
+ horizontalScroll = view.get('hasHorizontalScroller') ? 1 : 0;
514
+
515
+ // at least one direction might be scrollable. Collect some extra
516
+ // info to investigate further.
517
+ if ((verticalScroll != 0) || (horizontalScroll != 0)) {
518
+ var f = view.convertFrameToView(view.get('frame'), null) ;
519
+ var innerSize = view.get('innerFrame') ;
520
+ var scrollFrame = view.get('scrollFrame') ;
521
+ }
522
+
523
+ if (verticalScroll != 0) {
524
+
525
+ // bottom hotzone?
526
+ max = SC.maxY(f); min = max - SC.DRAG_AUTOSCROLL_ZONE_THICKNESS ;
527
+ edge = SC.maxY(scrollFrame) ;
528
+
529
+ if ((edge >= innerSize.height) && (loc.y >= min) && (loc.y <= max)) {
530
+ verticalScroll = 1 ;
531
+
532
+ // no...how about top hotzone?
533
+ } else {
534
+ min = SC.minY(f); max = min + SC.DRAG_AUTOSCROLL_ZONE_THICKNESS ;
535
+ edge = SC.minY(scrollFrame) ;
536
+ if ((edge <= innerSize.height) && (loc.y >= min) && (loc.y <= max)) {
537
+ verticalScroll = -1 ;
538
+
539
+ // no, ok don't scroll vertical
540
+ } else verticalScroll = 0 ;
541
+ }
542
+ }
543
+
544
+ if (horizontalScroll != 0) {
545
+ // right hotzone?
546
+ max = SC.maxX(f); min = max - SC.DRAG_AUTOSCROLL_ZONE_THICKNESS ;
547
+ edge = SC.maxX(scrollFrame) ;
548
+ if ((edge >= innerSize.width) && (loc.x >= min) && (loc.x <= max)) {
549
+ horizontalScroll = 1 ;
550
+
551
+ // no...how about left hotzone?
552
+ } else {
553
+ min = SC.minY(f); max = min + SC.DRAG_AUTOSCROLL_ZONE_THICKNESS ;
554
+ edge = SC.minY(scrollFrame) ;
555
+ if ((edge <= innerSize.width) && (loc.x >= min) && (loc.x <= max)) {
556
+ horizontalScroll = -1 ;
557
+
558
+ // no, ok don't scroll vertical
559
+ } else horizontalScroll = 0 ;
560
+ }
561
+ }
562
+
563
+ // if we can scroll, then set this.
564
+ if ((verticalScroll != 0) || (horizontalScroll != 0)) {
565
+ scrollableView = view ;
566
+ } else view = this._findNextScrollableView(view) ;
567
+ }
568
+
569
+ // STEP 2: Only scroll if the user remains within the hot-zone for a period of
570
+ // time
571
+ if (scrollableView && (this._lastScrollableView == scrollableView)) {
572
+ if ((Date.now() - this._hotzoneStartTime) > 100) {
573
+ this._horizontalScrollAmount *= 1.05 ;
574
+ this._verticalScrollAmount *= 1.05 ;
575
+ }
576
+
577
+ // otherwise, reset everything and disallow scroll
578
+ } else {
579
+ this._lastScrollableView = scrollableView ;
580
+ this._horizontalScrollAmount = 15 ;
581
+ this._verticalScrollAmount = 15 ;
582
+ this._hotzoneStartTime = (scrollableView) ? Date.now() : null ;
583
+
584
+ horizontalScroll = verticalScroll = 0 ;
585
+ }
586
+
587
+ // STEP 3: Scroll!
588
+ if (scrollableView && ((horizontalScroll != 0) || (verticalScroll != 0))) {
589
+ var scroll = {
590
+ x: horizontalScroll * this._horizontalScrollAmount,
591
+ y: verticalScroll * this._verticalScrollAmount
592
+ } ;
593
+
594
+ scrollableView.scrollBy(scroll) ;
595
+ }
596
+
597
+ // If a scrollable view was found, then reschedule
598
+ if (scrollableView) {
599
+ this.invokeLater('_autoscroll', 100, null);
600
+ return YES ;
601
+ } else return NO ;
602
+ },
603
+
604
+ // Returns an array of scrollable views, sorted with nested scrollable
605
+ // views at the top of the array. The first time this method is called
606
+ // during a drag, it will reconstrut this array using the current state of
607
+ // scrollable views. Afterwards it uses the cached set until the drop
608
+ // completes.
609
+ _scrollableViews: function() {
610
+ if (this._cachedScrollableView) return this._cachedScrollableView ;
611
+
612
+ // build array of scrollable views
613
+ var ret = [] ;
614
+ var hash = SC.Drag._scrollableViews ;
615
+ for (var key in hash) {
616
+ if (hash.hasOwnProperty(key)) ret.push(hash[key]) ;
617
+ }
618
+
619
+ // now resort. This custom function will sort nested scrollable views
620
+ // at the start of the list.
621
+ ret = ret.sort(function(a,b) {
622
+ var view = a;
623
+ while (view = view.get('parentView')) {
624
+ if (b == view) return -1 ;
625
+ }
626
+ return 1;
627
+ }) ;
628
+
629
+ this._cachedScrollableView = ret ;
630
+ return ret ;
631
+ },
632
+
633
+ // This will search through the scrollable views, looking for one in the
634
+ // target area.
635
+ _findScrollableView: function(loc) {
636
+ var target, frame ;
637
+ var ary = this._scrollableViews() ;
638
+ for (var idx=0, len=ary.length; idx<len; idx++) {
639
+ target = ary[idx] ;
640
+
641
+ // FIXME if (!target.get('isVisibleInWindow')) continue ;
642
+
643
+ // get clippingFrame, converted to the pane
644
+ frame = target.convertFrameToView(target.get('clippingFrame'), null) ;
645
+
646
+ // check to see if loc is inside
647
+ if (SC.pointInRect(loc, frame)) return target;
648
+ }
649
+ return null ;
650
+ },
651
+
652
+ // Search the parent nodes of the target to find another scrollable view.
653
+ // return null if none is found.
654
+ _findNextScrollableView: function(view) {
655
+ var scrollableViews = SC.Drag._scrollableViews ;
656
+ while (view = view.get('parentView')) {
657
+ if (scrollableViews[SC.guidFor(view)]) return view ;
658
+ }
659
+ return null ;
660
+ }
661
+
662
+ });
663
+
664
+ SC.Drag.mixin(
665
+ /** @scope SC.Drag */ {
666
+
667
+ /**
668
+ This is the method you use to initiate a new drag. See class documentation
669
+ for more info on the options taken by this method.
670
+
671
+ @params {Hash} ops a hash of options. See documentation above.
672
+ */
673
+ start: function(ops) {
674
+ var ret = this.create(ops) ;
675
+ ret.startDrag() ;
676
+ return ret ;
677
+ },
678
+
679
+ _dropTargets: {},
680
+ _scrollableViews: {},
681
+
682
+ /**
683
+ Register the view object as a drop target.
684
+
685
+ This method is called automatically whenever a view is created with the
686
+ isDropTarget property set to YES. You generally will not need to call it
687
+ yourself.
688
+ */
689
+ addDropTarget: function(target) {
690
+ // console.log('addDropTarget called on %@ with %@'.fmt(this, target));
691
+ this._dropTargets[SC.guidFor(target)] = target ;
692
+ },
693
+
694
+ /**
695
+ Unregister the view object as a drop target.
696
+
697
+ This method is called automatically whenever a view is removed from the
698
+ hierarchy. You generally will not need to call it yourself.
699
+ */
700
+ removeDropTarget: function(target) {
701
+ // console.log('removeDropTarget called on %@ with %@'.fmt(this, target));
702
+ delete this._dropTargets[SC.guidFor(target)] ;
703
+ },
704
+
705
+ /**
706
+ Register the view object as a scrollable view. These views will auto-scroll
707
+ during a drag.
708
+ */
709
+ addScrollableView: function(target) {
710
+ this._scrollableViews[SC.guidFor(target)] = target ;
711
+ },
712
+
713
+ /**
714
+ Remove the view object as a scrollable view. These views will auto-scroll
715
+ during a drag.
716
+ */
717
+ removeScrollableView: function(target) {
718
+ delete this._scrollableViews[SC.guidFor(target)] ;
719
+ }
720
+
721
+ });