sproutcore 1.4.5 → 1.5.0.pre.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (792) hide show
  1. data/CHANGELOG +35 -0
  2. data/VERSION.yml +2 -2
  3. data/lib/Buildfile +13 -4
  4. data/lib/buildtasks/build.rake +20 -17
  5. data/lib/buildtasks/manifest.rake +143 -78
  6. data/lib/buildtasks/target.rake +1 -0
  7. data/lib/doc_templates/sproutcore/index.tmpl +18 -4
  8. data/lib/doc_templates/sproutcore/publish.js +1 -1
  9. data/lib/frameworks/sproutcore/Buildfile +24 -13
  10. data/lib/frameworks/sproutcore/{CHANGELOG-1.4.md → CHANGELOG.md} +0 -0
  11. data/lib/frameworks/sproutcore/apps/greenhouse/controllers/file.js +8 -48
  12. data/lib/frameworks/sproutcore/apps/greenhouse/core.js +3 -5
  13. data/lib/frameworks/sproutcore/apps/greenhouse/data_source.js +1 -1
  14. data/lib/frameworks/sproutcore/apps/greenhouse/english.lproj/app_page.js +26 -4
  15. data/lib/frameworks/sproutcore/apps/greenhouse/english.lproj/strings.js +7 -1
  16. data/lib/frameworks/sproutcore/apps/greenhouse/main.js +1 -1
  17. data/lib/frameworks/sproutcore/apps/greenhouse/models/design.js +6 -2
  18. data/lib/frameworks/sproutcore/apps/greenhouse/models/dir.js +8 -7
  19. data/lib/frameworks/sproutcore/apps/greenhouse/models/file.js +2 -2
  20. data/lib/frameworks/sproutcore/apps/greenhouse/states/inspector.js +133 -125
  21. data/lib/frameworks/sproutcore/apps/greenhouse/states/library.js +121 -112
  22. data/lib/frameworks/sproutcore/apps/greenhouse/states/main.js +233 -191
  23. data/lib/frameworks/sproutcore/apps/greenhouse/states/modals.js +265 -258
  24. data/lib/frameworks/sproutcore/apps/greenhouse/states/ready.js +153 -141
  25. data/lib/frameworks/sproutcore/apps/test_controls/Buildfile +0 -0
  26. data/lib/frameworks/sproutcore/apps/test_controls/controllers/buttons.js +21 -0
  27. data/lib/frameworks/sproutcore/apps/test_controls/controllers/categories.js +108 -0
  28. data/lib/frameworks/sproutcore/apps/test_controls/controllers/category.js +36 -0
  29. data/lib/frameworks/sproutcore/apps/test_controls/core.js +29 -0
  30. data/lib/frameworks/sproutcore/apps/test_controls/main.js +14 -0
  31. data/lib/frameworks/sproutcore/apps/test_controls/resources/buttons_page.js +142 -0
  32. data/lib/frameworks/sproutcore/apps/test_controls/resources/checkboxes_page.js +45 -0
  33. data/lib/frameworks/sproutcore/apps/test_controls/resources/flow_layout_page.js +84 -0
  34. data/lib/frameworks/sproutcore/apps/test_controls/resources/list_page.js +40 -0
  35. data/lib/frameworks/sproutcore/apps/test_controls/resources/loading.rhtml +9 -0
  36. data/lib/frameworks/sproutcore/apps/test_controls/resources/main_page.css +60 -0
  37. data/lib/frameworks/sproutcore/apps/test_controls/resources/main_page.js +144 -0
  38. data/lib/frameworks/sproutcore/apps/test_controls/resources/progress_page.js +42 -0
  39. data/lib/frameworks/sproutcore/apps/test_controls/resources/radio_page.js +48 -0
  40. data/lib/frameworks/sproutcore/apps/test_controls/resources/scroll_page.js +76 -0
  41. data/lib/frameworks/sproutcore/apps/test_controls/resources/segmented_page.js +98 -0
  42. data/lib/frameworks/sproutcore/apps/test_controls/resources/select_page.js +60 -0
  43. data/lib/frameworks/sproutcore/apps/test_controls/resources/sliders_page.js +53 -0
  44. data/lib/frameworks/sproutcore/apps/test_controls/resources/strings.js +50 -0
  45. data/lib/frameworks/sproutcore/apps/test_controls/resources/tab_page.js +44 -0
  46. data/lib/frameworks/sproutcore/apps/test_controls/resources/text_field_page.js +41 -0
  47. data/lib/frameworks/sproutcore/apps/test_controls/theme.js +34 -0
  48. data/lib/frameworks/sproutcore/apps/welcome/controllers/targets.js +7 -0
  49. data/lib/frameworks/sproutcore/apps/welcome/english.lproj/images/main-bg.png +0 -0
  50. data/lib/frameworks/sproutcore/apps/welcome/english.lproj/main_page.css +24 -6
  51. data/lib/frameworks/sproutcore/apps/welcome/english.lproj/main_page.js +36 -46
  52. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/controllers/array.js +175 -195
  53. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/controllers/controller.js +0 -0
  54. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/controllers/object.js +0 -0
  55. data/lib/frameworks/sproutcore/frameworks/amber/core.js +201 -0
  56. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/ext/object.js +23 -23
  57. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/ext/run_loop.js +47 -47
  58. data/lib/frameworks/sproutcore/frameworks/{runtime → amber}/mixins/delegate_support.js +36 -36
  59. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/mixins/responder_context.js +55 -55
  60. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/mixins/selection_support.js +45 -45
  61. data/lib/frameworks/sproutcore/frameworks/amber/mixins/string.js +163 -0
  62. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/panes/main.js +4 -3
  63. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/panes/pane.js +123 -9
  64. data/lib/frameworks/sproutcore/frameworks/{runtime → amber}/protocols/observable_protocol.js +11 -11
  65. data/lib/frameworks/sproutcore/frameworks/{runtime → amber}/protocols/sparse_array_delegate.js +40 -40
  66. data/lib/frameworks/sproutcore/frameworks/{foundation/english.lproj → amber/resources}/core.css +0 -103
  67. data/lib/frameworks/sproutcore/frameworks/{foundation/english.lproj → amber/resources}/view.css +0 -0
  68. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/system/application.js +0 -2
  69. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/system/browser.js +0 -0
  70. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/system/builder.js +0 -0
  71. data/lib/frameworks/sproutcore/frameworks/amber/system/core_query.js +141 -0
  72. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/system/cursor.js +0 -0
  73. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/system/device.js +0 -0
  74. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/system/event.js +34 -14
  75. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/system/json.js +0 -0
  76. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/system/locale.js +0 -0
  77. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/system/page.js +0 -0
  78. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/system/platform.js +30 -10
  79. data/lib/frameworks/sproutcore/frameworks/amber/system/ready.js +77 -0
  80. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/system/render_context.js +330 -255
  81. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/system/responder.js +0 -0
  82. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/system/root_responder.js +152 -60
  83. data/lib/frameworks/sproutcore/frameworks/{runtime → amber}/system/selection_set.js +140 -145
  84. data/lib/frameworks/sproutcore/frameworks/{runtime → amber}/system/sparse_array.js +101 -87
  85. data/lib/frameworks/sproutcore/frameworks/amber/system/theme.js +316 -0
  86. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/system/timer.js +149 -147
  87. data/lib/frameworks/sproutcore/frameworks/amber/system/utils.js +174 -0
  88. data/lib/frameworks/sproutcore/frameworks/amber/system/utils/rect.js +98 -0
  89. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/controllers/array/array_case.js +41 -41
  90. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/controllers/array/enum_case.js +0 -0
  91. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/controllers/array/null_case.js +0 -0
  92. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/controllers/array/selection_support.js +0 -0
  93. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/controllers/array/single_case.js +9 -9
  94. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/controllers/object/empty_case.js +0 -0
  95. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/controllers/object/multiple_case.js +0 -0
  96. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/controllers/object/single_case.js +0 -0
  97. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/controllers/object/single_enumerable_case.js +0 -0
  98. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/mixins/responder_context.js +0 -0
  99. data/lib/frameworks/sproutcore/frameworks/amber/tests/mixins/string.js +55 -0
  100. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/builder.js +0 -0
  101. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/core_query/within.js +7 -8
  102. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/json.js +0 -0
  103. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/locale.js +0 -0
  104. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/render_context/begin.js +0 -0
  105. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/render_context/element.js +0 -0
  106. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/render_context/end.js +1 -1
  107. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/render_context/get.js +0 -0
  108. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/render_context/helpers_attr.js +0 -0
  109. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/render_context/helpers_basic.js +0 -0
  110. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/render_context/helpers_className.js +0 -2
  111. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/render_context/helpers_style.js +11 -3
  112. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/render_context/init.js +0 -0
  113. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/render_context/join.js +0 -0
  114. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/render_context/push_text.js +0 -0
  115. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/render_context/tag.js +0 -0
  116. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/render_context/update.js +0 -0
  117. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/root_responder/makeKeyPane.js +0 -0
  118. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/root_responder/makeMainPane.js +0 -0
  119. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/root_responder/makeMenuPane.js +0 -0
  120. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/root_responder/root_responder.js +0 -0
  121. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/root_responder/targetForAction.js +46 -9
  122. data/lib/frameworks/sproutcore/frameworks/{runtime → amber}/tests/system/selection_set/add.js +0 -0
  123. data/lib/frameworks/sproutcore/frameworks/{runtime → amber}/tests/system/selection_set/copy.js +0 -0
  124. data/lib/frameworks/sproutcore/frameworks/{runtime → amber}/tests/system/selection_set/indexSetForSource.js +0 -0
  125. data/lib/frameworks/sproutcore/frameworks/{runtime → amber}/tests/system/selection_set/isEqual.js +0 -0
  126. data/lib/frameworks/sproutcore/frameworks/{runtime → amber}/tests/system/selection_set/remove.js +0 -0
  127. data/lib/frameworks/sproutcore/frameworks/{runtime → amber}/tests/system/sparse_array.js +0 -0
  128. data/lib/frameworks/sproutcore/frameworks/amber/tests/system/theme.js +77 -0
  129. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/timer/invalidate.js +0 -0
  130. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/timer/invokeLater.js +7 -5
  131. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/timer/isPaused.js +0 -0
  132. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/timer/performAction.js +0 -0
  133. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/timer/schedule.js +0 -0
  134. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/utils/normalizeURL.js +0 -0
  135. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/system/utils/rect.js +0 -0
  136. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/main_pane.js +0 -0
  137. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/pane/append_remove.js +0 -0
  138. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/pane/firstResponder.js +0 -0
  139. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/pane/keyPane.js +0 -0
  140. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/pane/layout.js +0 -0
  141. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/pane/sendEvent.js +0 -0
  142. data/lib/frameworks/sproutcore/frameworks/amber/tests/views/pane/sendTouchEvent.js +267 -0
  143. data/lib/frameworks/sproutcore/frameworks/amber/tests/views/view/animation.js +320 -0
  144. data/lib/frameworks/sproutcore/frameworks/amber/tests/views/view/build.js +85 -0
  145. data/lib/frameworks/sproutcore/frameworks/amber/tests/views/view/build_children.js +89 -0
  146. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/view/clippingFrame.js +3 -2
  147. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/view/convertFrames.js +0 -0
  148. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/view/convertLayouts.js +0 -0
  149. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/view/createChildViews.js +0 -0
  150. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/view/createLayer.js +2 -2
  151. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/view/destroyLayer.js +0 -0
  152. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/view/didAppendToDocument.js +0 -0
  153. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/view/findLayerInParentLayer.js +0 -0
  154. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/view/init.js +0 -0
  155. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/view/insertBefore.js +0 -0
  156. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/view/isVisible.js +0 -0
  157. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/view/isVisibleInWindow.js +0 -0
  158. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/view/layer.js +0 -0
  159. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/view/layoutChildViews.js +0 -0
  160. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/view/layoutDidChange.js +22 -0
  161. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/view/layoutStyle.js +135 -64
  162. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/view/parentViewDidChange.js +0 -0
  163. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/view/prepareContext.js +16 -8
  164. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/view/removeChild.js +0 -0
  165. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/view/render.js +37 -5
  166. data/lib/frameworks/sproutcore/frameworks/amber/tests/views/view/render_delegate_support.js +163 -0
  167. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/view/replaceChild.js +0 -0
  168. data/lib/frameworks/sproutcore/frameworks/amber/tests/views/view/theme.js +43 -0
  169. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/view/updateLayer.js +12 -10
  170. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/view/updateLayerLocation.js +0 -0
  171. data/lib/frameworks/sproutcore/frameworks/amber/tests/views/view/view.js +64 -0
  172. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/tests/views/view/viewDidResize.js +0 -0
  173. data/lib/frameworks/sproutcore/frameworks/amber/views/base.js +1 -0
  174. data/lib/frameworks/sproutcore/frameworks/amber/views/layout_style.js +478 -0
  175. data/lib/frameworks/sproutcore/frameworks/{foundation → amber}/views/view.js +1719 -1029
  176. data/lib/frameworks/sproutcore/frameworks/animation/core.js +32 -18
  177. data/lib/frameworks/sproutcore/frameworks/animation/tests/core.js +10 -5
  178. data/lib/frameworks/sproutcore/frameworks/bootstrap/system/bench.js +14 -0
  179. data/lib/frameworks/sproutcore/frameworks/bootstrap/system/browser.js +24 -17
  180. data/lib/frameworks/sproutcore/frameworks/bootstrap/system/loader.js +1 -13
  181. data/lib/frameworks/sproutcore/frameworks/bootstrap/tests/system/browser.js +72 -0
  182. data/lib/frameworks/sproutcore/frameworks/datastore/models/child_record.js +2 -2
  183. data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +7 -3
  184. data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +66 -4
  185. data/lib/frameworks/sproutcore/frameworks/datastore/system/many_array.js +4 -1
  186. data/lib/frameworks/sproutcore/frameworks/datastore/system/record_array.js +58 -10
  187. data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +5 -14
  188. data/lib/frameworks/sproutcore/frameworks/debug/invoke_once_last_debugging.js +4 -5
  189. data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/list_item.css +27 -3
  190. data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/segmented.css +5 -8
  191. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_fast_path.js +1 -1
  192. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_row_delegate.js +30 -4
  193. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/navigation_builder.js +130 -0
  194. data/lib/frameworks/sproutcore/frameworks/desktop/panes/alert.js +2 -0
  195. data/lib/frameworks/sproutcore/frameworks/desktop/panes/menu.js +20 -2
  196. data/lib/frameworks/sproutcore/frameworks/desktop/panes/panel.js +9 -27
  197. data/lib/frameworks/sproutcore/frameworks/desktop/panes/picker.js +32 -26
  198. data/lib/frameworks/sproutcore/frameworks/desktop/panes/select_button.js +57 -11
  199. data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drop_target.js +2 -2
  200. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/button.js +78 -0
  201. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/checkbox.js +74 -0
  202. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/collection.js +24 -0
  203. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/disclosure.js +41 -0
  204. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/helpers/slicing.js +34 -0
  205. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/image_button.js +30 -0
  206. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/master_detail.js +28 -0
  207. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/menu.js +47 -0
  208. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/panel.js +28 -0
  209. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/picker.js +43 -0
  210. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/progress.js +175 -0
  211. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/radio.js +74 -0
  212. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/radio_group.js +109 -0
  213. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segment.js +70 -0
  214. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segmented.js +58 -0
  215. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/slider.js +39 -0
  216. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/source_list.js +8 -0
  217. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/toolbar.js +18 -0
  218. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/well.js +29 -0
  219. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/workspace.js +18 -0
  220. data/lib/frameworks/sproutcore/frameworks/desktop/system/drag.js +79 -53
  221. data/lib/frameworks/sproutcore/frameworks/desktop/tests/integration/dialog.js +7 -2
  222. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/ui.js +1 -1
  223. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/methods.js +45 -3
  224. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/ui.js +33 -13
  225. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +11 -17
  226. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/image_button/ui.js +25 -0
  227. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list_item.js +128 -20
  228. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +10 -10
  229. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/methods.js +35 -15
  230. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +162 -0
  231. data/lib/frameworks/sproutcore/frameworks/desktop/views/button.js +153 -208
  232. data/lib/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +18 -48
  233. data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +26 -25
  234. data/lib/frameworks/sproutcore/frameworks/desktop/views/disclosure.js +3 -20
  235. data/lib/frameworks/sproutcore/frameworks/desktop/views/file.js +112 -0
  236. data/lib/frameworks/sproutcore/frameworks/desktop/views/image_button.js +74 -0
  237. data/lib/frameworks/sproutcore/frameworks/desktop/views/list.js +3 -1
  238. data/lib/frameworks/sproutcore/frameworks/desktop/views/list_item.js +388 -309
  239. data/lib/frameworks/sproutcore/frameworks/desktop/views/master_detail.js +257 -0
  240. data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +8 -3
  241. data/lib/frameworks/sproutcore/frameworks/desktop/views/navigation.js +237 -0
  242. data/lib/frameworks/sproutcore/frameworks/desktop/views/navigation_bar.js +181 -0
  243. data/lib/frameworks/sproutcore/frameworks/desktop/views/popup_button.js +3 -2
  244. data/lib/frameworks/sproutcore/frameworks/desktop/views/progress.js +14 -76
  245. data/lib/frameworks/sproutcore/frameworks/desktop/views/radio.js +59 -164
  246. data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll.js +80 -47
  247. data/lib/frameworks/sproutcore/frameworks/desktop/views/segment.js +84 -0
  248. data/lib/frameworks/sproutcore/frameworks/desktop/views/segmented.js +320 -289
  249. data/lib/frameworks/sproutcore/frameworks/desktop/views/select.js +212 -76
  250. data/lib/frameworks/sproutcore/frameworks/desktop/views/slider.js +33 -36
  251. data/lib/frameworks/sproutcore/frameworks/desktop/views/source_list.js +2 -0
  252. data/lib/frameworks/sproutcore/frameworks/desktop/views/split.js +347 -248
  253. data/lib/frameworks/sproutcore/frameworks/desktop/views/static_content.js +1 -1
  254. data/lib/frameworks/sproutcore/frameworks/desktop/views/tab.js +1 -1
  255. data/lib/frameworks/sproutcore/frameworks/desktop/views/toolbar.js +41 -9
  256. data/lib/frameworks/sproutcore/frameworks/desktop/views/web.js +1 -1
  257. data/lib/frameworks/sproutcore/frameworks/desktop/views/well.js +2 -21
  258. data/lib/frameworks/sproutcore/frameworks/desktop/views/workspace.js +251 -0
  259. data/lib/frameworks/sproutcore/frameworks/documentation/core.js +0 -0
  260. data/lib/frameworks/sproutcore/frameworks/forms/english.lproj/default_styles.css +5 -0
  261. data/lib/frameworks/sproutcore/frameworks/forms/english.lproj/strings.js +15 -0
  262. data/lib/frameworks/sproutcore/frameworks/forms/mixins/edit_mode.js +43 -0
  263. data/lib/frameworks/sproutcore/frameworks/forms/mixins/emptiness.js +95 -0
  264. data/lib/frameworks/sproutcore/frameworks/forms/renderer_delegates/form.js +22 -0
  265. data/lib/frameworks/sproutcore/frameworks/forms/renderer_delegates/form_row.js +21 -0
  266. data/lib/frameworks/sproutcore/frameworks/forms/tests/views/form.js +15 -0
  267. data/lib/frameworks/sproutcore/frameworks/forms/tests/views/form_checkbox_field.js +15 -0
  268. data/lib/frameworks/sproutcore/frameworks/forms/tests/views/form_field.js +15 -0
  269. data/lib/frameworks/sproutcore/frameworks/forms/tests/views/form_label.js +15 -0
  270. data/lib/frameworks/sproutcore/frameworks/forms/tests/views/form_radio_field.js +15 -0
  271. data/lib/frameworks/sproutcore/frameworks/forms/tests/views/form_row.js +15 -0
  272. data/lib/frameworks/sproutcore/frameworks/forms/tests/views/form_text_field.js +15 -0
  273. data/lib/frameworks/sproutcore/frameworks/forms/views/form.js +280 -0
  274. data/lib/frameworks/sproutcore/frameworks/forms/views/form_row.js +183 -0
  275. data/lib/frameworks/sproutcore/frameworks/foundation/controllers/tree.js +5 -2
  276. data/lib/frameworks/sproutcore/frameworks/foundation/core.js +0 -150
  277. data/lib/frameworks/sproutcore/frameworks/foundation/debug/control_test_pane.js +0 -2
  278. data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/benchmark.css +146 -0
  279. data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/bootstrap.rhtml +2 -14
  280. data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/images/favicon.ico +0 -0
  281. data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/images/sproutcore.png +0 -0
  282. data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/strings.js +0 -2
  283. data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/text_field.css +4 -6
  284. data/lib/frameworks/sproutcore/frameworks/foundation/gestures/pinch.js +81 -0
  285. data/lib/frameworks/sproutcore/frameworks/foundation/gestures/swipe.js +144 -0
  286. data/lib/frameworks/sproutcore/frameworks/foundation/gestures/tap.js +113 -0
  287. data/lib/frameworks/sproutcore/frameworks/foundation/license.js +24 -26
  288. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_mixin.js +39 -0
  289. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_resize.js +244 -0
  290. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/control.js +68 -23
  291. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/editable.js +8 -2
  292. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/flowed_layout.js +626 -0
  293. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/gestureable.js +214 -0
  294. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editable.js +89 -0
  295. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editor_delegate.js +139 -0
  296. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_text_field.js +25 -33
  297. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/string.js +57 -209
  298. data/lib/frameworks/sproutcore/frameworks/foundation/private/tree_item_observer.js +7 -3
  299. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/canvas_image.js +100 -0
  300. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/container.js +18 -0
  301. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/image.js +97 -0
  302. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/label.js +111 -0
  303. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/render_delegate.js +17 -0
  304. data/lib/frameworks/sproutcore/frameworks/foundation/system/benchmark.js +360 -156
  305. data/lib/frameworks/sproutcore/frameworks/{runtime → foundation}/system/cookie.js +35 -35
  306. data/lib/frameworks/sproutcore/frameworks/foundation/system/core_query.js +19 -2012
  307. data/lib/frameworks/sproutcore/frameworks/foundation/system/exception_handler.js +3 -0
  308. data/lib/frameworks/sproutcore/frameworks/foundation/system/gesture.js +363 -0
  309. data/lib/frameworks/sproutcore/frameworks/foundation/system/{image_cache.js → image_queue.js} +19 -22
  310. data/lib/frameworks/sproutcore/frameworks/foundation/system/module.js +576 -0
  311. data/lib/frameworks/sproutcore/frameworks/foundation/system/request.js +19 -22
  312. data/lib/frameworks/sproutcore/frameworks/foundation/system/response.js +73 -61
  313. data/lib/frameworks/sproutcore/frameworks/foundation/system/routes.js +122 -23
  314. data/lib/frameworks/sproutcore/frameworks/foundation/system/staticqueue.js +53 -0
  315. data/lib/frameworks/sproutcore/frameworks/foundation/system/task_queue.js +18 -15
  316. data/lib/frameworks/sproutcore/frameworks/foundation/system/user_defaults.js +82 -90
  317. data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/colors.js +80 -0
  318. data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/misc.js +76 -0
  319. data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/range.js +64 -0
  320. data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/string_measurement.js +247 -0
  321. data/lib/frameworks/sproutcore/frameworks/foundation/tasks/preload_bundle.js +3 -3
  322. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/beginEditing.js +2 -2
  323. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/staticLayout.js +2 -0
  324. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/string.js +2 -57
  325. data/lib/frameworks/sproutcore/frameworks/{runtime → foundation}/tests/system/cookie.js +0 -0
  326. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/setClass.js +13 -3
  327. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/request.js +99 -49
  328. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/routes.js +24 -20
  329. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/container/methods.js +9 -1
  330. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/container/ui.js +31 -6
  331. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/image/ui.js +454 -44
  332. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/label/ui.js +10 -1
  333. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/{view → text_field}/nextValidKeyView.js +0 -0
  334. data/lib/frameworks/sproutcore/frameworks/foundation/validators/number.js +1 -0
  335. data/lib/frameworks/sproutcore/frameworks/foundation/views/container.js +9 -8
  336. data/lib/frameworks/sproutcore/frameworks/foundation/views/field.js +1 -3
  337. data/lib/frameworks/sproutcore/frameworks/foundation/views/image.js +381 -105
  338. data/lib/frameworks/sproutcore/frameworks/foundation/views/label.js +44 -171
  339. data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +69 -16
  340. data/lib/frameworks/sproutcore/frameworks/jquery/jquery-buffer.js +376 -0
  341. data/lib/frameworks/sproutcore/frameworks/jquery/jquery-buffered.js +205 -0
  342. data/lib/frameworks/sproutcore/frameworks/jquery/jquery-sc.js +7 -0
  343. data/lib/frameworks/sproutcore/frameworks/jquery/jquery.js +7179 -0
  344. data/lib/frameworks/sproutcore/frameworks/media/views/audio.js +4 -2
  345. data/lib/frameworks/sproutcore/frameworks/media/views/controls.js +1 -3
  346. data/lib/frameworks/sproutcore/frameworks/media/views/simple_controls.js +1 -2
  347. data/lib/frameworks/sproutcore/frameworks/mini/license.js +29 -28
  348. data/lib/frameworks/sproutcore/frameworks/runtime/core.js +366 -333
  349. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/rangeObserver.js +73 -73
  350. data/lib/frameworks/sproutcore/frameworks/runtime/license.js +29 -28
  351. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/array.js +160 -150
  352. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/comparable.js +9 -9
  353. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/copyable.js +15 -15
  354. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +228 -220
  355. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/freezable.js +27 -27
  356. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +355 -305
  357. data/lib/frameworks/sproutcore/frameworks/runtime/private/chain_observer.js +32 -32
  358. data/lib/frameworks/sproutcore/frameworks/runtime/private/observer_queue.js +53 -51
  359. data/lib/frameworks/sproutcore/frameworks/runtime/private/observer_set.js +49 -106
  360. data/lib/frameworks/sproutcore/frameworks/runtime/system/binding.js +252 -252
  361. data/lib/frameworks/sproutcore/frameworks/runtime/system/enumerator.js +22 -22
  362. data/lib/frameworks/sproutcore/frameworks/runtime/system/error.js +31 -31
  363. data/lib/frameworks/sproutcore/frameworks/runtime/system/index_set.js +234 -234
  364. data/lib/frameworks/sproutcore/frameworks/runtime/system/logger.js +4 -4
  365. data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +167 -157
  366. data/lib/frameworks/sproutcore/frameworks/runtime/system/range_observer.js +84 -85
  367. data/lib/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +104 -91
  368. data/lib/frameworks/sproutcore/frameworks/runtime/system/set.js +102 -98
  369. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/IsEqual.js +19 -49
  370. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/guidFor.js +53 -126
  371. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/itemType.js +62 -33
  372. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/enumerable.js +41 -5
  373. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/observable.js +133 -98
  374. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/observer_set.js +50 -0
  375. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/create.js +11 -11
  376. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/set.js +71 -45
  377. data/lib/frameworks/sproutcore/frameworks/statechart/core.js +3 -9
  378. data/lib/frameworks/sproutcore/frameworks/statechart/debug/monitor.js +136 -0
  379. data/lib/frameworks/sproutcore/frameworks/statechart/system/state.js +636 -99
  380. data/lib/frameworks/sproutcore/frameworks/statechart/system/statechart.js +951 -0
  381. data/lib/frameworks/sproutcore/frameworks/statechart/tests/async.js +94 -0
  382. data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/advanced_event_handling.js +310 -0
  383. data/lib/frameworks/sproutcore/frameworks/statechart/tests/namespace/access_substates.js +252 -0
  384. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/is_current_state.js +64 -0
  385. data/lib/frameworks/sproutcore/frameworks/statechart/tests/with_concurrent_states/goto_history_state.js +88 -0
  386. data/lib/frameworks/sproutcore/frameworks/statechart/tests/with_concurrent_states/goto_state_advanced.js +234 -0
  387. data/lib/frameworks/sproutcore/frameworks/statechart/tests/with_concurrent_states/goto_state_async.js +123 -0
  388. data/lib/frameworks/sproutcore/frameworks/statechart/tests/with_concurrent_states/goto_state_basic.js +139 -0
  389. data/lib/frameworks/sproutcore/frameworks/statechart/tests/with_concurrent_states/goto_state_intermediate.js +119 -0
  390. data/lib/frameworks/sproutcore/frameworks/statechart/tests/with_concurrent_states/send_event.js +183 -0
  391. data/lib/frameworks/sproutcore/frameworks/statechart/tests/without_concurrent_states/default_responder.js +90 -0
  392. data/lib/frameworks/sproutcore/frameworks/statechart/tests/without_concurrent_states/goto_history_state.js +200 -0
  393. data/lib/frameworks/sproutcore/frameworks/statechart/tests/without_concurrent_states/goto_state.js +256 -0
  394. data/lib/frameworks/sproutcore/frameworks/statechart/tests/without_concurrent_states/goto_state_async.js +187 -0
  395. data/lib/frameworks/sproutcore/frameworks/statechart/tests/without_concurrent_states/send_event.js +122 -0
  396. data/lib/frameworks/sproutcore/frameworks/statechart/tests/without_concurrent_states/state_plugin.js +99 -0
  397. data/lib/frameworks/sproutcore/frameworks/statechart/tests/without_concurrent_states/transient.js +162 -0
  398. data/lib/frameworks/sproutcore/frameworks/table/views/table_cell.js +2 -1
  399. data/lib/frameworks/sproutcore/frameworks/table/views/table_head.js +1 -1
  400. data/lib/frameworks/sproutcore/frameworks/table/views/table_row.js +1 -1
  401. data/lib/frameworks/sproutcore/frameworks/testing/system/runner.js +2 -1
  402. data/lib/frameworks/sproutcore/lib/index.rhtml +24 -1
  403. data/lib/frameworks/sproutcore/license.js +31 -30
  404. data/lib/frameworks/sproutcore/themes/ace/designs/dark.png +0 -0
  405. data/lib/frameworks/sproutcore/themes/ace/designs/dark.psd +0 -0
  406. data/lib/frameworks/sproutcore/themes/ace/designs/light.png +0 -0
  407. data/lib/frameworks/sproutcore/themes/ace/designs/light.psd +0 -0
  408. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/18px/active_button.psd +0 -0
  409. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/18px/normal_button.psd +0 -0
  410. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/18px/selected_active_button.psd +0 -0
  411. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/18px/selected_button.psd +0 -0
  412. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/active_button.psd +0 -0
  413. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/active_button_capsule.psd +0 -0
  414. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/active_button_pointer.psd +0 -0
  415. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/normal_button.psd +0 -0
  416. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/normal_button_capsule.psd +0 -0
  417. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/normal_button_pointer.psd +0 -0
  418. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/selected_active_button.psd +0 -0
  419. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/selected_active_button_capsule.psd +0 -0
  420. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/selected_active_button_pointer.psd +0 -0
  421. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/selected_button.psd +0 -0
  422. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/selected_button_capsule.psd +0 -0
  423. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/selected_button_pointer.psd +0 -0
  424. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/30px/active_button.psd +0 -0
  425. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/30px/active_button_pointer.psd +0 -0
  426. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/30px/normal_button.psd +0 -0
  427. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/30px/normal_button_pointer.psd +0 -0
  428. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/30px/selected_active_button.psd +0 -0
  429. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/30px/selected_active_button_pointer.psd +0 -0
  430. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/30px/selected_button.psd +0 -0
  431. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/30px/selected_button_pointer.psd +0 -0
  432. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/44px/active_button.psd +0 -0
  433. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/44px/normal_button.psd +0 -0
  434. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/44px/selected_active_button.psd +0 -0
  435. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/44px/selected_button.psd +0 -0
  436. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/active_button.psd +0 -0
  437. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/active_button_capsule.psd +0 -0
  438. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/active_button_pointer.psd +0 -0
  439. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/normal_button.psd +0 -0
  440. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/normal_button_capsule.psd +0 -0
  441. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/normal_button_pointer.psd +0 -0
  442. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/selected_active_button.psd +0 -0
  443. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/selected_active_button_capsule.psd +0 -0
  444. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/selected_active_button_pointer.psd +0 -0
  445. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/selected_button.psd +0 -0
  446. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/selected_button_capsule.psd +0 -0
  447. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/selected_button_pointer.psd +0 -0
  448. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/30px/active_button.psd +0 -0
  449. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/30px/active_button_pointer.psd +0 -0
  450. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/30px/normal_button.psd +0 -0
  451. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/30px/normal_button_pointer.psd +0 -0
  452. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/30px/selected_active_button.psd +0 -0
  453. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/30px/selected_active_button_pointer.psd +0 -0
  454. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/30px/selected_button.psd +0 -0
  455. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/30px/selected_button_pointer.psd +0 -0
  456. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/popup/active_select.psd +0 -0
  457. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/popup/normal_select.psd +0 -0
  458. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/14px/checkbox_checked.psd +0 -0
  459. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/14px/checkbox_checked_active.psd +0 -0
  460. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/14px/checkbox_mixed.psd +0 -0
  461. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/14px/checkbox_mixed_active.psd +0 -0
  462. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/14px/checkbox_unchecked.psd +0 -0
  463. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/14px/checkbox_unchecked_active.psd +0 -0
  464. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/16px/checkbox_checked.psd +0 -0
  465. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/16px/checkbox_checked_active.psd +0 -0
  466. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/16px/checkbox_mixed.psd +0 -0
  467. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/16px/checkbox_mixed_active.psd +0 -0
  468. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/16px/checkbox_unchecked.psd +0 -0
  469. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/16px/checkbox_unchecked_active.psd +0 -0
  470. data/lib/frameworks/sproutcore/themes/ace/designs/psds/collection/source-list/selection.psd +0 -0
  471. data/lib/frameworks/sproutcore/themes/ace/designs/psds/disclosure/ace/disclosure_closed.psd +0 -0
  472. data/lib/frameworks/sproutcore/themes/ace/designs/psds/disclosure/ace/disclosure_closed_active.psd +0 -0
  473. data/lib/frameworks/sproutcore/themes/ace/designs/psds/disclosure/ace/disclosure_open.psd +0 -0
  474. data/lib/frameworks/sproutcore/themes/ace/designs/psds/disclosure/ace/disclosure_open_active.psd +0 -0
  475. data/lib/frameworks/sproutcore/themes/ace/designs/psds/menu/checkmark.psd +0 -0
  476. data/lib/frameworks/sproutcore/themes/ace/designs/psds/menu/checkmark_active.psd +0 -0
  477. data/lib/frameworks/sproutcore/themes/ace/designs/psds/menu/down.psd +0 -0
  478. data/lib/frameworks/sproutcore/themes/ace/designs/psds/menu/menu.psd +0 -0
  479. data/lib/frameworks/sproutcore/themes/ace/designs/psds/menu/menu_item.psd +0 -0
  480. data/lib/frameworks/sproutcore/themes/ace/designs/psds/menu/up.psd +0 -0
  481. data/lib/frameworks/sproutcore/themes/ace/designs/psds/panel/panel.psd +0 -0
  482. data/lib/frameworks/sproutcore/themes/ace/designs/psds/picker/popover/popover.psd +0 -0
  483. data/lib/frameworks/sproutcore/themes/ace/designs/psds/picker/popover/popover_empty.psd +0 -0
  484. data/lib/frameworks/sproutcore/themes/ace/designs/psds/picker/popover/popover_notoolbar.psd +0 -0
  485. data/lib/frameworks/sproutcore/themes/ace/designs/psds/picker/popover/popover_pointers.psd +0 -0
  486. data/lib/frameworks/sproutcore/themes/ace/designs/psds/picker/popover/popover_pointers_notoolbar.psd +0 -0
  487. data/lib/frameworks/sproutcore/themes/ace/designs/psds/progress/ace/progress_view_content.psd +0 -0
  488. data/lib/frameworks/sproutcore/themes/ace/designs/psds/progress/ace/progress_view_indeterminate_content.psd +0 -0
  489. data/lib/frameworks/sproutcore/themes/ace/designs/psds/progress/ace/progress_view_track.psd +0 -0
  490. data/lib/frameworks/sproutcore/themes/ace/designs/psds/radio/radio_active.psd +0 -0
  491. data/lib/frameworks/sproutcore/themes/ace/designs/psds/radio/radio_mixed.psd +0 -0
  492. data/lib/frameworks/sproutcore/themes/ace/designs/psds/radio/radio_mixed_active.psd +0 -0
  493. data/lib/frameworks/sproutcore/themes/ace/designs/psds/radio/radio_selected.psd +0 -0
  494. data/lib/frameworks/sproutcore/themes/ace/designs/psds/radio/radio_selected_active.psd +0 -0
  495. data/lib/frameworks/sproutcore/themes/ace/designs/psds/radio/radio_unselected.psd +0 -0
  496. data/lib/frameworks/sproutcore/themes/ace/designs/psds/scroller/horizontal/thumb.psd +0 -0
  497. data/lib/frameworks/sproutcore/themes/ace/designs/psds/scroller/horizontal/track_and_arrows.psd +0 -0
  498. data/lib/frameworks/sproutcore/themes/ace/designs/psds/scroller/horizontal/track_and_arrows_active.psd +0 -0
  499. data/lib/frameworks/sproutcore/themes/ace/designs/psds/scroller/vertical/thumb.psd +0 -0
  500. data/lib/frameworks/sproutcore/themes/ace/designs/psds/scroller/vertical/track_and_arrows.psd +0 -0
  501. data/lib/frameworks/sproutcore/themes/ace/designs/psds/scroller/vertical/track_and_arrows_active.psd +0 -0
  502. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/18px/segmented_active.psd +0 -0
  503. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/18px/segmented_normal.psd +0 -0
  504. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/18px/segmented_selected.psd +0 -0
  505. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/18px/segmented_selected_active.psd +0 -0
  506. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/24px/segmented_active.psd +0 -0
  507. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/24px/segmented_normal.psd +0 -0
  508. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/24px/segmented_selected.psd +0 -0
  509. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/24px/segmented_selected_active.psd +0 -0
  510. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/30px/segmented_active.psd +0 -0
  511. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/30px/segmented_normal.psd +0 -0
  512. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/30px/segmented_selected.psd +0 -0
  513. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/30px/segmented_selected_active.psd +0 -0
  514. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/44px/segmented_active.psd +0 -0
  515. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/44px/segmented_normal.psd +0 -0
  516. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/44px/segmented_selected.psd +0 -0
  517. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/44px/segmented_selected_active.psd +0 -0
  518. data/lib/frameworks/sproutcore/themes/ace/designs/psds/slider/ace/14px/knob.psd +0 -0
  519. data/lib/frameworks/sproutcore/themes/ace/designs/psds/slider/ace/14px/knob_active.psd +0 -0
  520. data/lib/frameworks/sproutcore/themes/ace/designs/psds/slider/ace/16px/knob.psd +0 -0
  521. data/lib/frameworks/sproutcore/themes/ace/designs/psds/slider/ace/16px/knob_active.psd +0 -0
  522. data/lib/frameworks/sproutcore/themes/ace/designs/psds/slider/ace/22px/knob.psd +0 -0
  523. data/lib/frameworks/sproutcore/themes/ace/designs/psds/slider/ace/22px/knob_active.psd +0 -0
  524. data/lib/frameworks/sproutcore/themes/ace/designs/psds/slider/ace/22px/track.psd +0 -0
  525. data/lib/frameworks/sproutcore/themes/ace/designs/psds/slider/ace/track.psd +0 -0
  526. data/lib/frameworks/sproutcore/themes/ace/designs/psds/toolbar/toolbar.psd +0 -0
  527. data/lib/frameworks/sproutcore/themes/ace/designs/switch/switch.psd +0 -0
  528. data/lib/frameworks/sproutcore/themes/ace/designs/switch/switch_handle.png +0 -0
  529. data/lib/frameworks/sproutcore/themes/ace/designs/switch/switch_handle.psd +0 -0
  530. data/lib/frameworks/sproutcore/themes/ace/designs/switch/switch_off.png +0 -0
  531. data/lib/frameworks/sproutcore/themes/ace/designs/switch/switch_off.psd +0 -0
  532. data/lib/frameworks/sproutcore/themes/ace/designs/switch/switch_on.png +0 -0
  533. data/lib/frameworks/sproutcore/themes/ace/designs/switch/switch_on.psd +0 -0
  534. data/lib/frameworks/sproutcore/themes/ace/resources/body.css +13 -0
  535. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/18px/active_button.png +0 -0
  536. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/18px/button.css +27 -0
  537. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/18px/normal_button.png +0 -0
  538. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/18px/selected_active_button.png +0 -0
  539. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/18px/selected_button.png +0 -0
  540. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/active_button.png +0 -0
  541. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/active_button_capsule.png +0 -0
  542. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/active_button_pointer.png +0 -0
  543. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/button.css +84 -0
  544. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/normal_button.png +0 -0
  545. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/normal_button_capsule.png +0 -0
  546. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/normal_button_pointer.png +0 -0
  547. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/selected_active_button.png +0 -0
  548. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/selected_active_button_capsule.png +0 -0
  549. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/selected_active_button_pointer.png +0 -0
  550. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/selected_button.png +0 -0
  551. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/selected_button_capsule.png +0 -0
  552. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/selected_button_pointer.png +0 -0
  553. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/active_button.png +0 -0
  554. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/active_button_pointer.png +0 -0
  555. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/button.css +66 -0
  556. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/normal_button.png +0 -0
  557. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/normal_button_pointer.png +0 -0
  558. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/selected_active_button.png +0 -0
  559. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/selected_active_button_pointer.png +0 -0
  560. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/selected_button.png +0 -0
  561. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/selected_button_pointer.png +0 -0
  562. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/44px/active_button.png +0 -0
  563. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/44px/button.css +34 -0
  564. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/44px/normal_button.png +0 -0
  565. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/44px/selected_active_button.png +0 -0
  566. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/44px/selected_button.png +0 -0
  567. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/button.css +28 -0
  568. data/lib/frameworks/sproutcore/themes/ace/resources/button/button.js +69 -0
  569. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/active_button.png +0 -0
  570. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/active_button_capsule.png +0 -0
  571. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/active_button_pointer.png +0 -0
  572. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/button.css +84 -0
  573. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/normal_button.png +0 -0
  574. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/normal_button_capsule.png +0 -0
  575. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/normal_button_pointer.png +0 -0
  576. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/selected_active_button.png +0 -0
  577. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/selected_active_button_capsule.png +0 -0
  578. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/selected_active_button_pointer.png +0 -0
  579. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/selected_button.png +0 -0
  580. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/selected_button_capsule.png +0 -0
  581. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/selected_button_pointer.png +0 -0
  582. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/active_button.png +0 -0
  583. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/active_button_pointer.png +0 -0
  584. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/button.css +66 -0
  585. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/normal_button.png +0 -0
  586. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/normal_button_pointer.png +0 -0
  587. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/selected_active_button.png +0 -0
  588. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/selected_active_button_pointer.png +0 -0
  589. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/selected_button.png +0 -0
  590. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/selected_button_pointer.png +0 -0
  591. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/button.css +17 -0
  592. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/button.js +3 -0
  593. data/lib/frameworks/sproutcore/themes/ace/resources/button/popup/active_select.png +0 -0
  594. data/lib/frameworks/sproutcore/themes/ace/resources/button/popup/normal_select.png +0 -0
  595. data/lib/frameworks/sproutcore/themes/ace/resources/button/popup/select.css +20 -0
  596. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox.css +40 -0
  597. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox_checked.png +0 -0
  598. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox_checked_active.png +0 -0
  599. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox_mixed.png +0 -0
  600. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox_mixed_active.png +0 -0
  601. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox_unchecked.png +0 -0
  602. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox_unchecked_active.png +0 -0
  603. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox.css +40 -0
  604. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox_checked.png +0 -0
  605. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox_checked_active.png +0 -0
  606. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox_mixed.png +0 -0
  607. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox_mixed_active.png +0 -0
  608. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox_unchecked.png +0 -0
  609. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox_unchecked_active.png +0 -0
  610. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/checkbox.css +7 -0
  611. data/lib/frameworks/sproutcore/themes/ace/resources/collection/normal/list.css +4 -0
  612. data/lib/frameworks/sproutcore/themes/ace/resources/collection/normal/list_item.css +17 -0
  613. data/lib/frameworks/sproutcore/themes/ace/resources/collection/source-list/selection.png +0 -0
  614. data/lib/frameworks/sproutcore/themes/ace/resources/collection/source-list/source-list.js +3 -0
  615. data/lib/frameworks/sproutcore/themes/ace/resources/collection/source-list/source_list_view.css +36 -0
  616. data/lib/frameworks/sproutcore/themes/ace/resources/disclosure/ace/disclosure.css +24 -0
  617. data/lib/frameworks/sproutcore/themes/ace/resources/disclosure/ace/disclosure_closed.png +0 -0
  618. data/lib/frameworks/sproutcore/themes/ace/resources/disclosure/ace/disclosure_closed_active.png +0 -0
  619. data/lib/frameworks/sproutcore/themes/ace/resources/disclosure/ace/disclosure_open.png +0 -0
  620. data/lib/frameworks/sproutcore/themes/ace/resources/disclosure/ace/disclosure_open_active.png +0 -0
  621. data/lib/frameworks/sproutcore/themes/ace/resources/loading.css +50 -0
  622. data/lib/frameworks/sproutcore/themes/ace/resources/master-detail/master-detail.css +27 -0
  623. data/lib/frameworks/sproutcore/themes/ace/resources/menu/checkmark.png +0 -0
  624. data/lib/frameworks/sproutcore/themes/ace/resources/menu/checkmark_active.png +0 -0
  625. data/lib/frameworks/sproutcore/themes/ace/resources/menu/down.png +0 -0
  626. data/lib/frameworks/sproutcore/themes/ace/resources/menu/menu.css +76 -0
  627. data/lib/frameworks/sproutcore/themes/ace/resources/menu/menu.png +0 -0
  628. data/lib/frameworks/sproutcore/themes/ace/resources/menu/menu_item.png +0 -0
  629. data/lib/frameworks/sproutcore/themes/ace/resources/menu/up.png +0 -0
  630. data/lib/frameworks/sproutcore/themes/ace/resources/pane/pane.css +3 -0
  631. data/lib/frameworks/sproutcore/themes/ace/resources/panel/panel.css +13 -0
  632. data/lib/frameworks/sproutcore/themes/ace/resources/panel/panel.js +20 -0
  633. data/lib/frameworks/sproutcore/themes/ace/resources/panel/panel.png +0 -0
  634. data/lib/frameworks/sproutcore/themes/ace/resources/picker/ace/picker.js +0 -0
  635. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/picker.js +32 -0
  636. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover.css +111 -0
  637. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover.js +12 -0
  638. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover.png +0 -0
  639. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover_empty.png +0 -0
  640. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover_notoolbar.png +0 -0
  641. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover_pointers.png +0 -0
  642. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover_pointers_notoolbar.png +0 -0
  643. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/workspace.js +28 -0
  644. data/lib/frameworks/sproutcore/themes/ace/resources/progress/ace/progress.css +27 -0
  645. data/lib/frameworks/sproutcore/themes/ace/resources/progress/ace/progress_view_content.png +0 -0
  646. data/lib/frameworks/sproutcore/themes/ace/resources/progress/ace/progress_view_track.png +0 -0
  647. data/lib/frameworks/sproutcore/themes/ace/resources/progress/progress.js +78 -0
  648. data/lib/frameworks/sproutcore/themes/ace/resources/radio/radio.css +63 -0
  649. data/lib/frameworks/sproutcore/themes/ace/resources/radio/radio_active.png +0 -0
  650. data/lib/frameworks/sproutcore/themes/ace/resources/radio/radio_mixed.png +0 -0
  651. data/lib/frameworks/sproutcore/themes/ace/resources/radio/radio_mixed_active.png +0 -0
  652. data/lib/frameworks/sproutcore/themes/ace/resources/radio/radio_selected.png +0 -0
  653. data/lib/frameworks/sproutcore/themes/ace/resources/radio/radio_selected_active.png +0 -0
  654. data/lib/frameworks/sproutcore/themes/ace/resources/radio/radio_unselected.png +0 -0
  655. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/horizontal.css +78 -0
  656. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/horizontal_touch.css +91 -0
  657. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/thumb.png +0 -0
  658. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/track_and_arrows.png +0 -0
  659. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/track_and_arrows_active.png +0 -0
  660. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/thumb.png +0 -0
  661. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/track_and_arrows.png +0 -0
  662. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/track_and_arrows_active.png +0 -0
  663. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/vertical.css +80 -0
  664. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/vertical_touch.css +92 -0
  665. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/18px/segmented.css +91 -0
  666. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/18px/segmented_active.png +0 -0
  667. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/18px/segmented_normal.png +0 -0
  668. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/18px/segmented_selected.png +0 -0
  669. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/18px/segmented_selected_active.png +0 -0
  670. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented.css +91 -0
  671. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented_active.png +0 -0
  672. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented_normal.png +0 -0
  673. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented_selected.png +0 -0
  674. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented_selected_active.png +0 -0
  675. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented.css +91 -0
  676. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented_active.png +0 -0
  677. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented_normal.png +0 -0
  678. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented_selected.png +0 -0
  679. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented_selected_active.png +0 -0
  680. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/44px/segmented.css +95 -0
  681. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/44px/segmented_active.png +0 -0
  682. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/44px/segmented_normal.png +0 -0
  683. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/44px/segmented_selected.png +0 -0
  684. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/44px/segmented_selected_active.png +0 -0
  685. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/segmented.css +79 -0
  686. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/14px/knob.png +0 -0
  687. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/14px/knob_active.png +0 -0
  688. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/14px/slider.css +27 -0
  689. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/16px/knob.png +0 -0
  690. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/16px/knob_active.png +0 -0
  691. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/16px/slider.css +27 -0
  692. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/22px/knob.png +0 -0
  693. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/22px/knob_active.png +0 -0
  694. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/22px/slider.css +27 -0
  695. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/22px/track.png +0 -0
  696. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/slider.css +3 -0
  697. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/slider.js +48 -0
  698. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/track.png +0 -0
  699. data/lib/frameworks/sproutcore/themes/ace/resources/split/split.css +5 -0
  700. data/lib/frameworks/sproutcore/themes/ace/resources/tab/tab.css +3 -0
  701. data/lib/frameworks/sproutcore/themes/ace/resources/toolbar/toolbar.css +8 -0
  702. data/lib/frameworks/sproutcore/themes/ace/resources/toolbar/toolbar.png +0 -0
  703. data/lib/frameworks/sproutcore/themes/ace/resources/well/well.css +8 -0
  704. data/lib/frameworks/sproutcore/themes/ace/resources/well/well.js +19 -0
  705. data/lib/frameworks/sproutcore/themes/ace/theme.js +14 -0
  706. data/lib/frameworks/sproutcore/themes/empty_theme/theme.js +16 -0
  707. data/lib/frameworks/sproutcore/themes/standard_theme/english.lproj/segmented.css +16 -21
  708. data/lib/sproutcore.rb +9 -2
  709. data/lib/sproutcore/builders.rb +2 -1
  710. data/lib/sproutcore/builders/base.rb +7 -2
  711. data/lib/sproutcore/builders/combine.rb +49 -1
  712. data/lib/sproutcore/builders/html.rb +2 -0
  713. data/lib/sproutcore/builders/javascript.rb +1 -1
  714. data/lib/sproutcore/builders/minify.rb +12 -12
  715. data/lib/sproutcore/builders/module.rb +72 -0
  716. data/lib/sproutcore/builders/string_wrapper.rb +43 -0
  717. data/lib/sproutcore/helpers/entry_sorter.rb +5 -9
  718. data/lib/sproutcore/helpers/static_helper.rb +13 -9
  719. data/lib/sproutcore/models/manifest_entry.rb +2 -2
  720. data/lib/sproutcore/models/target.rb +25 -11
  721. data/lib/sproutcore/rack/dev.rb +3 -3
  722. data/lib/sproutcore/tools.rb +51 -2
  723. data/lib/sproutcore/tools/build.rb +35 -7
  724. data/lib/sproutcore/version.rb +1 -0
  725. data/spec/buildtasks/manifest/prepare_build_tasks/bundle_spec.rb +5 -5
  726. data/spec/fixtures/builder_tests/Buildfile +2 -2
  727. data/spec/lib/builders/bundle_spec.rb +8 -8
  728. data/spec/lib/builders/strings_spec.rb +1 -0
  729. data/sproutcore.gemspec +9 -2
  730. data/vendor/chance/.gitignore +5 -0
  731. data/vendor/chance/Gemfile +4 -0
  732. data/vendor/chance/Rakefile +2 -0
  733. data/vendor/chance/bin/chance +72 -0
  734. data/vendor/chance/chance.gemspec +28 -0
  735. data/vendor/chance/lib/chance.rb +139 -0
  736. data/vendor/chance/lib/chance/imager.rb +13 -0
  737. data/vendor/chance/lib/chance/imagers/data_url.rb +34 -0
  738. data/vendor/chance/lib/chance/importer.rb +64 -0
  739. data/vendor/chance/lib/chance/instance.rb +225 -0
  740. data/vendor/chance/lib/chance/parser.rb +831 -0
  741. data/vendor/chance/lib/chance/perf.rb +17 -0
  742. data/vendor/chance/lib/chance/sass_extensions.rb +24 -0
  743. data/vendor/chance/lib/chance/slicing.rb +104 -0
  744. data/vendor/chance/lib/chance/version.rb +3 -0
  745. data/vendor/chance/test/case/abc.png +0 -0
  746. data/vendor/chance/test/case/more/abc.png +0 -0
  747. data/vendor/chance/test/case/more/another.css +4 -0
  748. data/vendor/chance/test/case/test1.css +22 -0
  749. data/vendor/chance/test/case/test2.css +6 -0
  750. data/vendor/sproutcore/SCCompiler.jar +0 -0
  751. data/vendor/sproutcore/lib/args4j-2.0.12.jar +0 -0
  752. data/vendor/sproutcore/lib/htmlcompressor-0.9.3.jar +0 -0
  753. data/{lib/sproutcore/vendor/yui-compressor → vendor/sproutcore/lib}/yuicompressor-2.4.2.jar +0 -0
  754. data/vendor/sproutcore/src/SCCompiler/build.xml +74 -0
  755. data/vendor/sproutcore/src/SCCompiler/lib/args4j-2.0.12.jar +0 -0
  756. data/vendor/sproutcore/src/SCCompiler/lib/htmlcompressor-0.9.3.jar +0 -0
  757. data/{lib/sproutcore/vendor/yui-compressor/SCyuicompressor-2.4.2.jar → vendor/sproutcore/src/SCCompiler/lib/yuicompressor-2.4.2.jar} +0 -0
  758. data/vendor/sproutcore/src/SCCompiler/lib/yuicompressor-2.4.4.jar +0 -0
  759. data/vendor/sproutcore/src/SCCompiler/manifest.mf +3 -0
  760. data/vendor/sproutcore/src/SCCompiler/nbproject/build-impl.xml +894 -0
  761. data/vendor/sproutcore/src/SCCompiler/nbproject/genfiles.properties +8 -0
  762. data/vendor/sproutcore/src/SCCompiler/nbproject/private/config.properties +0 -0
  763. data/vendor/sproutcore/src/SCCompiler/nbproject/private/private.properties +10 -0
  764. data/vendor/sproutcore/src/SCCompiler/nbproject/private/private.xml +4 -0
  765. data/vendor/sproutcore/src/SCCompiler/nbproject/project.properties +90 -0
  766. data/vendor/sproutcore/src/SCCompiler/nbproject/project.xml +15 -0
  767. data/vendor/sproutcore/src/SCCompiler/src/com/sproutcore/Main.java +348 -0
  768. metadata +686 -177
  769. data/lib/frameworks/sproutcore/CHANGELOG +0 -93
  770. data/lib/frameworks/sproutcore/frameworks/datejs/core.js +0 -865
  771. data/lib/frameworks/sproutcore/frameworks/datejs/english.lproj/en-US.js +0 -186
  772. data/lib/frameworks/sproutcore/frameworks/datejs/extras.js +0 -332
  773. data/lib/frameworks/sproutcore/frameworks/datejs/license.js +0 -25
  774. data/lib/frameworks/sproutcore/frameworks/datejs/parser.js +0 -1116
  775. data/lib/frameworks/sproutcore/frameworks/datejs/spanish.lproj/es-CO.js +0 -186
  776. data/lib/frameworks/sproutcore/frameworks/datejs/sugarpak.js +0 -475
  777. data/lib/frameworks/sproutcore/frameworks/datejs/time.js +0 -269
  778. data/lib/frameworks/sproutcore/frameworks/datejs/validators/datejs.js +0 -34
  779. data/lib/frameworks/sproutcore/frameworks/foundation/protocols/inline_editor_delegate.js +0 -84
  780. data/lib/frameworks/sproutcore/frameworks/foundation/system/bundle.js +0 -337
  781. data/lib/frameworks/sproutcore/frameworks/foundation/system/ready.js +0 -197
  782. data/lib/frameworks/sproutcore/frameworks/foundation/system/utils.js +0 -710
  783. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_core.js +0 -1334
  784. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_dimensions.js +0 -387
  785. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_selector.js +0 -405
  786. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/isArray.js +0 -25
  787. data/lib/frameworks/sproutcore/frameworks/statechart/mixins/statechart.js +0 -336
  788. data/lib/frameworks/sproutcore/frameworks/statechart/tests/basic.js +0 -90
  789. data/lib/frameworks/sproutcore/frameworks/statechart/tests/history.js +0 -71
  790. data/lib/frameworks/sproutcore/frameworks/statechart/tests/nested.js +0 -59
  791. data/lib/frameworks/sproutcore/frameworks/statechart/tests/transient.js +0 -148
  792. data/lib/sproutcore/builders/bundle.rb +0 -63
