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,865 @@
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('system/builder');
9
+
10
+ /**
11
+ @namespace
12
+
13
+ A RenderContext is a builder that can be used to generate HTML for views or
14
+ to update an existing element. Rather than making changes to an element
15
+ directly, you use a RenderContext to queue up changes to the element,
16
+ finally applying those changes or rendering the new element when you are
17
+ finished.
18
+
19
+ You will not usually create a render context yourself but you will be passed
20
+ a render context as the first parameter of your render() method on custom
21
+ views.
22
+
23
+ Render contexts are essentially arrays of strings. You can add a string to
24
+ the context by calling push(). You can retrieve the entire array as a
25
+ single string using join(). This is basically the way the context is used
26
+ for views. You are passed a render context and expected to add strings of
27
+ HTML to the context like a normal array. Later, the context will be joined
28
+ into a single string and converted into real HTML for display on screen.
29
+
30
+ In addition to the core push and join methods, the render context also
31
+ supports some extra methods that make it easy to build tags.
32
+
33
+ context.begin() <-- begins a new tag context
34
+ context.end() <-- ends the tag context...
35
+ */
36
+ SC.RenderContext = SC.Builder.create(/** SC.RenderContext.fn */ {
37
+
38
+ /**
39
+ When you create a context you should pass either a tag name or an element
40
+ that should be used as the basis for building the context. If you pass
41
+ an element, then the element will be inspected for class names, styles
42
+ and other attributes. You can also call update() or replace() to
43
+ modify the element with you context contents.
44
+
45
+ If you do not pass any parameters, then we assume the tag name is 'div'.
46
+
47
+ A second parameter, parentContext, is used internally for chaining. You
48
+ should never pass a second argument.
49
+
50
+ @param {String|DOMElement} tagNameOrElement
51
+ @returns {SC.RenderContext} receiver
52
+ */
53
+ init: function(tagNameOrElement, prevContext) {
54
+ if (tagNameOrElement === undefined) tagNameOrElement = 'div';
55
+
56
+ // if a prevContext was passed, setup with that first...
57
+ if (prevContext) {
58
+ this.prevObject = prevContext ;
59
+ this.strings = prevContext.strings ;
60
+ this.offset = prevContext.length + prevContext.offset ;
61
+ }
62
+
63
+ if (!this.strings) this.strings = [] ;
64
+
65
+ // if tagName is string, just setup for rendering new tagName
66
+ this.needsContent = YES ;
67
+ if (SC.typeOf(tagNameOrElement) === SC.T_STRING) {
68
+ this._tagName = tagNameOrElement.toLowerCase();
69
+ this._needsTag = YES ; // used to determine if end() needs to wrap tag
70
+
71
+ // increase length of all contexts to leave space for opening tag
72
+ var c = this;
73
+ while(c) { c.length++; c = c.prevObject; }
74
+
75
+ this.strings.push(null);
76
+ if (this._tagName === 'script') this._selfClosing = NO; // special case
77
+ if (this._tagName === 'div') this._selfClosing = NO; // illegal in html 4.01
78
+ } else {
79
+ this._elem = tagNameOrElement ;
80
+ this._needsTag = NO ;
81
+ this.length = 0 ;
82
+ this.needsContent = NO ;
83
+ }
84
+
85
+ return this ;
86
+ },
87
+
88
+ // ..........................................................
89
+ // PROPERTIES
90
+ //
91
+
92
+ // NOTE: We store this as an actual array of strings so that browsers that
93
+ // support dense arrays will use them.
94
+ /**
95
+ The current working array of strings.
96
+
97
+ @property {Array}
98
+ */
99
+ strings: null,
100
+
101
+ /**
102
+ this initial offset into the strings array where this context instance
103
+ has its opening tag.
104
+
105
+ @property {Number}
106
+ */
107
+ offset: 0,
108
+
109
+ /**
110
+ the current number of strings owned by the context, including the opening
111
+ tag.
112
+
113
+ @property {Number}
114
+ */
115
+ length: 0,
116
+
117
+ /**
118
+ YES if the update is partial; existing DOM nodes should be retained.
119
+ */
120
+ partialUpdate: NO,
121
+
122
+ /**
123
+ YES if the context needs its content filled in, not just its outer
124
+ attributes edited. This will be set to YES anytime you push strings into
125
+ the context or if you don't create it with an element to start with.
126
+ */
127
+ needsContent: NO,
128
+
129
+ // ..........................................................
130
+ // CORE STRING API
131
+ //
132
+
133
+ /**
134
+ Returns the string at the designated index. If you do not pass anything
135
+ returns the string array. This index is an offset from the start of the
136
+ strings owned by this context.
137
+
138
+ @param {Number} idx the index
139
+ @returns {String|Array}
140
+ */
141
+ get: function(idx) {
142
+ var strings = this.strings || [];
143
+ return (idx === undefined) ? strings.slice(this.offset, this.length) : strings[idx+this.offset];
144
+ },
145
+
146
+ /**
147
+ Adds a string to the render context for later joining. Note that you can
148
+ pass multiple arguments to this method and each item will be pushed.
149
+
150
+ @param {String} line the liene to add to the string.
151
+ @returns {SC.RenderContext} receiver
152
+ */
153
+ push: function(line) {
154
+ var strings = this.strings, len = arguments.length;
155
+ if (!strings) this.strings = strings = []; // create array lazily
156
+
157
+ if (len > 1) {
158
+ strings.push.apply(strings, arguments) ;
159
+ } else strings.push(line);
160
+
161
+ // adjust string length for context and all parents...
162
+ var c = this;
163
+ while(c) { c.length += len; c = c.prevObject; }
164
+
165
+ this.needsContent = YES;
166
+
167
+ return this;
168
+ },
169
+
170
+ /**
171
+ Pushes the passed string onto the array, but first escapes the string
172
+ to ensure that no user-entered HTML is processed as HTML.
173
+
174
+ @param {String} line one or mroe lines of text to add
175
+ @returns {SC.RenderContext} receiver
176
+ */
177
+ text: function(line) {
178
+ var len = arguments.length, idx=0;
179
+ for(idx=0;idx<len;idx++) {
180
+ this.push(SC.RenderContext.escapeHTML(arguments[idx]));
181
+ }
182
+ return this ;
183
+ },
184
+
185
+ /**
186
+ Joins the strings together, returning the result. But first, this will
187
+ end any open tags.
188
+
189
+ @param {String} joinChar optional string to use in joins. def empty string
190
+ @returns {String} joined string
191
+ */
192
+ join: function(joinChar) {
193
+
194
+ // generate tag if needed...
195
+ if (this._needsTag) this.end();
196
+
197
+ var strings = this.strings;
198
+ return strings ? strings.join(joinChar || '') : '' ;
199
+ },
200
+
201
+ // ..........................................................
202
+ // GENERATING
203
+ //
204
+
205
+ /**
206
+ Begins a new render context based on the passed tagName or element.
207
+ Generate said context using end().
208
+
209
+ @returns {SC.RenderContext} new context
210
+ */
211
+ begin: function(tagNameOrElement) {
212
+ // console.log('%@.begin(%@) called'.fmt(this, tagNameOrElement));
213
+ return SC.RenderContext(tagNameOrElement, this);
214
+ },
215
+
216
+ /**
217
+ If the current context targets an element, this method returns the
218
+ element. If the context does not target an element, this method will
219
+ render the context into an offscreen element and return it.
220
+
221
+ @returns {DOMElement} the element
222
+ */
223
+ element: function() {
224
+ if (this._elem) return this._elem;
225
+
226
+ // create factory div if needed
227
+ var ret ;
228
+ if (!SC.RenderContext.factory) {
229
+ SC.RenderContext.factory = document.createElement('div');
230
+ }
231
+
232
+ // console.log('%@#element() called'.fmt(this));
233
+ // console.log(this.join());
234
+
235
+ SC.RenderContext.factory.innerHTML = this.join();
236
+ return SC.RenderContext.factory.firstChild ;
237
+ },
238
+
239
+ /**
240
+ Removes an element with the passed id in the currently managed element.
241
+ */
242
+ remove: function(elementId) {
243
+ // console.log('remove('+elementId+')');
244
+ if (!elementId) return ;
245
+
246
+ var el, elem = this._elem ;
247
+ if (!elem || !elem.removeChild) return ;
248
+
249
+ el = document.getElementById(elementId) ;
250
+ if (el) {
251
+ el = elem.removeChild(el) ;
252
+ el = null;
253
+ }
254
+ },
255
+
256
+ /**
257
+ If an element was set on this context when it was created, this method
258
+ will actually apply any changes to the element itself. If you have not
259
+ written any inner html into the context, then the innerHTML of the
260
+ element will not be changed, otherwise it will be replaced with the new
261
+ innerHTML.
262
+
263
+ Also, any attributes, id, classNames or styles you've set will be
264
+ updated as well. This also ends the editing context session and cleans
265
+ up.
266
+
267
+ @returns {SC.RenderContext} previous context or null if top
268
+ */
269
+ update: function() {
270
+ var elem = this._elem, key, value, styles, elem2, n, n2;
271
+
272
+ if (!elem) {
273
+ // throw "Cannot update context because there is no source element";
274
+ return ;
275
+ }
276
+
277
+ // console.log('%@#update() called'.fmt(this));
278
+ // if (this.length>0) console.log(this.join());
279
+ // else console.log('<no length>');
280
+
281
+ // replace innerHTML
282
+ if (this.length>0) {
283
+ if (this.partialUpdate) {
284
+ elem2 = elem.cloneNode(false);
285
+ elem2.innerHTML = this.join();
286
+ n = elem2.firstChild ;
287
+ n2 = n.nextSibling ;
288
+ while (n) {
289
+ elem.appendChild(n) ;
290
+ n = n2 ;
291
+ n2 = n ? n.nextSibling : null ;
292
+ }
293
+ elem2 = null ;
294
+ } else {
295
+ elem.innerHTML = this.join();
296
+ }
297
+ }
298
+
299
+ // note: each of the items below only apply if the private variable has
300
+ // been set to something other than null (indicating they were used at
301
+ // some point during the build)
302
+
303
+ // if we have attrs, apply them
304
+ if (this._attrsDidChange && (value = this._attrs)) {
305
+ for(key in value) {
306
+ if (!value.hasOwnProperty(key)) continue;
307
+ if (value[key] === null) { // remove empty attrs
308
+ elem.removeAttribute(key);
309
+ } else {
310
+ elem.setAttribute(key, value[key]);
311
+ }
312
+ }
313
+ }
314
+
315
+ // class="foo bar"
316
+ if (this._classNamesDidChange && (value = this._classNames)) {
317
+ elem.setAttribute('class', value.join(' '));
318
+ }
319
+
320
+ // id="foo"
321
+ if (this._idDidChange && (value = this._id)) {
322
+ elem.setAttribute('id', value);
323
+ }
324
+
325
+ // style="a:b; c:d;"
326
+ if (this._stylesDidChange && (styles = this._styles)) {
327
+ var pair = this._STYLE_PAIR_ARRAY, joined = this._JOIN_ARRAY;
328
+ for(key in styles) {
329
+ if (!styles.hasOwnProperty(key)) continue ;
330
+ value = styles[key];
331
+ if (value === null) continue; // skip empty styles
332
+ if (typeof value === SC.T_NUMBER) value = value.toString() + "px";
333
+ pair[0] = key.dasherize(); pair[1] = value;
334
+ joined.push(pair.join(': '));
335
+ }
336
+
337
+ elem.setAttribute('style', joined.join('; '));
338
+ joined.length = 0; // reset temporary object
339
+ }
340
+
341
+ // now cleanup element...
342
+ elem = this._elem = null ;
343
+ return this.prevObject || this ;
344
+ },
345
+
346
+ // these are temporary objects are reused by end() to avoid memory allocs.
347
+ _DEFAULT_ATTRS: {},
348
+ _TAG_ARRAY: [],
349
+ _JOIN_ARRAY: [],
350
+ _STYLE_PAIR_ARRAY: [],
351
+
352
+ /**
353
+ Ends the current tag editing context. This will generate the tag string
354
+ including any attributes you might have set along with a closing tag.
355
+
356
+ The generated HTML will be added to the render context strings. This will
357
+ also return the previous context if there is one or the receiver.
358
+
359
+ If you do not have a current tag, this does nothing.
360
+
361
+ @returns {SC.RenderContext}
362
+ */
363
+ end: function() {
364
+ // console.log('%@.end() called'.fmt(this));
365
+ // NOTE: If you modify this method, be careful to consider memory usage
366
+ // and performance here. This method is called frequently during renders
367
+ // and we want it to be as fast as possible.
368
+
369
+ // generate opening tag.
370
+
371
+ // get attributes first. Copy in className + styles...
372
+ var tag = this._TAG_ARRAY, pair, joined, key ;
373
+ var attrs = this._attrs, className = this._classNames ;
374
+ var id = this._id, styles = this._styles;
375
+
376
+ // add tag to tag array
377
+ tag[0] = '<'; tag[1] = this._tagName ;
378
+
379
+ // add any attributes...
380
+ if (attrs || className || styles || id) {
381
+ if (!attrs) attrs = this._DEFAULT_ATTRS ;
382
+ if (id) attrs.id = id ;
383
+ if (className) attrs['class'] = className.join(' ');
384
+
385
+ // add in styles. note how we avoid memory allocs here to keep things
386
+ // fast...
387
+ if (styles) {
388
+ joined = this._JOIN_ARRAY ;
389
+ pair = this._STYLE_PAIR_ARRAY;
390
+ for(key in styles) {
391
+ if(!styles.hasOwnProperty(key)) continue ;
392
+ pair[0] = key.dasherize() ;
393
+ pair[1] = styles[key];
394
+ if (pair[1] === null) continue; // skip empty styles
395
+
396
+ if(typeof pair[1] === SC.T_NUMBER) pair[1] = "%@px".fmt(pair[1]);
397
+ joined.push(pair.join(': '));
398
+ }
399
+ attrs.style = joined.join('; ') ;
400
+
401
+ // reset temporary object. pair does not need to be reset since it
402
+ // is always overwritten
403
+ joined.length = 0;
404
+ }
405
+
406
+ // now convert attrs hash to tag array...
407
+ tag.push(' '); // add space for joining0
408
+ for(key in attrs) {
409
+ if (!attrs.hasOwnProperty(key)) continue ;
410
+ if (attrs[key] === null) continue ; // skip empty attrs
411
+ tag.push(key);
412
+ tag.push('="');
413
+ tag.push(attrs[key]) ;
414
+ tag.push('" ') ;
415
+ }
416
+
417
+ // if we are using the DEFAULT_ATTRS temporary object, make sure we
418
+ // reset.
419
+ if (attrs === this._DEFAULT_ATTRS) {
420
+ delete attrs.style; delete attrs['class']; delete attrs.id;
421
+ }
422
+
423
+ }
424
+
425
+ // this is self closing if there is no content in between and selfClosing
426
+ // is not set to false.
427
+ var strings = this.strings;
428
+ var selfClosing = (this._selfClosing === NO) ? NO : (this.length === 1) ;
429
+ tag.push(selfClosing ? ' />' : '>') ;
430
+
431
+ // console.log('selfClosing == %@'.fmt(selfClosing));
432
+
433
+ strings[this.offset] = tag.join('');
434
+ tag.length = 0 ; // reset temporary object
435
+
436
+ // now generate closing tag if needed...
437
+ if (!selfClosing) {
438
+ tag[0] = '</' ;
439
+ tag[1] = this._tagName;
440
+ tag[2] = '>';
441
+ strings.push(tag.join(''));
442
+
443
+ // increase length of receiver and all parents
444
+ var c = this;
445
+ while(c) { c.length++; c = c.prevObject; }
446
+ tag.length = 0; // reset temporary object again
447
+ }
448
+
449
+ // if there was a source element, cleanup to avoid memory leaks
450
+ this._elem = null;
451
+
452
+ return this.prevObject || this ;
453
+ },
454
+
455
+ /**
456
+ Generates a with the passed options. Like calling context.begin().end().
457
+
458
+ @param {String} tagName optional tag name. default 'div'
459
+ @param {Hash} opts optional tag options. defaults to empty options.
460
+ @returns {SC.RenderContext} receiver
461
+ */
462
+ tag: function(tagName, opts) {
463
+ return this.begin(tagName, opts).end();
464
+ },
465
+
466
+ // ..........................................................
467
+ // BASIC HELPERS
468
+ //
469
+
470
+ /**
471
+ Reads outer tagName if no param is passed, sets tagName otherwise.
472
+
473
+ @param {String} tagName pass to set tag name.
474
+ @returns {String|SC.RenderContext} tag name or receiver
475
+ */
476
+ tagName: function(tagName) {
477
+ if (tagName === undefined) {
478
+ if (!this._tagName && this._elem) this._tagName = this._elem.tagName;
479
+ return this._tagName;
480
+ } else {
481
+ this._tagName = tagName;
482
+ this._tagNameDidChange = YES;
483
+ return this ;
484
+ }
485
+ },
486
+
487
+ /**
488
+ Reads the outer tag id if no param is passed, sets the id otherwise.
489
+
490
+ @param {String} idName the id or set
491
+ @returns {String|SC.RenderContext} id or receiver
492
+ */
493
+ id: function(idName) {
494
+ if (idName === undefined) {
495
+ if (!this._id && this._elem) this._id = this._elem.id;
496
+ return this._id ;
497
+ } else {
498
+ this._id = idName;
499
+ this._idDidChange = YES;
500
+ return this;
501
+ }
502
+ },
503
+
504
+ // ..........................................................
505
+ // CSS CLASS NAMES SUPPORT
506
+ //
507
+
508
+ /**
509
+ Reads the current classNames array or sets the array if a param is passed.
510
+ Note that if you get the classNames array and then modify it, you MUST
511
+ call this method again to set the array or else it may not be copied to
512
+ the element.
513
+
514
+ If you do pass a classNames array, you can also pass YES for the
515
+ cloneOnModify param. This will cause the context to clone the class names
516
+ before making any further edits. This is useful is you have a shared
517
+ array of class names you want to start with but edits should not change
518
+ the shared array.
519
+
520
+ @param {Array} classNames array
521
+ @param {Boolean} cloneOnModifiy
522
+ @returns {Array|SC.RenderContext} classNames array or receiver
523
+ */
524
+ classNames: function(classNames, cloneOnModify) {
525
+ if (classNames === undefined) {
526
+ if (!this._classNames && this._elem) {
527
+ this._classNames = (this._elem.getAttribute('class')||'').split(' ');
528
+ }
529
+
530
+ if (this._cloneClassNames) {
531
+ this._classNames = (this._classNames || []).slice();
532
+ this._cloneClassNames = NO ;
533
+ }
534
+
535
+ // if there are no class names, create an empty array but don't modify.
536
+ if (!this._classNames) this._classNames = [];
537
+
538
+ return this._classNames ;
539
+ } else {
540
+ this._classNames = classNames ;
541
+ this._cloneClassNames = cloneOnModify || NO ;
542
+ this._classNamesDidChange = YES ;
543
+ return this ;
544
+ }
545
+ },
546
+
547
+ /**
548
+ Returns YES if the outer tag current has the passed class name, NO
549
+ otherwise.
550
+
551
+ @param {String} className the class name
552
+ @returns {Boolean}
553
+ */
554
+ hasClass: function(className) {
555
+ return this.classNames().indexOf(className) >= 0;
556
+ },
557
+
558
+ /**
559
+ Adds the specified className to the current tag, if it does not already
560
+ exist. This method has no effect if there is no open tag.
561
+
562
+ @param {String} className the class to add
563
+ @returns {SC.RenderContext} receiver
564
+ */
565
+ addClass: function(className) {
566
+ var classNames = this.classNames() ; // handles cloning ,etc.
567
+ if (classNames.indexOf(className)<0) {
568
+ classNames.push(className);
569
+ this._classNamesDidChange = YES ;
570
+ }
571
+ return this;
572
+ },
573
+
574
+ /**
575
+ Removes the specified className from the current tag. This method has
576
+ no effect if there is not an open tag.
577
+
578
+ @param {String} className the class to add
579
+ @returns {SC.RenderContext} receiver
580
+ */
581
+ removeClass: function(className) {
582
+ var classNames = this._classNames, idx;
583
+ if (!classNames && this._elem) {
584
+ classNames = this._classNames =
585
+ (this._elem.getAttribute('class')||'').split(' ');
586
+ }
587
+
588
+ if (classNames && (idx=classNames.indexOf(className))>=0) {
589
+ if (this._cloneClassNames) {
590
+ classNames = this._classNames = classNames.slice();
591
+ this._cloneClassNames = NO ;
592
+ }
593
+
594
+ // if className is found, just null it out. This will end up adding an
595
+ // extra space to the generated HTML but it is faster than trying to
596
+ // recompact the array.
597
+ classNames[idx] = null;
598
+ this._classNamesDidChange = YES ;
599
+ }
600
+
601
+ return this;
602
+ },
603
+
604
+ /**
605
+ You can either pass a single class name and a boolean indicating whether
606
+ the value should be added or removed, or you can pass a hash with all
607
+ the class names you want to add or remove with a boolean indicating
608
+ whether they should be there or not.
609
+
610
+ This is far more efficient than using addClass/removeClass.
611
+
612
+ @param {String|Hash} className class name or hash of classNames + bools
613
+ @param {Boolean} shouldAdd for class name if a string was passed
614
+ @returns {SC.RenderContext} receiver
615
+ */
616
+ setClass: function(className, shouldAdd) {
617
+ var classNames, idx, key, didChange;
618
+
619
+ // simple form
620
+ if (shouldAdd !== undefined) {
621
+ return shouldAdd ? this.addClass(className) : this.removeClass(className);
622
+
623
+ // bulk form
624
+ } else {
625
+
626
+ classNames = this._classNames ;
627
+ if (!classNames && this._elem) {
628
+ classNames = this._classNames =
629
+ (this._elem.getAttribute('class')||'').split(' ');
630
+ }
631
+ if (!classNames) classNames = this._classNames = [];
632
+
633
+ if (this._cloneClassNames) {
634
+ classNames = this._classNames = classNames.slice();
635
+ this._cloneClassNames = NO ;
636
+ }
637
+
638
+ didChange = NO;
639
+ for(key in className) {
640
+ if (!className.hasOwnProperty(key)) continue ;
641
+ idx = classNames.indexOf(key);
642
+ if (className[key]) {
643
+ if (idx<0) { classNames.push(key); didChange = YES; }
644
+ } else {
645
+ if (idx>=0) { classNames[idx] = null; didChange = YES; }
646
+ }
647
+ }
648
+ if (didChange) this._classNamesDidChange = YES;
649
+ }
650
+
651
+ return this ;
652
+ },
653
+
654
+ // ..........................................................
655
+ // CSS Styles Support
656
+ //
657
+
658
+ _STYLE_REGEX: /\s*([^:\s]+)\s*:\s*([^;\s]+)\s*;?/g,
659
+
660
+ /**
661
+ Retrieves or sets the current styles for the outer tag. If you retrieve
662
+ the styles hash to edit it, you must set the hash again in order for it
663
+ to be applied to the element on rendering.
664
+
665
+ Optionally you can also pass YES to the cloneOnModify param to cause the
666
+ styles has to be cloned before it is edited. This is useful if you want
667
+ to start with a shared style hash and then optionally modify it for each
668
+ context.
669
+
670
+ @param {Hash} styles styles hash
671
+ @param {Boolean} cloneOnModify
672
+ @returns {Hash|SC.RenderContext} styles hash or receiver
673
+ */
674
+ styles: function(styles, cloneOnModify) {
675
+ var attr, regex, match;
676
+
677
+ if (styles === undefined) {
678
+
679
+ // no styles are defined yet but we do have a source element. Lazily
680
+ // extract styles from element.
681
+ if (!this._styles && this._elem) {
682
+ // parse style...
683
+ attr = this._elem.getAttribute('style');
684
+ if (attr && (attr = attr.toString()).length>0) {
685
+ styles = {};
686
+
687
+ regex = this._STYLE_REGEX ;
688
+ regex.lastIndex = 0;
689
+ while(match = regex.exec(attr)) styles[match[1].camelize()] = match[2];
690
+
691
+ this._styles = styles;
692
+ this._cloneStyles = NO;
693
+
694
+ } else {
695
+ this._styles = {};
696
+ }
697
+
698
+ // if there is no element or we do have styles, possibly clone them
699
+ // before returning.
700
+ } else {
701
+ if (!this._styles) {
702
+ this._styles = {};
703
+ } else {
704
+ if (this._cloneStyles) {
705
+ this._styles = SC.beget(this._styles);
706
+ this._cloneStyles = NO ;
707
+ }
708
+ }
709
+ }
710
+
711
+ return this._styles ;
712
+
713
+ // set the styles if passed.
714
+ } else {
715
+ this._styles = styles ;
716
+ this._cloneStyles = cloneOnModify || NO ;
717
+ this._stylesDidChange = YES ;
718
+ return this ;
719
+ }
720
+ },
721
+
722
+ /**
723
+ Apply the passed styles to the tag. You can pass either a single key
724
+ value pair or a hash of styles. Note that if you set a style on an
725
+ existing element, it will replace any existing styles on the element.
726
+
727
+ @param {String|Hash} nameOrStyles the style name or a hash of styles
728
+ @param {String|Number} value style value if string name was passed
729
+ @returns {SC.RenderContext} receiver
730
+ */
731
+ addStyle: function(nameOrStyles, value) {
732
+
733
+ // get the current hash of styles. This will extract the styles and
734
+ // clone them if needed. This will get the actual styles hash so we can
735
+ // edit it directly.
736
+ var key, didChange = NO, styles = this.styles();
737
+
738
+ // simple form
739
+ if (typeof nameOrStyles === SC.T_STRING) {
740
+ if (value === undefined) { // reader
741
+ return styles[nameOrStyles];
742
+ } else { // writer
743
+ if (styles[nameOrStyles] !== value) {
744
+ styles[nameOrStyles] = value ;
745
+ this._stylesDidChange = YES ;
746
+ }
747
+ }
748
+
749
+ // bulk form
750
+ } else {
751
+ for(key in nameOrStyles) {
752
+ if (!nameOrStyles.hasOwnProperty(key)) continue ;
753
+ value = nameOrStyles[key];
754
+ if (styles[key] !== value) {
755
+ styles[key] = value;
756
+ didChange = YES;
757
+ }
758
+ }
759
+ if (didChange) this._stylesDidChange = YES ;
760
+ }
761
+
762
+ return this ;
763
+ },
764
+
765
+ /**
766
+ Removes the named style from the style hash.
767
+
768
+ Note that if you delete a style, the style will not actually be removed
769
+ from the style hash. Instead, its value will be set to null.
770
+
771
+ @param {String} styleName
772
+ @returns {SC.RenderContext} receiver
773
+ */
774
+ removeStyle: function(styleName) {
775
+ // avoid case where no styles have been defined
776
+ if (!this._styles && !this._elem) return this;
777
+
778
+ // get styles hash. this will clone if needed.
779
+ var styles = this.styles();
780
+ if (styles[styleName]) {
781
+ styles[styleName] = null;
782
+ this._stylesDidChange = YES ;
783
+ }
784
+ },
785
+
786
+ // ..........................................................
787
+ // ARBITRARY ATTRIBUTES SUPPORT
788
+ //
789
+
790
+ /**
791
+ Sets the named attribute on the tag. Note that if you set the 'class'
792
+ attribute or the 'styles' attribute, it will be ignored. Use the
793
+ relevant class name and style methods instead.
794
+
795
+ @param {String|Hash} nameOrAttrs the attr name or hash of attrs.
796
+ @param {String} value attribute value if attribute name was passed
797
+ @returns {SC.RenderContext} receiver
798
+ */
799
+ attr: function(nameOrAttrs, value) {
800
+ var key, attrs = this._attrs, didChange = NO ;
801
+ if (!attrs) this._attrs = attrs = {} ;
802
+
803
+ // simple form
804
+ if (typeof nameOrAttrs === SC.T_STRING) {
805
+ if (value === undefined) { // getter
806
+ return attrs[nameOrAttrs];
807
+ } else { // setter
808
+ if (attrs[nameOrAttrs] !== value) {
809
+ attrs[nameOrAttrs] = value ;
810
+ this._attrsDidChange = YES ;
811
+ }
812
+ }
813
+
814
+ // bulk form
815
+ } else {
816
+ for(key in nameOrAttrs) {
817
+ if (!nameOrAttrs.hasOwnProperty(key)) continue ;
818
+ value = nameOrAttrs[key];
819
+ if (attrs[key] !== value) {
820
+ attrs[key] = value ;
821
+ didChange = YES ;
822
+ }
823
+ }
824
+ if (didChange) this._attrsDidChange = YES ;
825
+ }
826
+
827
+ return this ;
828
+ }
829
+
830
+ });
831
+
832
+ /**
833
+ html is an alias for push(). Makes thie object more CoreQuery like
834
+ */
835
+ SC.RenderContext.fn.html = SC.RenderContext.fn.push;
836
+
837
+ /**
838
+ css is an alias for addStyle(). This this object more CoreQuery like.
839
+ */
840
+ SC.RenderContext.fn.css = SC.RenderContext.fn.addStyle;
841
+
842
+ /**
843
+ Helper method escapes the passed string to ensure HTML is displayed as
844
+ plain text. You should make sure you pass all user-entered data through
845
+ this method to avoid errors. You can also do this with the text() helper
846
+ method on a render context.
847
+ */
848
+ SC.RenderContext.escapeHTML = function(text) {
849
+ var elem, node, ret ;
850
+
851
+ elem = this.escapeHTMLElement;
852
+ if (!elem) elem = this.escapeHTMLElement = document.createElement('div');
853
+
854
+ node = this.escapeTextNode;
855
+ if (!node) {
856
+ node = this.escapeTextNode = document.createTextNode('');
857
+ elem.appendChild(node);
858
+ }
859
+
860
+ node.data = text ;
861
+ ret = elem.innerHTML ;
862
+ node = elem = null;
863
+
864
+ return ret ;
865
+ };