@@ -3,95 +3,95 @@
3
3
  // ==========================================================================
4
4
 
5
5
  /** @class
6
-
6
+
7
7
  Allows for easier handling of the document.cookie object. To create a cookie,
8
8
  simply call SC.Cookie.create. To retrieve a cookie, use SC.Cookie.find.
9
9
  Cookies are not added to document.cookie, which SC.Cookie.find uses, until you
10
10
  have called SC.Cookie#write.
11
-
11
+
12
12
  Heavy inspiration from the
13
13
  {@link <a href="http://plugins.jquery.com/project/cookie">jQuery cookie plugin</a>}.
14
-
14
+
15
15
  @extends SC.Object
16
16
  @since Sproutcore 1.0
17
17
  @author Colin Campbell
18
18
  */
19
19
 
20
20
  SC.Cookie = SC.Object.extend({
21
-
21
+
22
22
  // ..........................................................
23
23
  // PROPERTIES
24
- //
25
-
24
+ //
25
+
26
26
  /**
27
27
  The name of the cookie
28
-
28
+
29
29
  @property {String}
30
30
  */
31
31
  name: null,
32
-
32
+
33
33
  /**
34
34
  The value of the cookie
35
-
35
+
36
36
  @property {String}
37
37
  */
38
38
  value: '',
39
-
39
+
40
40
  /**
41
41
  Amount of time until the cookie expires. Set to -1 in order to delete the cookie.
42
-
42
+
43
43
  @property {Integer|SC.DateTime|Date}
44
44
  */
45
45
  expires: null,
46
-
46
+
47
47
  /**
48
48
  The value of the path atribute of the cookie (default: path of page that created the cookie).
49
-
49
+
50
50
  @property {String}
51
51
  */
52
52
  path: null,
53
-
53
+
54
54
  /**
55
55
  The value of the domain attribute of the cookie (default: domain of page that created the cookie).
56
-
56
+
57
57
  @property {String}
58
58
  */
59
59
  domain: null,
60
-
60
+
61
61
  /**
62
62
  If true, the secure attribute of the cookie will be set and the cookie transmission will
63
63
  require a secure protocol (like HTTPS).
64
-
64
+
65
65
  @property {Boolean}
66
66
  */
67
67
  secure: NO,
68
-
68
+
69
69
  /**
70
70
  Walk like a duck
71
-
71
+
72
72
  @property {Boolean}
73
73
  @isReadOnly
74
74
  */
75
75
  isCookie: YES,
76
-
76
+
77
77
  // ..........................................................
78
78
  // METHODS
79
- //
80
-
79
+ //
80
+
81
81
  /**
82
82
  Sets SC.Cookie#expires to -1, which destroys the cookie.
83
83
  */
84
84
  destroy: function() {
85
85
  this.set('expires', -1);
86
86
  this.write();
87
-
87
+
88
88
  sc_super();
89
89
  },
90
-
90
+
91
91
  /**
92
92
  Writes this SC.Cookie to document.cookie and adds it to SC.Cookie collection. To find this
93
93
  cookie later, or on reload, use SC.Cookie.find.
94
-
94
+
95
95
  @see SC.Cookie.find
96
96
  */
97
97
  write: function() {
@@ -101,7 +101,7 @@ SC.Cookie = SC.Object.extend({
101
101
  path = this.get('path'),
102
102
  domain = this.get('domain'),
103
103
  secure = this.get('secure');
104
-
104
+
105
105
  var expiresOutput = '';
106
106
  if (expires && (SC.typeOf(expires) === SC.T_NUMBER || (SC.DateTime && expires.get && expires.get('milliseconds')) || SC.typeOf(expires.toUTCString) === SC.T_FUNCTION)) {
107
107
  var date;
@@ -115,29 +115,29 @@ SC.Cookie = SC.Object.extend({
115
115
  else if (SC.typeOf(expires.toUTCString) === SC.T_FUNCTION) {
116
116
  date = expires;
117
117
  }
118
-
118
+
119
119
  if (date) {
120
120
  expiresOutput = '; expires=' + date.toUTCString();
121
121
  }
122
122
  }
123
-
123
+
124
124
  var pathOutput = path ? '; path=' + path : '';
125
125
  var domainOutput = domain ? '; domain=' + domain : '';
126
126
  var secureOutput = secure ? '; secure' : '';
127
-
127
+
128
128
  document.cookie = [name, '=', encodeURIComponent(value), expiresOutput, pathOutput, domainOutput, secureOutput].join('');
129
-
129
+
130
130
  return this;
131
131
  }
132
-
132
+
133
133
  });
134
134
 
135
135
  SC.Cookie.mixin(
136
136
  /** @scope SC.Cookie */ {
137
-
137
+
138
138
  /**
139
139
  Finds a cookie that has been stored
140
-
140
+
141
141
  @param {String} name The name of the cookie
142
142
  @returns SC.Cookie object containing name and value of cookie
143
143
  */
@@ -156,5 +156,5 @@ SC.Cookie.mixin(
156
156
  }
157
157
  return null;
158
158
  }
159
-
160
- });
159
+
160
+ });
@@ -1,1941 +1,41 @@
1
- // ==========================================================================
2
- // Project: SproutCore - JavaScript Application Framework
3
- // Copyright: ©2006-2011 Strobe Inc. and contributors.
4
- // Portions ©2008-2010 Apple Inc. All rights reserved.
5
- // License: Licensed under MIT license (see license.js)
6
- // ==========================================================================
7
- /*globals CQ add*/
1
+ SC.mixin(SC.$.fn, /** @scope SC.$.prototype */ {
8
2
 
9
- require('system/builder') ;
10
-
11
- /**
12
- CoreQuery is a simplified DOM manipulation library used internally by
13
- SproutCore to find and edit DOM elements. Outside of SproutCore, you
14
- should generally use a more full-featured DOM library such as Prototype
15
- or jQuery.
16
-
17
- CoreQuery itself is a subset of jQuery with some additional plugins. If
18
- you have jQuery already loaded when SproutCore loads, in fact, it will
19
- replace CoreQuery with the full jQuery library and install any CoreQuery
20
- plugins, including support for the SC.Enumerable mixin.
21
-
22
- Much of this code is adapted from jQuery 1.2.6, which is available under an
23
- MIT license just like SproutCore.
24
-
25
- h1. Using CoreQuery
26
-
27
- You can work with CoreQuery much like you would work with jQuery. The core
28
- manipulation object is exposed as SC.$. To find some elements on the page
29
- you just pass in a selector like this:
30
-
31
- {{{
32
- var cq = SC.$('p');
33
- }}}
34
-
35
- The object returned from this call is a CoreQuery object that implements
36
- SC.Enumerable as well as a number of other useful manipulation methods.
37
- Often times we call this object the "matched set", because it usually an
38
- array of elements matching the selector key you passed.
39
-
40
- To work with the matched set, just call the various helper methods on it.
41
- Here are some of the more useful ones:
42
-
43
- {{{
44
- // change all of the text red
45
- cq.css('color','red');
46
-
47
- // hide/show the set
48
- cq.hide(); cq.show();
49
-
50
- // set the text content of the set
51
- cq.text("Hello World!");
52
-
53
- }}}
54
-
55
- Of course, you can also chain these methods, just like jQuery. Here is
56
- how you might find all of the headings in your page, change their text and
57
- color:
58
-
59
- {{{
60
- SC.$('h1').text('Hello World!').css('color','red');
61
- }}}
62
-
63
- h1. Using CoreQuery with Views
64
-
65
- Usually you will not want to just blindly edit the HTML content in your
66
- application. Instead, you will use CoreQuery to update the portion of the
67
- page managed by your SC.View instances. Every SC.View instance has a $()
68
- property just like SC.$(). The difference is that this function will start
69
- searching from the root of the view. For example, you could use the
70
- following code in your updateDisplay method to set your content and color:
71
-
72
- {{{
73
- updateDisplay: function() {
74
- this.$().text(this.get('value')).css('color','red');
75
- }
76
- }}}
77
-
78
- You could also work on content within your view, for example this will
79
- change the title on your view held in the span.title element:
80
-
81
- {{{
82
- updateDisplay: function() {
83
- this.$('span.title').text('Hello World');
84
- this.$().setClassName('sc-enabled', YES) ;
85
- }
86
- }}}
87
-
88
- @class
89
- @extends SC.Builder.fn
90
- */
91
- SC.CoreQuery = (function() {
92
- // Define CoreQuery inside of its own scope to support some jQuery idioms.
93
-
94
- // A simple way to check for HTML strings or ID strings
95
- // (both of which we optimize for)
96
- var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
97
- // Is it a simple selector
98
- isSimple = /^.[^:#\[\.]*$/;
99
-
100
- // Regular expressions
101
- var CQHtmlRegEx =/ CQ\d+="(?:\d+|null)"/g,
102
- tagSearchRegEx = /(<(\w+)[^>]*?)\/>/g,
103
- xmlTagsRegEx = /^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i,
104
- checkforSpaceRegEx = /\s+/,
105
- trimWhiteSpaceRegEx = /^\s+/,
106
- bodyHTMLOffsetRegEx = /^body|html$/i,
107
- specialAttributesRegEx = /href|src|style/,
108
- tagsWithTabIndexRegEx = /(button|input|object|select|textarea)/i,
109
- alphaDetectRegEx = /alpha\([^)]*\)/,
110
- alphaReplaceRegEx = /opacity=([^)]*)/;
111
-
112
- var styleFloat = SC.browser.msie ? "styleFloat" : "cssFloat";
113
-
114
- // used for the find() method.
115
- var chars = (SC.browser.safari && parseInt(SC.browser.version,0) < 417) ?
116
- "(?:[\\w*_-]|\\\\.)" :
117
- "(?:[\\w\u0128-\uFFFF*_-]|\\\\.)" ;
118
- var quickID = new RegExp("^(" + chars + "+)(#)(" + chars + "+)") ;
119
- var singleClass = new RegExp("^([#.]?)(" + chars + "*)");
120
- var quickSplit = new RegExp("([#.]?)(" + chars + "*)",'g');
121
-
122
- // Constants used in CQ.css()
123
- var LEFT_RIGHT = ["Left", "Right"];
124
- var TOP_BOTTOM = ["Top", "Bottom"];
125
- var CSS_DISPLAY_PROPS = {
126
- position: "absolute", visibility: "hidden", display:"block"
127
- } ;
128
-
129
- var getWH = function getWH(elem, name, which) {
130
- var val = name === "width" ? elem.offsetWidth : elem.offsetHeight;
131
- var padding = 0, border = 0, loc=which.length, dim;
132
- while(--loc>=0) {
133
- dim = which[loc];
134
- padding += parseFloat(CQ.curCSS( elem, "padding" + dim, true)) || 0;
135
- border += parseFloat(CQ.curCSS( elem, "border" + dim + "Width", true)) ||0;
136
- }
137
- val -= Math.round(padding + border);
138
- return val;
139
- } ;
140
-
141
- var expando = SC.guidKey, uuid = 0, windowData = {},
142
- // exclude the following css properties to add px
143
- exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
144
- // cache defaultView
145
- defaultView = document.defaultView || {};
146
-
147
- // A helper method for determining if an element's values are broken
148
- var styleIsBorked = function styleIsBorked( elem ) {
149
- if ( !SC.browser.safari ) return false;
150
-
151
- // defaultView is cached
152
- var ret = defaultView.getComputedStyle( elem, null );
153
- return !ret || ret.getPropertyValue("color") === "";
154
- } ;
155
-
156
-
157
-
158
- // Helper function used by the dimensions and offset modules
159
- function num(elem, prop) {
160
- return elem[0] && parseInt( CQ.curCSS(elem[0], prop, true), 10 ) || 0;
161
- }
162
-
163
- var CoreQuery, CQ ;
164
-
165
- // implement core methods here from jQuery that we want available all the
166
- // time. Use this area to implement jQuery-compatible methods ONLY.
167
- // New methods should be added at the bottom of the file, where they will
168
- // be installed as plugins on CoreQuery or jQuery.
169
- CQ = CoreQuery = SC.Builder.create( /** @scope SC.CoreQuery.fn */ {
170
-
171
- /** Indicates that this is a jQuery-like object. */
172
- jquery: 'SC.CoreQuery',
173
-
174
- /**
175
- Called on a new CoreQuery instance when it is first created. You
176
- can pass a variety of options to the CoreQuery constructor function
177
- including:
178
-
179
- - a simple selector: this will find the element and return it
180
- - element or array of elements - this will return a query with them
181
- - html-string: this will convert to DOM.
182
-
183
- @returns {CoreQuery} CoreQuery instance
184
- */
185
- init: function( selector, context ) {
186
-
187
- // Make sure that a selection was provided
188
- selector = selector || document;
189
-
190
- // Handle $(DOMElement)
191
- if ( selector.nodeType ) {
192
- this[0] = selector;
193
- this.length = 1;
194
- return this ;
195
-
196
- // Handle HTML strings
197
- } else if ( typeof selector === "string" ) {
198
- // Are we dealing with HTML string or an ID?
199
- var match = quickExpr.exec( selector );
200
-
201
- // Verify a match, and that no context was specified for #id
202
- if ( match && (match[1] || !context) ) {
203
-
204
- // HANDLE: $(html) -> $(array)
205
- if ( match[1] ) {
206
- selector = CQ.clean( [ match[1] ], context );
207
- }
208
- // HANDLE: $("#id")
209
- else {
210
- var elem = document.getElementById( match[3] );
211
-
212
- // Make sure an element was located
213
- if ( elem ){
214
- // Handle the case where IE and Opera return items
215
- // by name instead of ID
216
- if ( elem.id != match[3] ) return CQ().find( selector );
217
-
218
- // Otherwise, we inject the element directly into the jQuery object
219
- return CQ( elem );
220
- }
221
- selector = [];
222
- }
223
-
224
- // HANDLE: $(expr, [context])
225
- // (which is just equivalent to: $(content).find(expr)
226
- } else return CQ( context ).find( selector );
227
-
228
- // HANDLE: $(function)
229
- // Shortcut for document ready
230
- } else if (SC.typeOf(selector) === SC.T_FUNCTION) {
231
- return SC.ready(selector);
232
- }
233
-
234
- return this.setArray(CQ.makeArray(selector));
235
- },
236
-
237
- /** Return the number of elements in the matched set. */
238
- size: function() { return this.length; },
239
-
240
- /** Return the nth element of the working array OR return a clean array
241
- with the result set, if no number is passed.
242
-
243
- @param {Number} num (Optional)
244
- @returns {Object|Array}
245
- */
246
- get: function( num ) {
247
- return num === undefined ? CQ.makeArray(this) : this[num];
248
- },
249
-
250
- /**
251
- Find subelements matching the passed selector. Note that CoreQuery
252
- supports only a very simplified selector search method. See
253
- CoreQuery.find() for more information.
254
-
255
- @param {String} selector
256
- @returns {CoreQuery} new instance with match
257
- */
258
- find: function( selector ) {
259
- var elems = CQ.map(this, function(elem){
260
- return CQ.find( selector, elem );
261
- });
262
-
263
- return this.pushStack(elems);
264
- },
265
-
266
- /**
267
- Filters the matching set to include only those matching the passed
268
- selector. Note that CoreQuery supports only a simplified selector
269
- search method. See CoreQuery.find() for more information.
270
-
271
- Also note that CoreQuery implements SC.Enumerable, which means you can
272
- also call this method with a callback and target and the callback will
273
- be executed on every element in the matching set to return a result.
274
-
275
- @param {String} selector
276
- @returns {CoreQuery}
277
- */
278
- filter: function( selector ) {
279
- return this.pushStack(
280
- (SC.typeOf(selector) === SC.T_FUNCTION) &&
281
- CQ.grep(this, function(elem, i){
282
- return selector.call( elem, i );
283
- }) || CQ.multiFilter( selector, this ) );
284
- },
285
-
286
- /**
287
- Returns the results not matching the passed selector. This is the
288
- opposite of filter.
289
-
290
-
291
- @param {String} selector
292
- @returns {CoreQuery}
293
- */
294
- not: function( selector ) {
295
- if ( typeof selector === "string" ) {
296
- // test special case where just one selector is passed in
297
- if ( isSimple.test( selector ) ) {
298
- return this.pushStack( CQ.multiFilter( selector, this, true ) );
299
- }else {
300
- selector = CQ.multiFilter( selector, this );
301
- }
302
- }
303
-
304
- var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType;
305
- return this.filter(function() {
306
- return isArrayLike ? CQ.inArray( this, selector ) < 0 : this != selector;
307
- });
308
- },
309
-
310
- /**
311
- Force the current matched set of elements to become the specified array
312
- of elements (destroying the stack in the process) You should use
313
- pushStack() in order to do this, but maintain the stack.
314
-
315
- This method is mostly used internally. You will not need to use it
316
- yourself very often.
317
-
318
- @param {Array} elems
319
- @returns {CoreQuery} receiver
320
- */
321
- setArray: function( elems ) {
322
- // Resetting the length to 0, then using the native Array push
323
- // is a super-fast way to populate an object with array-like properties
324
- this.length = 0;
325
- Array.prototype.push.apply( this, elems );
326
- return this;
327
- },
328
-
329
- /**
330
- Executes the passed function on every element in the CoreQuery object.
331
- Returns an array with the return values. Note that null values will
332
- be omitted from the resulting set. This differs from SC.Enumerable and
333
- the JavaScript standard.
334
-
335
- The callback must have the signature:
336
-
337
- {{{
338
- function(currentElement, currentIndex) { return mappedValue; }
339
- }}}
340
-
341
- Note that "this" on the function will also be the currentElement.
342
-
343
- @param {Function} callback
344
- @returns {CoreQuery} results
345
- */
346
- map: function( callback ) {
347
- return this.pushStack( CQ.map(this, function(elem, i){
348
- return callback.call( elem, i, elem );
349
- }));
350
- },
351
-
352
- /**
353
- Execute a callback for every element in the matched set. (You can seed
354
- the arguments with an array of args, but this is only used internally.)
355
-
356
- @param {Function} callback
357
- @param {Object} args
358
- @returns {CoreQuery} receiver
359
- */
360
- each: function( callback, args ) {
361
- return CQ.each( this, callback, args );
362
- },
363
-
364
- /**
365
- Determine the position of an element within a matched set of elements.
366
- jQuery-compatible name for indexOf().
367
-
368
- @param {Element} elem
369
- @returns {Number} location
370
- */
371
- index: function( elem ) {
372
- if (elem && elem.jquery) elem = elem[0];
373
- return Array.prototype.indexOf.call(this, elem);
374
- },
375
-
376
- /**
377
- Returns a new CoreQuery object that contains just the matching item.
378
-
379
- @param {Number} i
380
- @returns {CoreQuery}
381
- */
382
- eq: function( i ) {
383
- return this.slice( i, +i + 1 );
384
- },
385
-
386
- /**
387
- Slice the CoreQuery result set just like you might slice and array.
388
- Returns a new CoreQuery object with the result set.
389
-
390
- @returns {CoreQuery}
391
- */
392
- slice: function() {
393
- return this.pushStack( Array.prototype.slice.apply( this, arguments ) );
394
- },
395
-
396
- /** Adds the relevant elements to the existing matching set. */
397
- add: function( selector ) {
398
- return this.pushStack( CQ.merge(
399
- this.get(),
400
- typeof selector === 'string' ?
401
- CQ( selector ) :
402
- CQ.makeArray( selector )
403
- ).uniq()) ;
404
- },
405
-
406
- /**
407
- Get to set the named attribute value on the element. You can either
408
- pass in the name of an attribute you would like to read from the first
409
- matched element, a single attribute/value pair to set on all elements
410
- or a hash of attribute/value pairs to set on all elements.
411
-
412
- @param {String} name attribute name
413
- @param {Object} value attribute value
414
- @param {String} type ?
415
- @returns {CoreQuery} receiver
416
- */
417
- attr: function( name, value, type ) {
418
- var options = name;
419
-
420
- // Look for the case where we're accessing a style value
421
- if ( typeof name === "string" ) {
422
- if ( value === undefined ) {
423
- return this[0] && CQ[ type || "attr" ]( this[0], name );
424
- }
425
- else {
426
- options = {};
427
- options[ name ] = value;
428
- }
429
- }
430
- // Check to see if we're setting style values
431
- return this.each(function(i){
432
- // Set all the styles
433
- for ( name in options ) {
434
- CQ.attr(
435
- (type)?this.style:this,
436
- name, CQ.prop( this, options[ name ], type, i, name ));
437
- }
438
- });
439
- },
440
-
441
- html: function( value ) {
442
- return value === undefined ?
443
- (this[0] ?
444
- this[0].innerHTML.replace(CQHtmlRegEx, "") :
445
- null) :
446
- this.empty().append( value );
447
- },
448
-
449
- andSelf: function() { return this.add( this.prevObject ); },
450
-
451
- /**
452
- Returns YES if every element in the matching set matches the passed
453
- selector. Remember that only simple selectors are supported in
454
- CoreQuery.
455
-
456
- @param {String} selector
457
- @return {Boolean}
458
- */
459
- is: function( selector ) {
460
- return !!selector && CQ.multiFilter( selector, this ).length > 0;
461
- },
462
-
463
- /**
464
- Returns YES if every element in the matching set has the named CSS
465
- class.
466
-
467
- @param {String} className
468
- @returns {Boolean}
469
- */
470
- hasClass: function( className ) {
471
- return Array.prototype.every.call(this, function(elem) {
472
- return (elem.nodeType===1) && CQ.className.has(elem, className) ;
473
- });
474
- },
475
-
476
- /**
477
- Provides a standardized, cross-browser method to get and set the
478
- value attribute of a form element. Optionally pass a value to set or
479
- no value to get.
480
-
481
- @param {Object} value
482
- @return {Object|CoreQuery}
483
- */
484
- val: function( value ) {
485
-
486
- // get the value
487
- if ( value === undefined ) {
488
- var elem = this[0];
489
- if (elem) {
490
- if(CQ.nodeName(elem, 'option')) {
491
- return (elem.attributes.value || {}).specified ? elem.value : elem.text;
492
- }
493
- // We need to handle select boxes special
494
- if ( CQ.nodeName( elem, "select" ) ) {
495
- var index = elem.selectedIndex,
496
- values = [],
497
- options = elem.options,
498
- one = elem.type === "select-one",
499
- option;
500
-
501
- // Nothing was selected
502
- if ( index < 0 ) return null;
503
-
504
- // Loop through all the selected options
505
- var i, max = one ? index+1:options.length;
506
- for (i = one ? index : 0; i < max; i++ ) {
507
- option = options[ i ];
508
- if ( option.selected ) {
509
- value = CQ(option).val(); // get value
510
- if (one) return value; // We don't need an array for one
511
- values.push( value ); // Multi-Selects return an array
512
- }
513
- }
514
-
515
- return values;
516
- }
517
-
518
- // Everything else, we just grab the value
519
- return (elem.value || "").replace(/\r/g, "");
520
- }
521
- return undefined;
522
-
523
- // otherwise set the value
524
- } else {
525
- if( typeof value === "number" ) value += ''; // force to string
526
- this.each(function(){
527
- if ( this.nodeType !== 1 ) return;
528
-
529
- // handle radio/checkbox. set the checked value
530
- if (SC.typeOf(value) === SC.T_ARRAY && (/radio|checkbox/).test(this.type)) {
531
- this.checked = (CQ.inArray(this.value, value) >= 0 ||
532
- CQ.inArray(this.name, value) >= 0);
533
-
534
- // handle selects
535
- } else if ( CQ.nodeName( this, "select" ) ) {
536
- var values = CQ.makeArray(value);
537
- CQ( "option", this ).each(function(){
538
- this.selected = (CQ.inArray( this.value, values ) >= 0 ||
539
- CQ.inArray( this.text, values ) >= 0);
540
- });
541
-
542
- if (!values.length) this.selectedIndex = -1;
543
-
544
- // otherwise, just set the value property
545
- } else this.value = value;
546
- });
547
- }
548
- return this ;
549
- },
550
-
551
- /**
552
- Returns a clone of the matching set of elements. Note that this will
553
- NOT clone event handlers like the jQuery version does becaue CoreQuery
554
- does not deal with events.
555
- */
556
- clone: function() {
557
- // Do the clone
558
- var ret = this.map(function(){
559
- if ( SC.browser.msie && !CQ.isXMLDoc(this) ) {
560
- // IE copies events bound via attachEvent when
561
- // using cloneNode. Calling detachEvent on the
562
- // clone will also remove the events from the orignal
563
- // In order to get around this, we use innerHTML.
564
- // Unfortunately, this means some modifications to
565
- // attributes in IE that are actually only stored
566
- // as properties will not be copied (such as the
567
- // the name attribute on an input).
568
- var clone = this.cloneNode(true),
569
- container = document.createElement("div");
570
- container.appendChild(clone);
571
- return CQ.clean([container.innerHTML])[0];
572
- } else return this.cloneNode(true);
573
- });
574
-
575
- // Need to set the expando to null on the cloned set if it exists
576
- // removeData doesn't work here, IE removes it from the original as well
577
- // this is primarily for IE but the data expando shouldn't be copied
578
- // over in any browser
579
- var clone = ret.find("*").andSelf().each(function(){
580
- if ( this[ SC.guidKey ] !== undefined ) {
581
- this[ SC.guidKey ] = null;
582
- }
583
- });
584
-
585
- // Return the cloned set
586
- return ret;
587
- },
588
-
589
- /**
590
- Set or retrieve the specified CSS value. Pass only a key to get the
591
- current value, pass a key and value to change it.
592
-
593
- @param {String} key
594
- @param {Object} value
595
- @returns {Object|CoreQuery}
596
- */
597
- css: function( key, value ) {
598
- // ignore negative width and height values
599
- if ((key === 'width' || key === 'height') && parseFloat(value,0) < 0 ) {
600
- value = undefined;
601
- }
602
- return this.attr( key, value, "curCSS" );
603
- },
604
-
605
- /**
606
- Set or retrieve the text content of an element. Pass a text element to
607
- update or set to end it.
608
-
609
- @param {String} text
610
- @returns {String|CoreQuery}
611
- */
612
- text: function( text ) {
613
- if ( text !== undefined && typeof text !== "object" && text != null ) {
614
- return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
615
- }
616
- var ret = "";
617
-
618
- CQ.each( text || this, function(){
619
- CQ.each( this.childNodes, function(){
620
- if ( this.nodeType !== 8 ){
621
- ret += this.nodeType !== 1 ?
622
- this.nodeValue : CQ.fn.text( [ this ] );
623
- }
624
- });
625
- });
626
-
627
- return ret;
628
- },
629
-
630
- /** Simple method to show elements without animation. */
631
- show: function() {
632
- var isVisible = SC.$.isVisible;
633
- this.each(function() {
634
- if (!isVisible(this)) {
635
-
636
- // try to restore to natural layout as defined by CSS
637
- this.style.display = this.oldblock || '';
638
-
639
- // handle edge case where the CSS style is none so we can't detect
640
- // the natural display state.
641
- if (CQ.css(this,'display') === 'none') {
642
- var elem = CQ('<' + this.tagName + '/>');
643
- CQ('body').append(elem);
644
- this.style.display = elem.css('display');
645
- // edge case where we still can't get the display
646
- if (this.style.display === 'none') this.style.display = 'block';
647
- elem.remove(); elem = null;
648
- }
649
- }
650
- }) ;
651
- return this ;
652
- },
653
-
654
- /** Simple method to hide elements without animation. */
655
- hide: function() {
656
- var isVisible = SC.$.isVisible;
657
- this.each(function() {
658
- if (isVisible(this)) {
659
- this.oldblock = this.oldblock || CQ.css(this,'display');
660
- this.style.display = 'none';
661
- }
662
- }) ;
663
- return this ;
664
- },
665
-
666
- /**
667
- Low-level dom manipulation method used by append(), before(), after()
668
- among others. Unlike the jQuery version, this version does not execute
669
- <script> tags. That is generally not a good way to input scripts.
670
- */
671
- domManip: function( args, table, reverse, callback ) {
672
- var clone = this.length > 1, elems;
673
-
674
- return this.each(function(){
675
- if ( !elems ) {
676
- elems = CQ.clean( args, this.ownerDocument );
677
- if (reverse) elems.reverse();
678
- }
679
-
680
- var obj = this;
681
- if ( table && CQ.nodeName( this, "table" ) && CQ.nodeName( elems[0], "tr" ) ) {
682
- obj = this.getElementsByTagName("tbody")[0] || this.appendChild( this.ownerDocument.createElement("tbody") );
683
- }
684
-
685
- CQ.each(elems, function(){
686
- var elem = clone ? CQ( this ).clone( true )[0] : this;
687
- // Inject the elements into the document
688
- callback.call( obj, elem );
689
- });
690
- });
691
- },
692
-
693
- append: function() {
694
- return this.domManip(arguments, true, false, function(elem){
695
- if (this.nodeType === 1) this.appendChild( elem );
696
- });
697
- },
698
-
699
- prepend: function() {
700
- return this.domManip(arguments, true, true, function(elem){
701
- if (this.nodeType === 1) this.insertBefore( elem, this.firstChild );
702
- });
703
- },
704
-
705
- before: function() {
706
- return this.domManip(arguments, false, false, function(elem){
707
- this.parentNode.insertBefore( elem, this );
708
- });
709
- },
710
-
711
- after: function() {
712
- return this.domManip(arguments, false, true, function(elem){
713
- this.parentNode.insertBefore( elem, this.nextSibling );
714
- });
715
- },
716
-
717
- replaceWith: function( value ) {
718
- return this.after( value ).remove();
719
- },
720
-
721
- removeData: function( key ){
722
- return this.each(function(){ SC.removeData( this, key ); });
723
- }
724
-
725
- }) ;
726
-
727
- // add useful helper methods to CoreQuery
728
- CoreQuery.mixin(/** @scope SC.CoreQuery */ {
729
-
730
- nodeName: function( elem, name ) {
731
- return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
732
- },
733
-
734
- /**
735
- Execute the passed callback on the elems array, returning an array with
736
- the mapped values. Note that null return values are left out of the
737
- resulting mapping array. This differs from the standard map() function
738
- defined by SC.Enumerable and the JavaScript standard.
739
-
740
- The callback must have the signature:
741
-
742
- {{{
743
- function(currentElement, currentIndex) { return mappedValue; }
744
- }}}
745
-
746
- Note that "this" on the function will also be the currentElement.
747
-
748
- @param {Array} elems
749
- @param {Function} callback
750
- @returns {Array} mapped elements
751
- */
752
- map: function( elems, callback ) {
753
- var ret = [], value, i, length;
754
-
755
- // Go through the array, translating each of the items to their
756
- // new value (or values).
757
- for ( i = 0, length = elems.length; i < length; i++ ) {
758
- value = callback( elems[ i ], i );
759
-
760
- if ( value != null ) ret[ ret.length ] = value;
761
- }
762
-
763
- return ret.concat.apply([],ret) ;
764
- },
765
-
766
- /**
767
- Executes the passed callback on each item in the iterable object
768
- passed. This deviates from the standard getEach() method defined in
769
- SC.Enumerable and in the JavaScript standards.
770
-
771
- @param {Array} object
772
- @param {Function} callback
773
- @param {Object} args internal use only
774
- @returns {Object} object
775
- */
776
- each: function( object, callback, args ) {
777
- var name, i = 0, length = object.length;
778
-
779
- if ( args ) {
780
- if ( length === undefined ) {
781
- for ( name in object ) {
782
- if ( callback.apply( object[ name ], args ) === false ) break;
783
- }
784
- } else {
785
- for ( ; i < length; ) {
786
- if ( callback.apply( object[ i++ ], args ) === false ) break;
787
- }
788
- }
789
- // A special, fast, case for the most common use of each
790
- } else {
791
- if ( length === undefined ) {
792
- for ( name in object ) {
793
- if ( callback.call( object[ name ], name, object[ name ] ) === false ) break;
794
- }
795
- } else {
796
- for ( var value = object[0];
797
- i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
798
- }
799
- }
800
-
801
- return object;
802
- },
803
-
804
- isXMLDoc: function( elem ) {
805
- return elem.documentElement && !elem.body ||
806
- elem.tagName && elem.ownerDocument && !elem.ownerDocument.body;
807
- },
808
-
809
- clean: function( elems, context ) {
810
- var ret = [];
811
- context = context || document;
812
- // !context.createElement fails in IE with an error but returns typeof 'object'
813
- if (typeof context.createElement == 'undefined') {
814
- context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
815
- }
816
-
817
- CQ.each(elems, function(i, elem){
818
- if ( typeof elem === 'number' ) elem += '';
819
- if ( !elem ) return;
820
-
821
- // Convert html string into DOM nodes
822
- if ( typeof elem === "string" ) {
823
- // Fix "XHTML"-style tags in all browsers
824
- elem = elem.replace(tagSearchRegEx, function(all, front, tag){
825
- return tag.match(xmlTagsRegEx) ?
826
- all :
827
- front + "></" + tag + ">";
828
- });
829
-
830
- // Trim whitespace, otherwise indexOf won't work as expected
831
- var tags = elem.replace(trimWhiteSpaceRegEx, "").substring(0, 10).toLowerCase(),
832
- div = context.createElement("div");
833
-
834
- var wrap =
835
- // option or optgroup
836
- !tags.indexOf("<opt") &&
837
- [ 1, "<select multiple='multiple'>", "</select>" ] ||
838
-
839
- !tags.indexOf("<leg") &&
840
- [ 1, "<fieldset>", "</fieldset>" ] ||
841
-
842
- tags.match(/^<(thead|tbody|tfoot|colg|cap)/) &&
843
- [ 1, "<table>", "</table>" ] ||
844
-
845
- !tags.indexOf("<tr") &&
846
- [ 2, "<table><tbody>", "</tbody></table>" ] ||
847
-
848
- // <thead> matched above
849
- (!tags.indexOf("<td") || !tags.indexOf("<th")) &&
850
- [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ] ||
851
-
852
- !tags.indexOf("<col") &&
853
- [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] ||
854
-
855
- // IE can't serialize <link> and <script> tags normally
856
- SC.browser.msie &&
857
- [ 1, "div<div>", "</div>" ] ||
858
-
859
- [ 0, "", "" ];
860
-
861
- // Go to html and back, then peel off extra wrappers
862
- div.innerHTML = wrap[1] + elem + wrap[2];
863
-
864
- // Move to the right depth
865
- while ( wrap[0]-- ) div = div.lastChild;
866
-
867
- // Remove IE's autoinserted <tbody> from table fragments
868
- if ( SC.browser.msie ) {
869
-
870
- // String was a <table>, *may* have spurious <tbody>
871
- var tbody = !tags.indexOf("<table") && tags.indexOf("<tbody") < 0 ?
872
- div.firstChild && div.firstChild.childNodes :
873
-
874
- // String was a bare <thead> or <tfoot>
875
- wrap[1] === "<table>" && tags.indexOf("<tbody") < 0 ?
876
- div.childNodes :
877
- [];
878
-
879
- for ( var j = tbody.length - 1; j >= 0 ; --j ) {
880
- if ( CQ.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
881
- tbody[ j ].parentNode.removeChild( tbody[ j ] );
882
- }
883
- }
884
- // IE completely kills leading whitespace when innerHTML is used
885
- if ( /^\s/.test( elem ) ) {
886
- div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild );
887
- }
888
- }
889
-
890
- elem = CQ.makeArray( div.childNodes );
891
- }
892
-
893
- if (elem.length === 0 && (!CQ.nodeName( elem, "form" ) && !CQ.nodeName( elem, "select" ))) return;
894
-
895
- if (elem[0] === undefined || CQ.nodeName( elem, "form" ) || elem.options) ret.push( elem );
896
-
897
- else ret = CQ.merge( ret, elem );
898
-
899
- });
900
-
901
- return ret;
902
- },
903
-
904
- /**
905
- Core element finder function in SC.CoreQuery. CoreQuery supports only
906
- a very simple set of finders. Namely, you can specify the following
907
- simple types of selectors:
908
-
909
- - .class-name: this will find all elements with the matching class name
910
- - #id: this will find all elements matching the ID
911
- - tagname: this will find all elements with the matching tags.
912
-
913
- You can also do some basic joined expressions like:
914
-
915
- {{{
916
- tagname.class-name and tagname#id
917
- }}}
918
-
919
- Finally, you can do simple compound searches like
920
-
921
- {{{
922
- tagname .class-name tagname#id
923
- }}}
924
-
925
- You can also pass multiple selectors separated by commas. The return
926
- set will be the OR of all the result set.
927
-
928
- {{{
929
- #item1,#item2,#item3
930
- }}}
931
-
932
- You cannot do any child searches, psuedo-selectors or other complex
933
- searches. These are only the kinds of selectors that can be parsed
934
- quickly and use built-in methods on the browser.
935
-
936
- @param {String} t selector
937
- @param {Element} context
938
- @returns {Array} matched elements
939
- */
940
- find: function( t, context ) {
941
- var ret;
942
-
943
- // Quickly handle non-string expressions
944
- if ( typeof t !== "string" ) return [ t ];
945
-
946
- // if the selector contains commas, then we actually want to search
947
- // multiple selectors.
948
- if (t.indexOf(',')>=0) {
949
- ret = t.split(',').map(function(sel) {
950
- return CQ.find(sel,context);
951
- });
952
-
953
- // flatten arrays
954
- return ret.concat.apply([],ret).uniq() ;
955
- }
956
-
957
- // check to make sure context is a DOM element or a document
958
- if ( context && context.nodeType !== 1 && context.nodeType !== 9) {
959
- return [];
960
- }
961
-
962
- // Set the correct context (if none is provided)
963
- context = context || document;
964
-
965
- // Initialize the search. split the selector into pieces
966
- ret = [context];
967
- var nodeName, inFindMode = YES,
968
- parts = t.match(quickSplit), len = parts.length, m ;
969
-
970
- // loop through each part and either find or filter as needed
971
- for(var idx=0;idx<len;idx++) {
972
- t = parts[idx]; // the current selector to parse
973
-
974
- // handle space separators. this just resets to find mode
975
- if (t === ' ' || t === '') {
976
- inFindMode = YES ;
977
-
978
- // if we are in find mode, then use the current selector to
979
- // find new elements that are children. at the end, leave findMode.
980
- } else if (inFindMode) {
981
-
982
- // split into parts to test result
983
- m = singleClass.exec(t);
984
-
985
- // handle special case where we get a tag name followed by an ID.
986
- // in this case, just swap the two and proceed.
987
- if ((m[1] === '') && (idx<(len-1)) && (parts[idx+1].charAt(0)==='#')) {
988
- t = parts[idx+1]; parts[idx+1] = parts[idx]; // swap
989
- m = singleClass.exec(t); // reparse
990
- }
991
-
992
- // now loop through and find elements based on tag
993
- var next = [], retlen = ret.length, retidx, cur, val = m[2], found;
994
- for(retidx=0;retidx<retlen;retidx++) {
995
- cur = ret[retidx];
996
- switch(m[1]) {
997
- case '': // tag
998
- if (!val) val = '*';
999
- // Handle IE7 being really dumb about <object>s
1000
- if ( val === "*" && cur.nodeName.toLowerCase() === "object" ) {
1001
- val = "param";
1002
- }
1003
-
1004
- next = CQ.merge(next, cur.getElementsByTagName(val));
1005
- break;
1006
-
1007
- case '#': // id
1008
- // handle special case where we are searching the document
1009
- if (cur === document) {
1010
- found = document.getElementById(val) ;
1011
-
1012
- // if this is IE, verify that it didn't search by name
1013
- if (SC.browser.msie && found && found.getAttribute('id')!==val){
1014
- found = NO; // clear
1015
- } else {
1016
- if (found) next.push(found) ;
1017
- found = YES ; // do not do slow search
1018
- }
1019
- } else found = NO;
1020
-
1021
- // Otherwise, we have to do a slow search
1022
- if (!found) {
1023
- // the return value of getElementsByTagName is not an Array
1024
- // so we need to fake it.
1025
- found = cur.getElementsByTagName('*') ;
1026
- found = Array.prototype.find.call(found, function(el){
1027
- return el.getAttribute && (el.getAttribute('id')===val);
1028
- }) ;
1029
- if (found) next.push(found) ;
1030
- }
1031
- break ;
1032
-
1033
- case '.': // class
1034
- if (cur.getElementsByClassName) {
1035
- next = CQ.merge(next, cur.getElementsByClassName(val));
1036
- } else {
1037
- next = CQ.merge(next,
1038
- CQ.classFilter(cur.getElementsByTagName('*'),val));
1039
- }
1040
- break;
1041
- default:
1042
- // do nothing
1043
- }
1044
- }
1045
- delete ret;
1046
- ret = next ; // swap array
1047
- inFindMode = NO;
1048
-
1049
- // if we are not in findMode then simply filter the results.
1050
- } else ret = CQ.filter(t, ret) ;
1051
- }
1052
-
1053
- // remove original context if still there
1054
- if (ret && ret[0] == context) ret.shift();
1055
- return ret.uniq() ; // make sure no duplicated are returned
1056
- },
1057
-
1058
- classFilter: function(r,m,not){
1059
- m = " " + m + " ";
1060
- var tmp = [], pass;
1061
- for ( var i = 0; r[i]; i++ ) {
1062
- pass = (" " + r[i].className + " ").indexOf( m ) >= 0;
1063
- if ( !not && pass || not && !pass ) {
1064
- tmp.push( r[i] );
1065
- }
1066
- }
1067
- return tmp;
1068
- },
1069
-
1070
- /**
1071
- Filters a set of elements according to those matching the passed
1072
- selector. The selector can contain only tag, class, and id options.
1073
-
1074
- The CoreQuery filter function is only capable of handling simple querys
1075
- such as a tag, class or ID. You cannot combine them. Instead call
1076
- filter several times.
1077
-
1078
- @param {String} t the selector to filter by
1079
- @param {Array} r the element to filter
1080
- @param {Boolean} not invert filter
1081
- @returns {Array} filtered array
1082
- */
1083
- filter: function(t,r,not) {
1084
- // split into parts to test result
1085
- var m = singleClass.exec(t), val = m[2], kind = m[1], filter ;
1086
- if (kind === '.') { // special case class
1087
- return CQ.classFilter(CQ.makeArray(r), val, not) ;
1088
- } else {
1089
- if (kind === '#') { // id
1090
- filter = function(el) {
1091
- var ret=el && el.getAttribute && (el.getAttribute('id') === val);
1092
- return (not) ? !ret : ret ;
1093
- } ;
1094
-
1095
- } else { // tag
1096
- filter = function(el) {
1097
- var ret= CQ.nodeName(el, val);
1098
- return (not) ? !ret : ret ;
1099
- } ;
1100
- }
1101
-
1102
- // the return value may not be a real instance of Array, so fake it.
1103
- return Array.prototype.filter.call(CQ.makeArray(r), filter) ;
1104
- }
1105
- },
1106
-
1107
- /** @private Accepts filters separated by commas. */
1108
- multiFilter: function( expr, elems, not ) {
1109
- expr = expr.indexOf(',') ? expr.split(',') : [expr];
1110
- var loc=expr.length,cur,ret=[];
1111
- while(--loc >= 0) { // unit tests expect reverse iteration
1112
- cur = CQ.filter(expr[loc].trim(), elems, not) ;
1113
- ret = not ? elems = cur : CQ.merge(cur,ret);
1114
- }
1115
- return ret ;
1116
- },
1117
-
1118
- /**
1119
- Merge two result sets together. This method knows how to handle
1120
- the special iterables returned by IE as well. Used internally.
1121
- */
1122
- merge: function(first, second) {
1123
- // We have to loop this way because IE & Opera overwrite the length
1124
- // expando of getElementsByTagName
1125
- var i = 0, elem, pos = first.length;
1126
- // Also, we need to make sure that the correct elements are being
1127
- // returned (IE returns comment nodes in a '*' query)
1128
- if ( SC.browser.msie ) {
1129
- while ( elem = second[ i++ ] ) {
1130
- if ( elem.nodeType !== 8 ) first[ pos++ ] = elem;
1131
- }
1132
-
1133
- } else {
1134
- while ( elem = second[ i++ ] ) first[ pos++ ] = elem;
1135
- }
1136
-
1137
- return first;
1138
- },
1139
-
1140
- // makeArray is the CoreQuery version of $A().
1141
- makeArray: function(array) {
1142
- var ret = [];
1143
-
1144
- if( !SC.none(array) ){
1145
- var i = array.length;
1146
- // The window, strings (and functions) also have 'length'
1147
- if( i == null || typeof array === 'string' || array.setInterval ) {
1148
- ret[0] = array;
1149
- }
1150
- else {
1151
- while( i ) ret[--i] = array[i];
1152
- }
1153
- }
1154
-
1155
- return ret;
1156
- },
1157
-
1158
- inArray: function(elem,array) {
1159
- return array.indexOf ? array.indexOf(elem) : Array.prototype.indexOf.call(array, elem);
1160
- },
1161
-
1162
- // Check to see if the W3C box model is being used
1163
- boxModel: !SC.browser.msie || document.compatMode === "CSS1Compat",
1164
-
1165
- props: {
1166
- "for": "htmlFor",
1167
- "class": "className",
1168
- "float": styleFloat,
1169
- cssFloat: styleFloat,
1170
- styleFloat: styleFloat,
1171
- readonly: "readOnly",
1172
- maxlength: "maxLength",
1173
- cellspacing: "cellSpacing",
1174
- rowspan: "rowSpan"
1175
- },
1176
-
1177
- /** @private Prepares a property string for insertion. */
1178
- prop: function( elem, value, type, i, name ) {
1179
- // Handle executable functions
1180
- if (SC.typeOf(value) === SC.T_FUNCTION) value = value.call(elem, i);
1181
-
1182
- // Handle passing in a number to a CSS property
1183
- return value && (typeof value === "number") && type === "curCSS" && !exclude.test( name ) ? value + "px" : value;
1184
- },
1185
-
1186
-
1187
- grep: function( elems, callback, inv ) {
1188
- var ret = [];
1189
-
1190
- // Go through the array, only saving the items
1191
- // that pass the validator function
1192
- for ( var i = 0, length = elems.length; i < length; i++ ) {
1193
- if ( !inv != !callback( elems[ i ], i ) ) ret.push( elems[ i ] );
1194
- }
1195
- return ret;
1196
- },
1197
-
1198
- /** @private internal use only */
1199
- className: {
1200
-
1201
- // internal only, use addClass("class")
1202
- add: function( elem, classNames ) {
1203
- var has = CQ.className.has ;
1204
- CQ.each((classNames || "").split(checkforSpaceRegEx), function(i, className){
1205
- if ( elem.nodeType === 1 && !has( elem.className, className ) ) {
1206
- elem.className += (elem.className ? " " : "") + className;
1207
- }
1208
- });
1209
- },
1210
-
1211
- // internal only, use removeClass("class")
1212
- remove: function( elem, classNames ) {
1213
- if (elem.nodeType === 1) {
1214
- elem.className = classNames !== undefined ?
1215
- CQ.grep(elem.className.split(checkforSpaceRegEx), function(className){
1216
- return !CQ.className.has( classNames, className );
1217
- }).join(" ") : "";
1218
- }
1219
- },
1220
-
1221
- // internal only, use hasClass("class")
1222
- has: function( elem, className ) {
1223
- return elem && CQ.inArray( className, (elem.className || elem).toString().split(checkforSpaceRegEx) ) > -1;
1224
- }
1225
- },
1226
-
1227
- /** @private A method for quickly swapping in/out CSS properties to get
1228
- correct calculations */
1229
- swap: function( elem, options, callback, direction, arg ) {
1230
- var old = {}, name;
1231
- // Remember the old values, and insert the new ones
1232
- for ( name in options ) {
1233
- old[ name ] = elem.style[ name ];
1234
- elem.style[ name ] = options[ name ];
1235
- }
1236
-
1237
- var ret = callback(elem, direction, arg );
1238
-
1239
- // Revert the old values
1240
- for ( name in options ) elem.style[ name ] = old[ name ];
1241
- return ret ;
1242
- },
1243
-
1244
- /** returns a normalized value for the specified style name. */
1245
- css: function( elem, name, force ) {
1246
- // handle special case for width/height
1247
- if ( name === "width" || name === "height" ) {
1248
- var val, which = (name === "width") ? LEFT_RIGHT : TOP_BOTTOM,
1249
- props = CSS_DISPLAY_PROPS;
1250
-
1251
- val = SC.$.isVisible(elem) ? getWH(elem,name,which) : CQ.swap(elem,props,getWH,name,which) ;
1252
-
1253
- return Math.max(0, val);
1254
- }
1255
-
1256
- return CQ.curCSS( elem, name, force );
1257
- },
1258
-
1259
- /** @private internal method to retrieve current CSS. */
1260
- curCSS: function( elem, name, force ) {
1261
- var ret, style = elem.style;
1262
-
1263
- // We need to handle opacity special in IE
1264
- if ( name === "opacity" && SC.browser.msie ) {
1265
- ret = CQ.attr( style, "opacity" );
1266
- return ret === "" ? "1" : ret;
1267
- }
1268
-
1269
- // Opera sometimes will give the wrong display answer, this fixes it,
1270
- // see #2037
1271
- if ( SC.browser.opera && name === "display" ) {
1272
- var save = style.outline;
1273
- style.outline = "0 solid black";
1274
- style.outline = save;
1275
- }
1276
-
1277
- // Make sure we're using the right name for getting the float value
1278
- var isFloat = name.match(/float/i);
1279
- if (isFloat) name = styleFloat;
1280
-
1281
- // simple case to collect the value
1282
- if ( !force && style && style[ name ] ) {
1283
- ret = style[ name ];
1284
-
1285
- // otherwise try to use cached computed value
1286
- } else if ( defaultView.getComputedStyle ) {
1287
-
1288
- // Only "float" is needed here
1289
- if (isFloat) name = "float";
1290
-
1291
- name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase();
1292
-
1293
- // get the computed style and verify its not broken.
1294
- var computedStyle = defaultView.getComputedStyle( elem, null );
1295
- if ( computedStyle && !styleIsBorked(elem, defaultView) ) {
1296
- ret = computedStyle.getPropertyValue( name );
1297
-
1298
- // If the element isn't reporting its values properly in Safari
1299
- // then some display: none elements are involved
1300
- } else {
1301
- var swap = [], stack = [], a = elem, i = 0, swLen, stLen;
1302
-
1303
- // Locate all of the parent display: none elements
1304
- for ( ; a && styleIsBorked(a); a = a.parentNode ) stack.unshift(a);
1305
-
1306
- // Go through and make them visible, but in reverse
1307
- // (It would be better if we knew the exact display type that they
1308
- // had)
1309
- for (stLen = stack.length ; i < stLen; i++ ) {
1310
- var stackTmp =stack[i];
1311
- if (stackTmp && stackTmp.style && styleIsBorked(stackTmp)) {
1312
- swap[i] = stackTmp.style.display;
1313
- stackTmp.style.display = "block";
1314
- }
1315
- }
1316
-
1317
- // Since we flip the display style, we have to handle that
1318
- // one special, otherwise get the value
1319
- ret = (name === "display" && swap[stack.length-1]!==null) ? "none" :
1320
- (computedStyle && computedStyle.getPropertyValue(name)) || "";
1321
-
1322
- // Finally, revert the display styles back
1323
- for ( i = 0, swLen = swap.length; i < swLen; i++ ) {
1324
- if (swap[i]!==null) stack[i].style.display = swap[i];
1325
- }
1326
- }
1327
-
1328
- // We should always get a number back from opacity
1329
- if (name === "opacity" && ret === "") ret = "1";
1330
-
1331
- } else if (elem.currentStyle) {
1332
- // var camelCase = name.camelize();
1333
-
1334
- ret = elem.currentStyle[ name ] || elem.currentStyle[ name.camelize() ];
1335
-
1336
- // From the awesome hack by Dean Edwards
1337
- // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
1338
- // If we're not dealing with a regular pixel number
1339
- // but a number that has a weird ending, we need to convert it to
1340
- // pixels
1341
- if (!(/^\d+(px)?$/i).test(ret) && (/^\d/).test(ret)) {
1342
- // Remember the original values
1343
- var left = style.left, rsLeft = elem.runtimeStyle.left;
1344
-
1345
- // Put in the new values to get a computed value out
1346
- elem.runtimeStyle.left = elem.currentStyle.left;
1347
- style.left = ret || 0;
1348
- ret = style.pixelLeft + "px";
1349
-
1350
- // Revert the changed values
1351
- style.left = left;
1352
- elem.runtimeStyle.left = rsLeft;
1353
- }
1354
- }
1355
-
1356
- return ret;
1357
- },
1358
-
1359
- /** @private
1360
- returns all of the actual nodes (excluding whitespace, comments, etc) in
1361
- the passed element.
1362
- */
1363
- dir: function( elem, dir ){
1364
- var matched = [], cur = elem[dir];
1365
- while ( cur && cur != document ) {
1366
- if ( cur.nodeType === 1 ) matched.push( cur );
1367
- cur = cur[dir];
1368
- }
1369
- return matched;
1370
- },
1371
-
1372
- /** @private
1373
- Returns the nth actual node (not whitespace, comment, etc) in the passed
1374
- element.
1375
- */
1376
- nth: function(cur,result,dir,elem){
1377
- result = result || 1;
1378
- var num = 0;
1379
- for ( ; cur; cur = cur[dir] ) {
1380
- if ( cur.nodeType === 1 && ++num == result ) break;
1381
- }
1382
- return cur;
1383
- },
1384
-
1385
- /** @private Finds the regular element-style siblings. */
1386
- sibling: function( n, elem ) {
1387
- var r = [];
1388
- for ( ; n; n = n.nextSibling ) {
1389
- if ( n.nodeType === 1 && n != elem ) r.push( n );
1390
- }
1391
- return r;
1392
- },
1393
-
1394
- /** Primitive helper can read or update an attribute on an element. */
1395
- attr: function( elem, name, value ) {
1396
- // don't set attributes on text and comment nodes
1397
- if (!elem || elem.nodeType === 3 || elem.nodeType === 8) return undefined;
1398
-
1399
- var notxml = !CQ.isXMLDoc( elem ),
1400
- set = value !== undefined,
1401
- msie = SC.browser.msie;
1402
-
1403
- // Try to normalize/fix the name
1404
- name = notxml && CQ.props[ name ] || name;
1405
-
1406
- // Only do all the following if this is a node (faster for style)
1407
- // IE elem.getAttribute passes even for style
1408
- if ( elem.tagName ) {
1409
-
1410
- // These attributes require special treatment
1411
- var special = specialAttributesRegEx.test( name );
1412
-
1413
- // Safari mis-reports the default selected property of a hidden option
1414
- // Accessing the parent's selectedIndex property fixes it
1415
- if ( name === "selected" && elem.parentNode ) {
1416
- elem.parentNode.selectedIndex;
1417
- }
1418
-
1419
- // If applicable, access the attribute via the DOM 0 way
1420
- if ( name in elem && notxml && !special ) {
1421
- if ( set ){
1422
- // We can't allow the type property to be changed (since it causes
1423
- // problems in IE)
1424
- if ( name === "type" && CQ.nodeName( elem, "input" ) && elem.parentNode ) {
1425
- throw "type property can't be changed";
1426
- }
1427
-
1428
- elem[ name ] = value;
1429
- }
1430
-
1431
- // browsers index elements by id/name on forms, give priority to
1432
- // attributes.
1433
- if( CQ.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) {
1434
- return elem.getAttributeNode( name ).nodeValue;
1435
- }
1436
-
1437
- // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
1438
- // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
1439
- if ( name === "tabIndex" ) {
1440
- var attributeNode = elem.getAttributeNode( "tabIndex" );
1441
- return attributeNode && attributeNode.specified
1442
- ? attributeNode.value
1443
- : elem.nodeName.match(tagsWithTabIndexRegEx)
1444
- ? 0
1445
- : elem.nodeName.match(/^(a|area)$/i) && elem.href
1446
- ? 0
1447
- : undefined;
1448
- }
1449
-
1450
- return elem[ name ];
1451
- }
1452
-
1453
- if ( msie && notxml && name === "style" ) {
1454
- return CQ.attr( elem.style, "cssText", value );
1455
- }
1456
- // convert the value to a string (all browsers do this but IE) see
1457
- // #1070 (jQuery)
1458
- if ( set ) elem.setAttribute( name, "" + value );
1459
-
1460
- // Some attributes require a special call on IE
1461
- var attr = (msie && notxml && special)
1462
- ? elem.getAttribute( name, 2 )
1463
- : elem.getAttribute( name );
1464
-
1465
- // Non-existent attributes return null, we normalize to undefined
1466
- return attr === null ? undefined : attr;
1467
- }
1468
-
1469
- // elem is actually elem.style ... set the style
1470
-
1471
- // IE uses filters for opacity
1472
- if ( msie && name === "opacity" ) {
1473
- if ( set ) {
1474
- // IE has trouble with opacity if it does not have layout
1475
- // Force it by setting the zoom level
1476
- elem.zoom = 1;
1477
-
1478
- // Set the alpha filter to set the opacity
1479
- elem.filter = (elem.filter || "").replace( alphaDetectRegEx, "" ) +
1480
- (parseInt(value,0) + '' == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")");
1481
- }
1482
-
1483
- return elem.filter && elem.filter.indexOf("opacity=") >= 0 ?
1484
- (parseFloat( elem.filter.match(alphaReplaceRegEx)[1] ) / 100) + '':
1485
- "";
1486
- }
1487
-
1488
- name = name.camelize();
1489
- if ( set ) elem[ name ] = value;
1490
-
1491
- return elem[ name ];
1492
- }
1493
-
1494
- }) ;
1495
-
1496
- CQ.fn.init.prototype = CQ.fn;
1497
-
1498
- // Create a new generic handlers.
1499
- CQ.each({
1500
- parent: function(elem){return elem.parentNode;},
1501
-
1502
- parents: function(elem){return CQ.dir(elem,"parentNode");},
1503
-
1504
- next: function(elem){return CQ.nth(elem,2,"nextSibling");},
1505
-
1506
- prev: function(elem){return CQ.nth(elem,2,"previousSibling");},
1507
-
1508
- nextAll: function(elem){
1509
- return CQ.dir(elem,"nextSibling");
1510
- },
1511
-
1512
- prevAll: function(elem){
1513
- return CQ.dir(elem,"previousSibling");
1514
- },
1515
-
1516
- siblings: function(elem){
1517
- return CQ.sibling(elem.parentNode.firstChild,elem);
1518
- },
1519
-
1520
- children: function(elem){return CQ.sibling(elem.firstChild);},
1521
-
1522
- contents: function(elem){
1523
- return CQ.nodeName(elem,"iframe") ?
1524
- elem.contentDocument||elem.contentWindow.document :
1525
- CQ.makeArray(elem.childNodes);
1526
- }
1527
-
1528
- }, function(name, fn){
1529
- CQ.fn[ name ] = function( selector ) {
1530
- var ret = CQ.map( this, fn );
1531
-
1532
- if ( selector && typeof selector === "string" ) {
1533
- ret = CQ.multiFilter( selector, ret );
1534
- }
1535
- return this.pushStack(ret.uniq());
1536
- };
1537
- });
1538
-
1539
- CQ.each({
1540
- appendTo: "append",
1541
- prependTo: "prepend",
1542
- insertBefore: "before",
1543
- insertAfter: "after",
1544
- replaceAll: "replaceWith"
1545
- }, function(name, original){
1546
- CQ.fn[ name ] = function() {
1547
- var args = arguments;
1548
-
1549
- return this.each(function(){
1550
- for ( var i = 0, length = args.length; i < length; i++ ) {
1551
- CQ( args[ i ] )[ original ]( this );
1552
- }
1553
- });
1554
- };
1555
- });
1556
-
1557
- CQ.each({
1558
- removeAttr: function( name ) {
1559
- CQ.attr( this, name, "" );
1560
- if (this.nodeType === 1) this.removeAttribute( name );
1561
- },
1562
-
1563
- addClass: function( classNames ) {
1564
- CQ.className.add( this, classNames );
1565
- },
1566
-
1567
- removeClass: function( classNames ) {
1568
- CQ.className.remove( this, classNames );
1569
- },
1570
-
1571
- toggleClass: function( classNames ) {
1572
- CQ.className[ CQ.className.has( this, classNames ) ? "remove" : "add" ]( this, classNames );
1573
- },
1574
-
1575
- /**
1576
- Removes either all elements or elements matching the selector. Note
1577
- that this does NOT account for event handling, since events are not
1578
- managed by CoreQuery, unlike jQuery.
1579
- */
1580
- remove: function( selector ) {
1581
- if ( !selector || CQ.filter( selector, [ this ] ).length ) {
1582
- if (this.parentNode) this.parentNode.removeChild( this );
1583
- }
1584
- },
1585
-
1586
- /**
1587
- Removes the contents of the receiver, leaving it empty. Note that this
1588
- does NOT deal with Event handling since that is not managed by
1589
- CoreQuery.
1590
- */
1591
- empty: function() {
1592
- while ( this.firstChild ) this.removeChild( this.firstChild );
1593
- }
1594
-
1595
- }, function(name, fn){
1596
- CQ.fn[name] = function(){ return this.each(fn, arguments); };
1597
- });
1598
-
1599
- // Setup width and height functions
1600
- CQ.each([ "Height", "Width" ], function(i, name){
1601
- var type = name.toLowerCase(), ret;
1602
-
1603
- CQ.fn[ type ] = function( size ) {
1604
-
1605
- // Get window width or height
1606
- if(this[0] === window) {
1607
-
1608
- // Opera reports document.body.client[Width/Height] properly in both
1609
- // quirks and standards
1610
- if (SC.browser.opera) {
1611
- ret = document.body["client" + name];
1612
-
1613
- // Safari reports inner[Width/Height] just fine (Mozilla and Opera
1614
- // include scroll bar widths)
1615
- } else if (SC.browser.safari) {
1616
- ret = window["inner" + name] ;
1617
-
1618
- // Everyone else use document.documentElement or document.body
1619
- // depending on Quirks vs Standards mode
1620
- } else if (document.compatMode) {
1621
- ret = documentElement['client' + name];
1622
- } else ret = document.body['client' + name];
1623
-
1624
- // get document width or height
1625
- } else if (this[0] === document) {
1626
- // Either scroll[Width/Height] or offset[Width/Height], whichever is
1627
- // greater
1628
- ret = Math.max(
1629
- Math.max(document.body["scroll" + name], document.documentElement["scroll" + name]),
1630
- Math.max(document.body["offset" + name], document.documentElement["offset" + name])) ;
1631
-
1632
- // get/set element width/or height
1633
- } else {
1634
- if (size === undefined) {
1635
- return this.length ? CQ.css(this[0], type) : null ;
1636
-
1637
- // Set the width or height on the element (default to pixels if value is unitless)
1638
- } else {
1639
- return this.css(type, (typeof size === "string") ? size : size+"px");
1640
- }
1641
- }
1642
- return ret ;
1643
- };
1644
-
1645
- var tl = i ? "Left" : "Top", // top or left
1646
- br = i ? "Right" : "Bottom"; // bottom or right
1647
-
1648
- // innerHeight and innerWidth
1649
- CQ.fn["inner" + name] = function(){
1650
- return this[ name.toLowerCase() ]() +
1651
- num(this, "padding" + tl) +
1652
- num(this, "padding" + br);
1653
- };
1654
-
1655
- // outerHeight and outerWidth
1656
- CQ.fn["outer" + name] = function(margin) {
1657
- return this["inner" + name]() +
1658
- num(this, "border" + tl + "Width") +
1659
- num(this, "border" + br + "Width") +
1660
- (margin ? num(this, "margin" + tl) + num(this, "margin" + br) : 0);
1661
- };
1662
-
1663
- });
1664
-
1665
- // The Offset Method
1666
- // Originally By Brandon Aaron, part of the Dimension Plugin
1667
- // http://jquery.com/plugins/project/dimensions
1668
-
1669
- /** Calculates the offset for the first passed element. */
1670
- CoreQuery.fn.offset = function() {
1671
- var left = 0, top = 0, elem = this[0], br = SC.browser, results;
1672
- if (!elem) return undefined;
1673
-
1674
- function border(elem) {
1675
- add( CQ.curCSS(elem, "borderLeftWidth", true), CQ.curCSS(elem, "borderTopWidth", true) );
1676
- }
1677
-
1678
- function add(l, t) {
1679
- left += parseInt(l, 10) || 0;
1680
- top += parseInt(t, 10) || 0;
1681
- }
1682
-
1683
- var parent = elem.parentNode,
1684
- offsetChild = elem,
1685
- offsetParent = elem.offsetParent,
1686
- doc = elem.ownerDocument,
1687
- safari2 = br.safari && parseInt(br.version,0) < 522 && !(/adobeair/i).test(br.userAgent),
1688
- css = CQ.curCSS,
1689
- fixed = CQ.css(elem, "position") === "fixed";
1690
-
1691
- // Use getBoundingClientRect if available
1692
- if (!(br.mozilla && elem==document.body) && elem.getBoundingClientRect){
1693
- var box = elem.getBoundingClientRect();
1694
-
1695
- // Add the document scroll offsets
1696
- add(box.left + Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft),
1697
- box.top + Math.max(doc.documentElement.scrollTop, doc.body.scrollTop));
1698
-
1699
- // IE adds the HTML element's border, by default it is medium which is
1700
- // 2px IE 6 and 7 quirks mode the border width is overwritable by the
1701
- // following css html { border: 0; } IE 7 standards mode, the border is
1702
- // always 2px This border/offset is typically represented by the
1703
- // clientLeft and clientTop properties
1704
- // However, in IE6 and 7 quirks mode the clientLeft and clientTop
1705
- // properties are not updated when overwriting it via CSS
1706
- // Therefore this method will be off by 2px in IE while in quirksmode
1707
- add( -doc.documentElement.clientLeft, -doc.documentElement.clientTop );
1708
-
1709
- // Otherwise loop through the offsetParents and parentNodes
1710
- } else {
1711
-
1712
- // Initial element offsets
1713
- add( elem.offsetLeft, elem.offsetTop );
1714
-
1715
- // Get parent offsets
1716
- while ( offsetParent ) {
1717
- // Add offsetParent offsets
1718
- add( offsetParent.offsetLeft, offsetParent.offsetTop );
1719
-
1720
- // Mozilla and Safari > 2 does not include the border on offset parents
1721
- // However Mozilla adds the border for table or table cells
1722
- if ( br.mozilla && !(/^t(able|d|h)$/i).test(offsetParent.tagName) || br.safari && !safari2 ) border( offsetParent );
1723
-
1724
- // Add the document scroll offsets if position is fixed on any
1725
- // offsetParent
1726
- if (!fixed && css(offsetParent, "position") === "fixed") fixed = true;
1727
-
1728
- // Set offsetChild to previous offsetParent unless it is the body
1729
- // element
1730
- offsetChild = (/^body$/i).test(offsetParent.tagName) ? offsetChild : offsetParent;
1731
- // Get next offsetParent
1732
- offsetParent = offsetParent.offsetParent;
1733
- }
1734
-
1735
- // Get parent scroll offsets
1736
- while ( parent && parent.tagName && !(bodyHTMLOffsetRegEx).test(parent.tagName)) {
1737
-
1738
- // Remove parent scroll UNLESS that parent is inline or a table to
1739
- // work around Opera inline/table scrollLeft/Top bug
1740
- if ( !(/^inline|table.*$/i).test(css(parent, "display")) ) {
1741
- // Subtract parent scroll offsets
1742
- add( -parent.scrollLeft, -parent.scrollTop );
1743
- }
1744
-
1745
- // Mozilla does not add the border for a parent that has overflow !=
1746
- // visible
1747
- if ( br.mozilla && css(parent, "overflow") !== "visible" ) border(parent);
1748
-
1749
- // Get next parent
1750
- parent = parent.parentNode;
1751
- }
1752
-
1753
- // Safari <= 2 doubles body offsets with a fixed position
1754
- // element/offsetParent or absolutely positioned offsetChild
1755
- // Mozilla doubles body offsets with a non-absolutely positioned
1756
- // offsetChild
1757
- if ((safari2 && (fixed || css(offsetChild, "position") === "absolute"))||
1758
- (br.mozilla && css(offsetChild, "position") !== "absolute") ) {
1759
- add( -doc.body.offsetLeft, -doc.body.offsetTop );
1760
- }
1761
-
1762
- // Add the document scroll offsets if position is fixed
1763
- if ( fixed ) {
1764
- add(Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft),
1765
- Math.max(doc.documentElement.scrollTop, doc.body.scrollTop));
1766
- }
1767
- }
1768
-
1769
- // Return an object with top and left properties
1770
- results = { top: top, left: left };
1771
-
1772
- return results;
1773
- };
1774
-
1775
- CoreQuery.fn.mixin({
1776
- position: function() {
1777
- var left = 0, top = 0, results;
1778
-
1779
- if ( this[0] ) {
1780
- // Get *real* offsetParent
1781
- var offsetParent = this.offsetParent(),
1782
-
1783
- // Get correct offsets
1784
- offset = this.offset(),
1785
- parentOffset = bodyHTMLOffsetRegEx.test(offsetParent[0].tagName) ? { top: 0, left: 0 } : offsetParent.offset();
1786
-
1787
- // Subtract element margins
1788
- // note: when an element has margin: auto the offsetLeft and marginLeft
1789
- // are the same in Safari causing offset.left to incorrectly be 0
1790
- offset.top -= num( this, 'marginTop' );
1791
- offset.left -= num( this, 'marginLeft' );
1792
-
1793
- // Add offsetParent borders
1794
- parentOffset.top += num( offsetParent, 'borderTopWidth' );
1795
- parentOffset.left += num( offsetParent, 'borderLeftWidth' );
1796
-
1797
- // Subtract the two offsets
1798
- results = {
1799
- top: offset.top - parentOffset.top,
1800
- left: offset.left - parentOffset.left
1801
- };
1802
- }
1803
-
1804
- return results;
1805
- },
1806
-
1807
- offsetParent: function() {
1808
- var offsetParent = this[0].offsetParent || document.body;
1809
- while ( offsetParent && (!(bodyHTMLOffsetRegEx).test(offsetParent.tagName) && CQ.css(offsetParent, 'position') === 'static') ) {
1810
- offsetParent = offsetParent.offsetParent;
1811
- }
1812
- return CQ(offsetParent);
1813
- }
1814
- }) ;
1815
-
1816
-
1817
- // Create scrollLeft and scrollTop methods
1818
- CQ.each( ['Left', 'Top'], function(i, name) {
1819
- var method = 'scroll' + name;
1820
-
1821
- CQ.fn[ method ] = function(val) {
1822
- if (!this[0]) return;
1823
-
1824
- return val !== undefined ?
1825
-
1826
- // Set the scroll offset
1827
- this.each(function() {
1828
- this == window || this == document ?
1829
- window.scrollTo(
1830
- !i ? val : CQ(window).scrollLeft(),
1831
- i ? val : CQ(window).scrollTop()
1832
- ) :
1833
- this[ method ] = val;
1834
- }) :
1835
-
1836
- // Return the scroll offset
1837
- this[0] == window || this[0] == document ?
1838
- self[ i ? 'pageYOffset' : 'pageXOffset' ] ||
1839
- CQ.boxModel && document.documentElement[ method ] ||
1840
- document.body[ method ] : this[0][ method ];
1841
- };
1842
- });
1843
-
1844
-
1845
- return CoreQuery ;
1846
- }()) ;
1847
-
1848
- // Install CoreQuery or jQuery, depending on what is available, as SC.$().
1849
- SC.$ = (typeof jQuery == "undefined") ? SC.CoreQuery : jQuery ;
1850
-
1851
- // Add some plugins to CoreQuery. If jQuery is installed, it will get these
1852
- // also. -- test in system/core_query/additions
1853
- SC.mixin(SC.$.fn, /** @scope SC.CoreQuery.prototype */ {
1854
-
1855
- isCoreQuery: YES, // walk like a duck
1856
-
1857
- /** @private - better loggin */
1858
- toString: function() {
1859
- var values = [],
1860
- len = this.length, idx=0;
1861
- for(idx=0;idx<len;idx++) {
1862
- values[idx] = '%@: %@'.fmt(idx, this[idx] ? this[idx].toString() : '(null)');
1863
- }
1864
- return "<$:%@>(%@)".fmt(SC.guidFor(this),values.join(' , '));
1865
- },
1866
-
1867
- /**
1868
- Returns YES if all member elements are visible. This is provided as a
1869
- common test since CoreQuery does not support filtering by
1870
- psuedo-selector.
1871
- */
1872
- isVisible: function() {
1873
- return Array.prototype.every.call(this, function(elem){
1874
- return SC.$.isVisible(elem);
1875
- });
1876
- },
1877
-
1878
- /** Returns a new CQ object with only the first item in the object. */
1879
- first: function() {
1880
- return this.pushStack([this[0]]);
1881
- },
1882
-
1883
- /** Returns a new CQ object with only the last item in the set. */
1884
- last: function() {
1885
- return this.pushStack([this[this.length-1]]);
1886
- },
1887
-
1888
- /**
1889
- Attempts to find the views managing the passed DOM elements and returns
1890
- them. This will start with the matched element and walk up the DOM until
1891
- it finds an element managed by a view.
1892
-
1893
- @returns {Array} array of views or null.
1894
- */
1895
- view: function() {
1896
- return this.map(function() {
1897
- var ret=null, guidKey = SC.viewKey, dom = this, value;
1898
- while(!ret && dom && (dom !== document)) {
1899
- if (dom.nodeType===1 && (value = dom.getAttribute('id'))) ret = SC.View.views[value] ;
1900
- dom = dom.parentNode;
1901
- }
1902
- dom = null;
1903
- return ret ;
1904
- });
1905
- },
1906
-
1907
3
  /**
1908
4
  You can either pass a single class name and a boolean indicating whether
1909
5
  the value should be added or removed, or you can pass a hash with all
1910
- the class names you want to add or remove with a boolean indicating
6
+ the class names you want to add or remove with a boolean indicating
1911
7
  whether they should be there or not.
1912
-
8
+
1913
9
  This is far more efficient than using addClass/removeClass.
1914
-
10
+
1915
11
  @param {String|Hash} className class name or hash of classNames + bools
1916
12
  @param {Boolean} shouldAdd for class name if a string was passed
1917
13
  @returns {SC.CoreQuery} receiver
1918
14
  */
1919
15
  setClass: function(className, shouldAdd) {
1920
- if (SC.none(className)) return this; //nothing to do
16
+ if (SC.none(className)) { return this; } //nothing to do
1921
17
  var isHash = SC.typeOf(className) !== SC.T_STRING,
1922
18
  fix = this._fixupClass, key;
19
+
1923
20
  this.each(function() {
1924
- if (this.nodeType !== 1) return; // nothing to do
1925
-
21
+ if (this.nodeType !== 1) { return; } // nothing to do
22
+
1926
23
  // collect the class name from the element and build an array
1927
24
  var classNames = this.className.split(/\s+/), didChange = NO;
1928
-
25
+
1929
26
  // loop through hash or just fix single className
1930
27
  if (isHash) {
1931
28
  for(var key in className) {
1932
- if (!className.hasOwnProperty(key)) continue ;
1933
- didChange = fix(classNames, key, className[key]) || didChange;
1934
- }
1935
- } else didChange = fix(classNames, className, shouldAdd);
29
+ if (className.hasOwnProperty(key)) {
30
+ didChange = fix(classNames, key, className[key]) || didChange;
31
+ }
32
+ }
33
+ } else {
34
+ didChange = fix(classNames, className, shouldAdd);
35
+ }
1936
36
 
1937
37
  // if classNames were changed, join them and set...
1938
- if (didChange) this.className = classNames.join(' ');
38
+ if (didChange) { this.className = classNames.join(' '); }
1939
39
  });
1940
40
  return this ;
1941
41
  },
@@ -1946,104 +46,11 @@ SC.mixin(SC.$.fn, /** @scope SC.CoreQuery.prototype */ {
1946
46
  // if should add, add class...
1947
47
  if (shouldAdd) {
1948
48
  if (indexOf < 0) { classNames.push(name); return YES ; }
1949
-
49
+
1950
50
  // otherwise, null out class name (this will leave some extra spaces)
1951
51
  } else if (indexOf >= 0) { classNames[indexOf]=null; return YES; }
1952
52
  return NO ;
1953
- },
1954
-
1955
- /**
1956
- Returns YES if any of the matched elements have the passed element or CQ object as a child element.
1957
- */
1958
- within: function(el) {
1959
- el = SC.$(el); // make into CQ object
1960
- var ret, elCur, myCur, idx, len = el.length,
1961
- loc = this.length;
1962
- while(!ret && (--loc >= 0)) {
1963
- myCur = this[loc];
1964
- for(idx=0; !ret && (idx<len); idx++) {
1965
- elCur = el[idx];
1966
- while(elCur && (elCur !== myCur)) elCur = elCur.parentNode;
1967
- ret = elCur === myCur ;
1968
- }
1969
- }
1970
- myCur = elCur = null ; // clear memory
1971
- return ret ;
1972
- }
1973
-
1974
- });
1975
-
1976
- /**
1977
- Make CoreQuery enumerable. Since some methods need to be disambiguated,
1978
- we will implement some wrapper functions here.
1979
-
1980
- Note that SC.Enumerable is implemented on SC.Builder, which means the
1981
- CoreQuery object inherits this automatically. jQuery does not extend from
1982
- SC.Builder though, so we reapply SC.Enumerable just to be safe.
1983
- */
1984
- (function() {
1985
- var original = {},
1986
- wrappers = {
1987
-
1988
- // if you call find with a selector, then use the jQuery way. If you
1989
- // call with a function/target, use Enumerable way
1990
- find: function(callback,target) {
1991
- return (target !== undefined) ? SC.Enumerable.find.call(this, callback, target) : original.find.call(this, callback) ;
1992
- },
1993
-
1994
- // ditto for filter - execute SC.Enumerable style if a target is passed.
1995
- filter: function(callback,target) {
1996
- return (target !== undefined) ?
1997
- this.pushStack(SC.Enumerable.filter.call(this, callback, target)) :
1998
- original.filter.call(this, callback) ;
1999
- },
2000
-
2001
- // filterProperty is an SC.Enumerable thing, but it needs to be wrapped
2002
- // in a CoreQuery object.
2003
- filterProperty: function(key, value) {
2004
- return this.pushStack(
2005
- SC.Enumerable.filterProperty.call(this,key,value));
2006
- },
2007
-
2008
- // indexOf() is best implemented using the jQuery index()
2009
- indexOf: SC.$.index,
2010
-
2011
- // map() is a little tricky because jQuery is non-standard. If you pass
2012
- // a context object, we will treat it like SC.Enumerable. Otherwise use
2013
- // jQuery.
2014
- map: function(callback, target) {
2015
- return (target !== undefined) ?
2016
- SC.Enumerable.map.call(this, callback, target) :
2017
- original.map.call(this, callback);
2018
- }
2019
- };
2020
-
2021
- // loop through an update some enumerable methods. If this is CoreQuery,
2022
- // we just need to patch up the wrapped methods. If this is jQuery, we
2023
- // need to go through the entire set of SC.Enumerable.
2024
- var isCoreQuery = SC.$.jquery === 'SC.CoreQuery',
2025
- fn = SC.$.fn, enumerable = isCoreQuery ? wrappers : SC.Enumerable ,
2026
- value;
2027
- for(var key in enumerable) {
2028
- if (!enumerable.hasOwnProperty(key)) continue ;
2029
- value = enumerable[key];
2030
- if (key in wrappers) {
2031
- original[key] = fn[key]; value = wrappers[key];
2032
- }
2033
- fn[key] = value;
2034
53
  }
2035
- })();
2036
-
2037
- // Add some global helper methods.
2038
- SC.mixin(SC.$, {
2039
-
2040
- /** @private helper method to determine if an element is visible. Exposed
2041
- for use in testing. */
2042
- isVisible: function(elem) {
2043
- var CQ = SC.$;
2044
- return ("hidden"!=elem.type) && (CQ.css(elem,"display")!="none") && (CQ.css(elem,"visibility")!="hidden");
2045
- }
2046
-
2047
- }) ;
2048
54
 
2049
55
 
56
+ });