sproutcore 1.5.0.pre.3 → 1.5.0.pre.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (308) hide show
  1. data/.rspec +1 -0
  2. data/CHANGELOG +42 -0
  3. data/README.txt +25 -0
  4. data/VERSION.yml +1 -1
  5. data/bin/sc-build +1 -1
  6. data/bin/sc-build-number +1 -1
  7. data/bin/sc-docs +1 -1
  8. data/bin/sc-gen +1 -1
  9. data/bin/sc-init +1 -1
  10. data/bin/sc-manifest +1 -1
  11. data/bin/sc-server +1 -1
  12. data/bin/sproutcore +1 -1
  13. data/lib/buildtasks/build.rake +5 -0
  14. data/lib/buildtasks/manifest.rake +20 -1
  15. data/lib/frameworks/sproutcore/Buildfile +12 -9
  16. data/lib/frameworks/sproutcore/CHANGELOG.md +48 -0
  17. data/lib/frameworks/sproutcore/apps/greenhouse/README +2 -9
  18. data/lib/frameworks/sproutcore/apps/greenhouse/TODO +11 -27
  19. data/lib/frameworks/sproutcore/apps/greenhouse/controllers/library.js +3 -10
  20. data/lib/frameworks/sproutcore/apps/greenhouse/english.lproj/css/main-page.css +4 -31
  21. data/lib/frameworks/sproutcore/apps/greenhouse/english.lproj/dialogs.js +5 -4
  22. data/lib/frameworks/sproutcore/apps/greenhouse/models/dir.js +3 -3
  23. data/lib/frameworks/sproutcore/apps/greenhouse/models/file.js +2 -2
  24. data/lib/frameworks/sproutcore/apps/greenhouse/states/main.js +31 -14
  25. data/lib/frameworks/sproutcore/apps/greenhouse/states/modals.js +2 -1
  26. data/lib/frameworks/sproutcore/apps/greenhouse/states/ready.js +27 -1
  27. data/lib/frameworks/sproutcore/apps/greenhouse/tests/views/list_item.js +1 -0
  28. data/lib/frameworks/sproutcore/apps/greenhouse/tests/views/plist_item.js +20 -0
  29. data/lib/frameworks/sproutcore/apps/greenhouse/theme.js +25 -0
  30. data/lib/frameworks/sproutcore/apps/greenhouse/views/plist_item.js +161 -24
  31. data/lib/frameworks/sproutcore/apps/greenhouse/views/tear_off_picker.js +1 -1
  32. data/lib/frameworks/sproutcore/frameworks/bootstrap/system/browser.js +37 -25
  33. data/lib/frameworks/sproutcore/frameworks/bootstrap/tests/system/browser.js +135 -26
  34. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/controllers/array.js +0 -0
  35. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/controllers/controller.js +0 -0
  36. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/controllers/object.js +1 -1
  37. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/core.js +0 -0
  38. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/ext/object.js +0 -0
  39. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/ext/run_loop.js +1 -0
  40. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/mixins/delegate_support.js +0 -0
  41. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/mixins/responder_context.js +0 -0
  42. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/mixins/selection_support.js +0 -0
  43. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/mixins/string.js +0 -0
  44. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/keyboard.js +68 -0
  45. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/layout.js +108 -0
  46. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/panes/main.js +2 -2
  47. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/manipulation.js +27 -0
  48. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/panes/pane.js +215 -505
  49. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/template.js +24 -0
  50. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/visibility.js +11 -0
  51. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/protocols/observable_protocol.js +0 -0
  52. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/protocols/sparse_array_delegate.js +0 -0
  53. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/resources/core.css +0 -0
  54. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/resources/view.css +0 -0
  55. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/application.js +0 -0
  56. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/browser.js +1 -0
  57. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/builder.js +0 -0
  58. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/core_query.js +1 -1
  59. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/cursor.js +0 -0
  60. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/device.js +210 -0
  61. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/event.js +5 -5
  62. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/json.js +0 -0
  63. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/locale.js +0 -0
  64. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/page.js +0 -0
  65. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/platform.js +31 -5
  66. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/ready.js +1 -1
  67. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/render_context.js +0 -0
  68. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/responder.js +0 -0
  69. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/root_responder.js +83 -110
  70. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/selection_set.js +7 -4
  71. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/sparse_array.js +0 -0
  72. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/theme.js +0 -0
  73. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/timer.js +0 -0
  74. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/system/utils/rect.js +0 -0
  75. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/utils.js +151 -0
  76. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/array/array_case.js +0 -0
  77. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/array/enum_case.js +0 -0
  78. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/array/null_case.js +0 -0
  79. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/array/selection_support.js +26 -0
  80. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/array/single_case.js +0 -0
  81. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/object/empty_case.js +0 -0
  82. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/object/multiple_case.js +0 -0
  83. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/object/single_case.js +0 -0
  84. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/controllers/object/single_enumerable_case.js +0 -0
  85. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/mixins/responder_context.js +0 -0
  86. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/mixins/string.js +0 -0
  87. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/panes/template.js +14 -0
  88. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/builder.js +0 -0
  89. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/core_query/within.js +0 -0
  90. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/json.js +0 -0
  91. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/locale.js +0 -0
  92. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/begin.js +0 -0
  93. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/element.js +0 -0
  94. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/end.js +0 -0
  95. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/get.js +0 -0
  96. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/helpers_attr.js +0 -0
  97. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/helpers_basic.js +0 -0
  98. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/helpers_className.js +0 -0
  99. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/helpers_style.js +0 -0
  100. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/init.js +0 -0
  101. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/join.js +0 -0
  102. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/push_text.js +0 -0
  103. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/tag.js +0 -0
  104. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/render_context/update.js +0 -0
  105. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/root_responder/makeKeyPane.js +0 -0
  106. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/root_responder/makeMainPane.js +0 -0
  107. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/root_responder/makeMenuPane.js +0 -0
  108. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/root_responder/root_responder.js +0 -0
  109. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/root_responder/targetForAction.js +0 -0
  110. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/selection_set/add.js +0 -0
  111. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/selection_set/copy.js +0 -0
  112. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/selection_set/indexSetForSource.js +0 -0
  113. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/selection_set/isEqual.js +0 -0
  114. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/selection_set/remove.js +0 -0
  115. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/sparse_array.js +0 -0
  116. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/theme.js +0 -0
  117. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/timer/invalidate.js +0 -0
  118. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/timer/invokeLater.js +0 -0
  119. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/timer/isPaused.js +0 -0
  120. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/timer/performAction.js +0 -0
  121. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/timer/schedule.js +0 -0
  122. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/utils/normalizeURL.js +0 -0
  123. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/utils/offset.js +268 -0
  124. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/system/utils/rect.js +0 -0
  125. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/main_pane.js +43 -0
  126. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/pane/append_remove.js +107 -18
  127. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/child_view.js +20 -0
  128. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/pane/firstResponder.js +0 -0
  129. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/pane/keyPane.js +0 -0
  130. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/pane/layout.js +0 -0
  131. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/pane/sendEvent.js +0 -0
  132. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template/checkbox_support.js +32 -0
  133. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template/text_field_support.js +73 -0
  134. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template_view/collection.js +65 -0
  135. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template_view/core.js +67 -0
  136. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template_view/handlebars.js +295 -0
  137. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/animation.js +19 -18
  138. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/build.js +0 -0
  139. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/build_children.js +0 -0
  140. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/clippingFrame.js +0 -0
  141. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/convertFrames.js +0 -0
  142. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/convertLayouts.js +0 -0
  143. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/createChildViews.js +18 -15
  144. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/createLayer.js +0 -0
  145. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/destroyLayer.js +0 -0
  146. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/didAppendToDocument.js +11 -8
  147. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/findLayerInParentLayer.js +0 -0
  148. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/init.js +0 -0
  149. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/insertBefore.js +0 -0
  150. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/isVisible.js +28 -0
  151. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/isVisibleInWindow.js +0 -0
  152. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/keyboard.js +22 -0
  153. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/layer.js +0 -0
  154. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/layoutChildViews.js +0 -0
  155. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutDidChange.js +180 -0
  156. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutStyle.js +640 -0
  157. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/parentViewDidChange.js +0 -0
  158. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/prepareContext.js +0 -0
  159. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/removeChild.js +0 -0
  160. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/render.js +125 -0
  161. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/render_delegate_support.js +0 -0
  162. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/replaceChild.js +0 -0
  163. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/static_layout.js +21 -0
  164. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/theme.js +0 -0
  165. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/updateLayer.js +0 -0
  166. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/updateLayerLocation.js +0 -0
  167. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/view.js +0 -0
  168. data/lib/frameworks/sproutcore/frameworks/{amber → core_foundation}/tests/views/view/viewDidResize.js +0 -0
  169. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template/checkbox_support.js +20 -0
  170. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template/collection.js +99 -0
  171. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template/text_field_support.js +35 -0
  172. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template.js +77 -0
  173. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/animation.js +187 -0
  174. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/base.js +1 -0
  175. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/cursor.js +41 -0
  176. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/enabled.js +57 -0
  177. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/keyboard.js +223 -0
  178. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout.js +1150 -0
  179. data/lib/frameworks/sproutcore/frameworks/{amber/views → core_foundation/views/view}/layout_style.js +93 -1
  180. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/manipulation.js +489 -0
  181. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/theming.js +362 -0
  182. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/touch.js +67 -0
  183. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/visibility.js +113 -0
  184. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +1280 -0
  185. data/lib/frameworks/sproutcore/frameworks/datastore/models/child_attribute.js +27 -53
  186. data/lib/frameworks/sproutcore/frameworks/datastore/models/children_attribute.js +13 -19
  187. data/lib/frameworks/sproutcore/frameworks/datastore/models/many_attribute.js +1 -0
  188. data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +183 -71
  189. data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +1 -2
  190. data/lib/frameworks/sproutcore/frameworks/datastore/system/child_array.js +26 -46
  191. data/lib/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +25 -4
  192. data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +139 -21
  193. data/lib/frameworks/sproutcore/frameworks/datastore/tests/data_sources/fixtures.js +6 -1
  194. data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/cyclical_relationship.js +1 -1
  195. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/{parentless.js → data_store.js} +62 -16
  196. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record.js +51 -17
  197. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array.js +36 -10
  198. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array_complex.js +11 -11
  199. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_complex.js +8 -8
  200. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/normalize.js +2 -2
  201. data/lib/frameworks/sproutcore/frameworks/{foundation/english.lproj → datetime/resources}/strings.js +1 -0
  202. data/lib/frameworks/sproutcore/frameworks/{foundation → datetime}/system/datetime.js +5 -37
  203. data/lib/frameworks/sproutcore/frameworks/{foundation → datetime}/tests/system/datetime.js +1 -0
  204. data/lib/frameworks/sproutcore/frameworks/debug/core.js +1 -1
  205. data/lib/frameworks/sproutcore/frameworks/designer/controllers/designs.js +1 -2
  206. data/lib/frameworks/sproutcore/frameworks/designer/designers/object_designer.js +3 -3
  207. data/lib/frameworks/sproutcore/frameworks/designer/designers/view_designer.js +3 -3
  208. data/lib/frameworks/sproutcore/frameworks/designer/views/designer_drop_target.js +9 -3
  209. data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/segmented.css +71 -70
  210. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_row_delegate.js +10 -2
  211. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segment.js +4 -19
  212. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segmented.js +33 -14
  213. data/lib/frameworks/sproutcore/frameworks/desktop/system/drag.js +25 -0
  214. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/date_field/ui.js +1 -1
  215. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/methods.js +25 -103
  216. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +102 -92
  217. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/tab/ui.js +22 -25
  218. data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +38 -25
  219. data/lib/frameworks/sproutcore/frameworks/desktop/views/date_field.js +1 -1
  220. data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll.js +1 -1
  221. data/lib/frameworks/sproutcore/frameworks/desktop/views/segment.js +42 -22
  222. data/lib/frameworks/sproutcore/frameworks/desktop/views/segmented.js +513 -230
  223. data/lib/frameworks/sproutcore/frameworks/desktop/views/select_field.js +0 -2
  224. data/lib/frameworks/sproutcore/frameworks/experimental/README.md +23 -0
  225. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/device_motion/README.md +11 -0
  226. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/device_motion/device.js +215 -0
  227. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/device_motion/platform.js +67 -0
  228. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/README.md +34 -0
  229. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/models/polymorphic_single_attribute.js +183 -0
  230. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/models/record.js +23 -0
  231. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/tests/models/polymorphic/single.js +124 -0
  232. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_resize.js +0 -2
  233. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inner_frame.js +151 -0
  234. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/canvas_image.js +27 -17
  235. data/lib/frameworks/sproutcore/frameworks/foundation/system/image_queue.js +6 -3
  236. data/lib/frameworks/sproutcore/frameworks/foundation/system/logger.js +163 -0
  237. data/lib/frameworks/sproutcore/frameworks/foundation/system/user_defaults.js +6 -3
  238. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/beginEditing.js +1 -0
  239. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/logger.js +44 -0
  240. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/image/ui.js +200 -167
  241. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +1 -1
  242. data/lib/frameworks/sproutcore/frameworks/foundation/views/image.js +52 -137
  243. data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +7 -11
  244. data/lib/frameworks/sproutcore/frameworks/handlebars/extensions.js +138 -0
  245. data/lib/frameworks/sproutcore/frameworks/handlebars/handlebars.js +1338 -0
  246. data/lib/frameworks/sproutcore/frameworks/runtime/core.js +32 -26
  247. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/base.js +162 -3
  248. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/array.js +10 -5
  249. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +123 -3
  250. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +12 -5
  251. data/lib/frameworks/sproutcore/frameworks/runtime/private/chain_observer.js +50 -13
  252. data/lib/frameworks/sproutcore/frameworks/runtime/system/logger.js +163 -333
  253. data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +58 -8
  254. data/lib/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +2 -0
  255. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/itemType.js +9 -6
  256. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/makeArray.js +15 -1
  257. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/array.js +2 -0
  258. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/chained.js +31 -0
  259. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/observable.js +18 -0
  260. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/logger.js +31 -143
  261. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/concatenated_properties.js +71 -0
  262. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/enhance.js +177 -0
  263. data/lib/frameworks/sproutcore/frameworks/table/views/table.js +5 -4
  264. data/lib/frameworks/sproutcore/frameworks/table/views/table_header.js +5 -3
  265. data/lib/frameworks/sproutcore/themes/ace/resources/button/button.js +8 -2
  266. data/lib/frameworks/sproutcore/themes/ace/resources/menu/menu.css +2 -3
  267. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/18px/segmented.css +1 -1
  268. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented.css +1 -1
  269. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented.css +1 -1
  270. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/44px/segmented.css +1 -1
  271. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/segmented.css +2 -2
  272. data/lib/frameworks/sproutcore/themes/standard_theme/english.lproj/segmented.css +62 -62
  273. data/lib/gen/html_app/Buildfile +36 -0
  274. data/lib/gen/html_app/README +1 -0
  275. data/lib/gen/html_app/USAGE +15 -0
  276. data/lib/gen/html_app/templates/apps/@target_name@/@target_name@.js +14 -0
  277. data/lib/gen/html_app/templates/apps/@target_name@/resources/images/.gitkeep +0 -0
  278. data/lib/gen/html_app/templates/apps/@target_name@/resources/stylesheets/@target_name@.css +0 -0
  279. data/lib/gen/html_app/templates/apps/@target_name@/resources/templates/@target_name@.handlebars +1 -0
  280. data/lib/gen/html_project/Buildfile +45 -0
  281. data/lib/gen/html_project/INIT +3 -0
  282. data/lib/gen/html_project/README +1 -0
  283. data/lib/gen/html_project/USAGE +2 -0
  284. data/lib/gen/html_project/templates/@filename@/Buildfile +8 -0
  285. data/lib/gen/html_project/templates/@filename@/README +7 -0
  286. data/lib/sproutcore/builders/handlebars.rb +30 -0
  287. data/lib/sproutcore/builders.rb +1 -1
  288. data/lib/sproutcore/helpers/static_helper.rb +3 -3
  289. data/lib/sproutcore/tools/init.rb +25 -9
  290. data/spec/buildtasks/manifest/prepare_build_tasks/handlebars_spec.rb +39 -0
  291. data/spec/fixtures/builder_tests/apps/handlebars_test/template.handlebars +5 -0
  292. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/templates/demo.handlebars +4 -0
  293. data/spec/lib/builders/handlebars_spec.rb +29 -0
  294. data/vendor/chance/lib/chance/imagers/data_url.rb +20 -7
  295. data/vendor/chance/lib/chance/instance.rb +4 -1
  296. data/vendor/chance/lib/chance/parser.rb +31 -31
  297. data/vendor/chance/lib/chance/slicing.rb +38 -8
  298. metadata +195 -225
  299. data/lib/frameworks/sproutcore/frameworks/amber/system/device.js +0 -143
  300. data/lib/frameworks/sproutcore/frameworks/amber/system/utils.js +0 -174
  301. data/lib/frameworks/sproutcore/frameworks/amber/tests/views/main_pane.js +0 -31
  302. data/lib/frameworks/sproutcore/frameworks/amber/tests/views/pane/sendTouchEvent.js +0 -267
  303. data/lib/frameworks/sproutcore/frameworks/amber/tests/views/view/layoutDidChange.js +0 -149
  304. data/lib/frameworks/sproutcore/frameworks/amber/tests/views/view/layoutStyle.js +0 -602
  305. data/lib/frameworks/sproutcore/frameworks/amber/tests/views/view/render.js +0 -115
  306. data/lib/frameworks/sproutcore/frameworks/amber/views/base.js +0 -1
  307. data/lib/frameworks/sproutcore/frameworks/amber/views/view.js +0 -4003
  308. data/lib/frameworks/sproutcore/frameworks/datastore/models/child_record.js +0 -105
@@ -12,14 +12,14 @@ htmlbody('<style> .sc-static-layout { border: 1px red dotted; } </style>');
12
12
  var pane;
13
13
  (function() {
14
14
  var iconURL= "http://www.freeiconsweb.com/Icons/16x16_people_icons/People_046.gif";
15
-
15
+
16
16
  pane = SC.ControlTestPane.design()
17
-
18
- .add("3_empty", SC.SegmentedView, {
17
+
18
+ .add("3_empty", SC.SegmentedView, {
19
19
  items: [ '', '' , ''],
20
20
  layout: { height: 25 }
21
21
  })
22
- .add("3_empty,icon", SC.SegmentedView, {
22
+ .add("3_empty,icon", SC.SegmentedView, {
23
23
  items: [
24
24
  { value: "", icon: iconURL },
25
25
  { value: "", icon: iconURL },
@@ -29,12 +29,12 @@ var pane;
29
29
  itemIconKey: 'icon',
30
30
  layout: { height: 25 }
31
31
  })
32
- .add("3_items,1_sel", SC.SegmentedView, {
32
+ .add("3_items,1_sel", SC.SegmentedView, {
33
33
  items: "Item1 Item2 Item3".w(),
34
34
  value: "Item2",
35
35
  layout: { height: 25 }
36
36
  })
37
- .add("2_items,toolTip", SC.SegmentedView, {
37
+ .add("2_items,toolTip", SC.SegmentedView, {
38
38
  items: [
39
39
  { value: "title1", toolTip: "this is title1's tip" },
40
40
  { value: "title2", toolTip: "this is title2's tip" }],
@@ -43,13 +43,13 @@ var pane;
43
43
  itemToolTipKey: 'toolTip',
44
44
  layout: { height: 25 }
45
45
  })
46
- .add("3_items,1_sel,disabled", SC.SegmentedView, {
46
+ .add("3_items,1_sel,disabled", SC.SegmentedView, {
47
47
  items: "Item1 Item2 Item3".w(),
48
48
  value: "Item2",
49
49
  isEnabled: NO,
50
50
  layout: { height: 25 }
51
51
  })
52
- .add("3_items,icon,2_sel", SC.SegmentedView, {
52
+ .add("3_items,icon,2_sel", SC.SegmentedView, {
53
53
  items: [
54
54
  { value: "Item1", icon: iconURL },
55
55
  { value: "Item2", icon: iconURL },
@@ -61,7 +61,7 @@ var pane;
61
61
  allowsEmptySelection: NO,
62
62
  layout: { height: 25 }
63
63
  })
64
- .add("3_items,2_sel,disabled", SC.SegmentedView, {
64
+ .add("3_items,2_sel,disabled", SC.SegmentedView, {
65
65
  items: [
66
66
  { value: "Item1", icon: iconURL },
67
67
  { value: "Item2", icon: iconURL },
@@ -72,66 +72,66 @@ var pane;
72
72
  isEnabled: NO,
73
73
  value: "Item1 Item3".w(),
74
74
  layout: { height: 25 }
75
- })
76
- .add("3_items,1_sel,emptySel", SC.SegmentedView, {
75
+ })
76
+ .add("3_items,1_sel,emptySel", SC.SegmentedView, {
77
77
  items: ["Item1", "Very Long Item", "Item 3"],
78
78
  value: "Very Long Item",
79
79
  allowsEmptySelection: YES,
80
80
  layout: { height: 25 }
81
81
  })
82
- .add("3_items,2_sel,emptySel", SC.SegmentedView, {
82
+ .add("3_items,2_sel,emptySel", SC.SegmentedView, {
83
83
  items: ["Item1", "Very Long Item", "Item 3"],
84
84
  value: "Item1 Item3".w(),
85
85
  allowsEmptySelection: YES,
86
86
  layout: { height: 25 }
87
87
  })
88
- .add("3_items,1_sel,multipleSel", SC.SegmentedView, {
88
+ .add("3_items,1_sel,multipleSel", SC.SegmentedView, {
89
89
  items: "Item1 Item2 Item3".w(),
90
90
  value: "Item2",
91
91
  allowsMultipleSelection: YES,
92
92
  layout: { height: 25 }
93
93
  })
94
- .add("3_items,2_sel,multipleSel", SC.SegmentedView, {
94
+ .add("3_items,2_sel,multipleSel", SC.SegmentedView, {
95
95
  items: "Item1 Item2 Item3".w(),
96
96
  value: "Item1 Item3".w(),
97
97
  allowsMultipleSelection: YES,
98
98
  layout: { height: 25 }
99
99
  })
100
- .add("3_items,1_sel,emptySel,multiSel", SC.SegmentedView, {
100
+ .add("3_items,1_sel,emptySel,multiSel", SC.SegmentedView, {
101
101
  items: "Item1 Item2 Item3".w(),
102
102
  value: "Item2",
103
103
  allowsEmptySelection: YES,
104
104
  allowsMultipleSelection: YES,
105
105
  layout: { height: 25 }
106
106
  })
107
- .add("3_items,2_sel,emptySel,multiSel", SC.SegmentedView, {
107
+ .add("3_items,2_sel,emptySel,multiSel", SC.SegmentedView, {
108
108
  items: "Item1 Item2 Item3".w(),
109
109
  value: "Item1 Item3".w(),
110
110
  allowsEmptySelection: YES,
111
111
  allowsMultipleSelection: YES,
112
112
  layout: { height: 25 }
113
113
  })
114
- .add("3_items,leftAligned", SC.SegmentedView, {
114
+ .add("3_items,leftAligned", SC.SegmentedView, {
115
115
  items: "Item1 Item2 Item3".w(),
116
116
  align: SC.ALIGN_LEFT,
117
117
  layout: { height: 25 }
118
118
  })
119
- .add("3_items,rightAligned", SC.SegmentedView, {
119
+ .add("3_items,rightAligned", SC.SegmentedView, {
120
120
  items: "Item1 Item2 Item3".w(),
121
121
  align: SC.ALIGN_RIGHT,
122
122
  layout: { height: 25 }
123
123
  })
124
- .add("3_items,widths", SC.SegmentedView, {
124
+ .add("3_items,widths", SC.SegmentedView, {
125
125
  items: [
126
- { value: "A", width: 70 },
127
- { value: "B", width: 70 },
128
- { value: "C", width: 70 }],
126
+ SC.Object.create({ value: "A", width: 70 }),
127
+ SC.Object.create({ value: "B", width: 70 }),
128
+ SC.Object.create({ value: "C", width: 70 })],
129
129
  itemTitleKey: 'value',
130
130
  itemValueKey: 'value',
131
131
  itemWidthKey: 'width',
132
132
  layout: { height: 25 }
133
133
  })
134
- .add("5_items,widths,overflow", SC.SegmentedView, {
134
+ .add("5_items,widths,overflow", SC.SegmentedView, {
135
135
  items: [
136
136
  { value: "A", width: 70 },
137
137
  { value: "B", width: 70 },
@@ -143,7 +143,7 @@ var pane;
143
143
  itemWidthKey: 'width',
144
144
  layout: { height: 25 }
145
145
  })
146
- .add("5_items,1_sel,widths,overflow", SC.SegmentedView, {
146
+ .add("5_items,1_sel,widths,overflow", SC.SegmentedView, {
147
147
  items: [
148
148
  { value: "A", width: 70 },
149
149
  { value: "B", width: 70 },
@@ -156,14 +156,14 @@ var pane;
156
156
  value: "D",
157
157
  layout: { height: 25 }
158
158
  });
159
-
159
+
160
160
  pane.show(); // add a test to show the test pane
161
161
 
162
162
  // ..........................................................
163
163
  // TEST VIEWS
164
- //
164
+ //
165
165
  module('SC.SegmentedView ui', pane.standardSetup());
166
-
166
+
167
167
  test("Check that all segmentedViews are visible", function() {
168
168
  ok(pane.view('3_empty').get('isVisibleInWindow'), '3_empty.isVisibleInWindow should be YES');
169
169
  ok(pane.view('3_empty,icon').get('isVisibleInWindow'), '3_empty,icon.isVisibleInWindow should be YES');
@@ -181,78 +181,88 @@ var pane;
181
181
  ok(pane.view('3_items,leftAligned').get('isVisibleInWindow'), '3_items,leftAligned.isVisibleInWindow should be YES');
182
182
  ok(pane.view('3_items,rightAligned').get('isVisibleInWindow'), '3_items,rightAligned.isVisibleInWindow should be YES');
183
183
  });
184
-
185
-
184
+
185
+
186
186
  test("Check that all segments have the right classes set", function() {
187
187
  var viewElem=pane.view('3_empty').$();
188
- var segments=pane.view('3_empty').$('a');
189
- equals(segments.length, 3, 'precond - segmented view should have 3 segments');
188
+ var segments=pane.view('3_empty').$('.sc-segment-view');
189
+
190
+ equals(segments.length, 4, 'precond - segmented view should have 4 segment elements (including overflow)');
191
+
190
192
  ok(viewElem.hasClass('sc-view'), '3_empty.hasClass(sc-view) should be YES');
191
193
  ok(viewElem.hasClass('sc-segmented-view'), '3_empty.hasClass(sc-segmented-view) should be YES');
192
- for (var i=0, ilen=segments.length; i<ilen; i++){
194
+ for (var i=0, seglen=segments.length - 1; i<seglen; i++){
193
195
  var seg=segments[i];
194
196
  if(i===0){
195
197
  ok((seg.className.indexOf('sc-first-segment')>=0), 'first segment has the right classname assigned.');
196
- }
197
- if(i==segments.length-1){
198
+ }
199
+ if(i===seglen-1){
198
200
  ok((seg.className.indexOf('sc-last-segment')>=0), 'last segment has the right classname assigned.');
199
201
  }
200
202
  ok((seg.childNodes[0].className.indexOf('sc-button-inner')>=0), 'segment '+i+' should have an inner-button.');
201
203
  ok((seg.childNodes[0].childNodes[0].className.indexOf('sc-button-label')>=0), 'segment '+i+' should have a label.');
202
-
203
- if(i!==0 && i!=segments.length-1){
204
- ok((seg.className.indexOf('sc-middle-segment')>=0), 'middle segment has the right classname assigned.');
204
+
205
+ if(i !== 0 && i < seglen-1) {
206
+ ok((seg.className.indexOf('sc-middle-segment')>=0), 'middle segments have the right classname assigned.');
205
207
  }
206
208
  viewElem=pane.view('3_items,2_sel,disabled').$();
207
209
  ok(viewElem.hasClass('disabled'), '3_items,2_sel,disabled should have the disabled class set');
208
210
  }
209
211
 
210
212
  });
211
-
212
-
213
- test("Check that all segments have the right classes set", function() {
213
+
214
+
215
+ test("Check that all segments have the right classes set (with icons)", function() {
214
216
  var viewElem=pane.view('3_empty,icon').$();
215
- var segments=pane.view('3_empty,icon').$('a');
216
- equals(segments.length, 3, 'precond - segmented view should have 3 segments');
217
+ var segments=pane.view('3_empty,icon').$('.sc-segment-view');
218
+
219
+ equals(segments.length, 4, 'precond - segmented view should have 4 segment elements (including overflow)');
220
+
217
221
  ok(viewElem.hasClass('sc-view'), '3_empty.hasClass(sc-view) should be YES');
218
222
  ok(viewElem.hasClass('sc-segmented-view'), '3_empty.hasClass(sc-segmented-view) should be YES');
219
- for (var i=0, ilen=segments.length; i<ilen; i++){
223
+ for (var i=0, seglen=segments.length - 1; i<seglen; i++){
220
224
  var seg=segments[i];
221
225
  if(i===0){
222
226
  ok((seg.className.indexOf('sc-first-segment')>=0), 'first segment has the right classname assigned.');
223
- }
224
- if(i==segments.length-1){
227
+ }
228
+ if(i==seglen-1){
225
229
  ok((seg.className.indexOf('sc-last-segment')>=0), 'last segment has the right classname assigned.');
226
230
  }
227
231
  ok((seg.childNodes[0].className.indexOf('sc-button-inner')>=0), 'segment '+i+' should have an inner-button.');
228
232
  ok((seg.childNodes[0].childNodes[0].className.indexOf('sc-button-label')>=0), 'segment '+i+' should have a label.');
229
233
  ok((seg.childNodes[0].childNodes[0].childNodes[0].src.length>0), 'segment '+i+' should have an icon.');
230
-
231
- if(i!==0 && i!=segments.length-1){
232
- ok((seg.className.indexOf('sc-middle-segment')>=0), 'middle segment has the right classname assigned.');
234
+
235
+ if(i!==0 && i!=seglen-1){
236
+ ok((seg.className.indexOf('sc-middle-segment')>=0), 'middle segments have the right classname assigned.');
233
237
  }
234
238
  viewElem=pane.view('3_items,2_sel,disabled').$();
235
239
  ok(viewElem.hasClass('disabled'), '3_items,2_sel,disabled should have the disabled class set');
236
240
  }
237
241
 
238
242
  });
239
-
240
-
241
- test("Check that the selected segments have the right classes assigned.", function() {
242
- var segments=pane.view('3_empty').$('a');
243
- equals(segments.length, 3, 'precond - segmented view should have 3 segments');
243
+
244
+
245
+ test("No value set", function() {
246
+ var segments=pane.view('3_empty').$('.sc-segment-view');
247
+
248
+ // allow for a render to happen
249
+ SC.RunLoop.begin().end();
250
+
251
+ equals(segments.length, 4, 'precond - segmented view should have 4 segment elements (including overflow)');
244
252
  for (var i=0, ilen=segments.length; i<ilen; i++){
245
253
  var seg=segments[i];
246
254
  ok((seg.className.indexOf('sel')==-1), 'this element should not be selected.');
247
255
  }
248
256
 
249
257
  });
250
-
251
-
258
+
259
+
252
260
  test("Check that two items are selected.", function() {
253
- var segments=pane.view('3_items,icon,2_sel').$('a');
261
+ var segments=pane.view('3_items,icon,2_sel').$('.sc-segment-view');
254
262
  var count=0;
255
- equals(segments.length, 3, 'precond - segmented view should have 3 segments');
263
+
264
+ equals(segments.length, 4, 'precond - segmented view should have 4 segment elements (including overflow)');
265
+
256
266
  for (var i=0, ilen=segments.length; i<ilen; i++){
257
267
  var seg=segments[i];
258
268
  if(seg.className.indexOf('sel')!=-1){
@@ -262,111 +272,111 @@ var pane;
262
272
  equals(count, 2, '3_items,2_sel,disabled should have two segments selected.');
263
273
 
264
274
  });
265
-
266
-
275
+
276
+
267
277
  test("2_items,toolTip has toolTips assigned.", function() {
268
- var segments=pane.view('2_items,toolTip').$('a');
278
+ var segments=pane.view('2_items,toolTip').$('.sc-segment-view');
269
279
  ok((segments[0].title=="this is title1's tip"), 'first segment has expected tool tip assigned.');
270
280
  ok((segments[1].title=="this is title2's tip"), 'second segment has expected tool tip assigned.');
271
281
  });
272
-
282
+
273
283
  test("Check the alignment styles for align property.", function() {
274
284
  equals(pane.view("3_empty").$().css('text-align'), 'center', 'default align property should text-align the segmented-view to the center');
275
285
  equals(pane.view("3_items,leftAligned").$().css('text-align'), 'left', 'setting align: SC.ALIGN_LEFT should text-align the segmented-view to the left');
276
286
  equals(pane.view("3_items,rightAligned").$().css('text-align'), 'right', 'setting align: SC.ALIGN_LEFT should text-align the segmented-view to the left');
277
287
  });
278
-
279
- test("Check that changing title re-renders the segments (for hash or object items only).", function() {
288
+
289
+ test("Check that changing title re-renders the segments (for SC.Object items only).", function() {
280
290
  var sv = pane.view("3_items,widths");
281
- var segments=sv.$('a');
291
+ var segments=sv.$('.sc-segment-view');
282
292
  var defaults = ['A', 'B', 'C'];
283
- for (var i=0, len=segments.length; i < len; i++){
293
+ for (var i=0, len=segments.length - 1; i < len; i++){
284
294
  var segEl=segments[i];
285
295
  var label=$(segEl).find('label')[0];
286
296
  equals(label.innerHTML, defaults[i], 'there should be "' + defaults[i] + '" in the segment\'s label');
287
297
  }
288
-
298
+
289
299
  // change the title of the second item
290
300
  var items = sv.get('items');
291
301
  items[1].set('value', 'Item 2');
292
-
302
+
293
303
  // allow for a render to happen
294
304
  SC.RunLoop.begin().end();
295
-
305
+
296
306
  segEl=segments[1];
297
307
  label=$(segEl).find('label')[0];
298
308
  equals(label.innerHTML, "Item 2", 'there should be "Item 2" text in the second segment');
299
309
  });
300
-
310
+
301
311
  test("Check that changing width re-renders the segments (for hash or object items only).", function() {
302
312
  var sv = pane.view("3_items,widths");
303
- var segments=sv.$('a');
304
- for (var i=0, len=segments.length; i < len; i++){
313
+ var segments=sv.$('.sc-segment-view');
314
+ for (var i=0, len=segments.length - 1; i < len; i++){
305
315
  var segEl=segments[i];
306
316
  var width=$(segEl).css('width');
307
317
  equals(width, "70px", 'the segment style width should be "70px"');
308
318
  }
309
-
319
+
310
320
  // change the width of the second item
311
321
  var items = sv.get('items');
312
322
  items[1].set('width', 100);
313
-
323
+
314
324
  // allow for a render to happen
315
325
  SC.RunLoop.begin().end();
316
-
326
+
317
327
  segEl=segments[1];
318
328
  width=$(segEl).css('width');
319
329
  equals(width, "100px", 'the second segment style width should be "100px"');
320
330
  });
321
-
331
+
322
332
  test("Check that overflow adds an overflow segment on view.", function() {
323
333
  var sv = pane.view("5_items,widths,overflow");
324
334
  var lastIsOverflow = function(sv) {
325
335
  SC.RunLoop.begin().end(); // allow for a render to happen
326
-
327
- var segments=sv.$('a');
336
+
337
+ var segments=sv.$('.sc-segment-view');
328
338
  var overflowEl = segments[segments.length - 1];
329
339
  ok($(overflowEl).hasClass('sc-overflow-segment'), 'overflow segment should have .sc-overflow-segment class');
330
340
  var overflowLabelEl = $(overflowEl).find('label')[0];
331
341
  equals(overflowLabelEl.innerHTML, "»", 'there should be "»" text in the overflow segment');
332
342
  };
333
-
343
+
334
344
  var lastIsSegment = function(sv, text) {
335
345
  SC.RunLoop.begin().end(); // allow for a render to happen
336
-
337
- var segments=sv.$('a');
338
- var lastEl = segments[segments.length - 1];
346
+
347
+ var segments=sv.$('.sc-segment-view');
348
+ var lastEl = segments[segments.length - 2];
339
349
  ok(!$(lastEl).hasClass('sc-overflow-segment'), 'last segment should not have .sc-overflow-segment class');
340
350
  var lastLabelEl = $(lastEl).find('label')[0];
341
351
  equals(lastLabelEl.innerHTML, text, 'there should be "' + text + '" text in the last segment');
342
352
  };
343
-
353
+
344
354
  // the last item should be an overflow segment (ie. has .sc-overflow-segment class and text "»")
345
355
  lastIsOverflow(sv);
346
-
356
+
347
357
  // check that the overflowed items are stored
348
358
  var overflowItems = sv.overflowItems;
349
359
  equals(overflowItems.length, 2, "there should be 2 overflowed items");
350
-
360
+
351
361
  // 1. remove the last two items (the last item should no longer be an overflow segment)
352
362
  var items = sv.get('items');
353
363
  items.removeAt(items.length - 1);
354
364
  items.removeAt(items.length - 1);
355
365
  lastIsSegment(sv, "C");
356
-
366
+
357
367
  // 2. add an item (the last item should be an overflow segment again)
358
368
  items.pushObject({value: 'X', width: 100});
359
369
  lastIsOverflow(sv);
360
-
370
+
361
371
  // 3. shrink the items (the last item should no longer be an overflow segment)
362
372
  items.invoke('set', 'width', 50);
363
373
  lastIsSegment(sv, "X");
364
-
374
+
365
375
  // 4. grow the items (the last item should be an overflow segment again)
366
376
  items.invoke('set', 'width', 100);
367
377
  lastIsOverflow(sv);
368
-
369
- // 5. shrink the items, but then shrink the segmented view
378
+
379
+ // 5. shrink the items, but then shrink the segmented view
370
380
  items.invoke('set', 'width', 50);
371
381
  lastIsSegment(sv, "X");
372
382
  sv.set('layout', {left: 75, right: 75, top: 0, height: 25});
@@ -376,11 +386,11 @@ var pane;
376
386
  SC.RunLoop.begin().end(); // allow for a render to happen (measure the segments)
377
387
  lastIsOverflow(sv);
378
388
  });
379
-
389
+
380
390
  test("Check that the overflow segment is selected when overflowed items are selected.", function() {
381
391
  var sv = pane.view("5_items,1_sel,widths,overflow");
382
- var segments=sv.$('a');
383
-
392
+ var segments=sv.$('.sc-segment-view');
393
+
384
394
  // the overflow item should be selected (because an overflowed item is selected)
385
395
  var overflowEl = segments[segments.length - 1];
386
396
  ok($(overflowEl).hasClass('sel'), 'overflow segment should have .sel class');
@@ -12,10 +12,10 @@ htmlbody('<style> .sc-static-layout { border: 1px red dotted; } </style>');
12
12
 
13
13
  (function() {
14
14
  var iconURL= "http://www.freeiconsweb.com/Icons/16x16_people_icons/People_046.gif";
15
-
15
+
16
16
  var pane = SC.ControlTestPane.design()
17
-
18
- .add("tabView1", SC.TabView, {
17
+
18
+ .add("tabView1", SC.TabView, {
19
19
  nowShowing: 'tab2',
20
20
 
21
21
  items: [
@@ -23,15 +23,15 @@ htmlbody('<style> .sc-static-layout { border: 1px red dotted; } </style>');
23
23
  { title: "tab2", value: "tab2" , icon: iconURL},
24
24
  { title: "tab3", value: "tab3" , icon: iconURL}
25
25
  ],
26
-
26
+
27
27
  itemTitleKey: 'title',
28
28
  itemValueKey: 'value',
29
29
  itemIconKey: 'icon',
30
30
  layout: { left:12, height: 200, right:12, top:12 }
31
-
31
+
32
32
  })
33
-
34
- .add("tabView2", SC.TabView, {
33
+
34
+ .add("tabView2", SC.TabView, {
35
35
  nowShowing: 'tab3',
36
36
 
37
37
  items: [
@@ -39,50 +39,47 @@ htmlbody('<style> .sc-static-layout { border: 1px red dotted; } </style>');
39
39
  { title: "tab2", value: "tab2" },
40
40
  { title: "tab3", value: "tab3" }
41
41
  ],
42
-
42
+
43
43
  itemTitleKey: 'title',
44
44
  itemValueKey: 'value',
45
45
  layout: { left:12, height: 200, right:12, top:12 }
46
-
46
+
47
47
  })
48
- .add("tabView3", SC.TabView, {
49
-
48
+ .add("tabView3", SC.TabView, {
49
+
50
50
  items: [
51
51
  { title: "tab1", value: "tab1" },
52
52
  { title: "tab2", value: "tab2" },
53
53
  { title: "tab3", value: "tab3" }
54
54
  ],
55
-
55
+
56
56
  itemTitleKey: 'title',
57
57
  itemValueKey: 'value',
58
58
  layout: { left:12, height: 200, right:12, top:12}
59
59
  });
60
-
60
+
61
61
  pane.show(); // add a test to show the test pane
62
62
 
63
63
  // ..........................................................
64
64
  // TEST VIEWS
65
- //
65
+ //
66
66
  module('SC.TabView ui', pane.standardSetup());
67
-
67
+
68
68
  test("Check that all tabViews are visible", function() {
69
69
  ok(pane.view('tabView1').get('isVisibleInWindow'), 'tabView1.isVisibleInWindow should be YES');
70
70
  ok(pane.view('tabView2').get('isVisibleInWindow'), 'tabView2.isVisibleInWindow should be YES');
71
71
  ok(pane.view('tabView3').get('isVisibleInWindow'), 'tabView3.isVisibleInWindow should be YES');
72
72
  });
73
-
74
-
73
+
74
+
75
75
  test("Check that the tabView has the right classes set", function() {
76
- var viewElem=pane.view('tabView1').$();
77
- var views=pane.view('tabView1').$('div');
76
+ var view = pane.view('tabView1');
77
+ var viewElem = view.$();
78
78
  ok(viewElem.hasClass('sc-view'), 'tabView1.hasClass(sc-view) should be YES');
79
79
  ok(viewElem.hasClass('sc-tab-view'), 'tabView1.hasClass(sc-tab-view) should be YES');
80
- ok(views[1].className.indexOf('sc-segmented-view')>=0, 'tabView1 should contain a segmented view');
81
- ok(views[0].className.indexOf('sc-container-view')>=0, 'tabView1 should contain a container view');
82
- ok(views[1].childNodes.length==3, 'tabView1 should have 3 options');
83
-
84
-
80
+ ok(view.$('.sc-segmented-view').length, 'tabView1 should contain a segmented view');
81
+ ok(view.$('.sc-container-view').length, 'tabView1 should contain a container view');
85
82
  });
86
-
83
+
87
84
 
88
85
  })();
@@ -2300,26 +2300,22 @@ SC.CollectionView = SC.View.extend(
2300
2300
  // TOUCH EVENTS
2301
2301
  //
2302
2302
  touchStart: function(touch, evt) {
2303
- // When the user presses the mouse down, we don't do much just yet.
2304
- // Instead, we just need to save a bunch of state about the mouse down
2305
- // so we can choose the right thing to do later.
2306
-
2307
- // Toggle selection only triggers on mouse up. Do nothing.
2308
- if (this.get('useToggleSelection')) return true;
2309
-
2310
- // find the actual view the mouse was pressed down on. This will call
2311
- // hitTest() on item views so they can implement non-square detection
2312
- // modes. -- once we have an item view, get its content object as well.
2313
- var itemView = this.itemViewForEvent(touch),
2314
- content = this.get('content'),
2315
- contentIndex = itemView ? itemView.get('contentIndex') : -1,
2316
- info, anchor ;
2317
-
2318
2303
  // become first responder if possible.
2319
2304
  this.becomeFirstResponder() ;
2320
-
2321
- this.invokeLater("select", 1, contentIndex);
2322
-
2305
+
2306
+ if (!this.get('useToggleSelection')) {
2307
+ var itemView = this.itemViewForEvent(touch);
2308
+
2309
+ // We're faking the selection visually here
2310
+ // Only track this if we added a selection so we can remove it later
2311
+ if (itemView && !itemView.get('isSelected')) {
2312
+ itemView.set('isSelected', YES);
2313
+ this._touchSelectedView = itemView;
2314
+ } else {
2315
+ this._touchSelectedView = null;
2316
+ }
2317
+ }
2318
+
2323
2319
  return YES;
2324
2320
  },
2325
2321
 
@@ -2329,22 +2325,39 @@ SC.CollectionView = SC.View.extend(
2329
2325
  Math.abs(touch.pageX - touch.startX) > 5 ||
2330
2326
  Math.abs(touch.pageY - touch.startY) > 5
2331
2327
  ) {
2332
- this.select(null, NO);
2328
+ // This calls touchCancelled
2333
2329
  touch.makeTouchResponder(touch.nextTouchResponder);
2334
2330
  }
2335
2331
  }, this);
2336
2332
 
2337
2333
  },
2338
-
2334
+
2339
2335
  touchEnd: function(touch) {
2340
- var itemView = this.itemViewForEvent(touch);
2341
-
2342
- // If actOnSelect is implemented, the action will be fired.
2343
- this._cv_performSelectAction(itemView, touch, 0);
2336
+ var itemView = this.itemViewForEvent(touch),
2337
+ contentIndex = itemView ? itemView.get('contentIndex') : -1,
2338
+ isSelected = NO;
2339
+
2340
+ // Remove fake selection in case our contentIndex is -1, a select event will add it back
2341
+ if (this._touchSelectedView) { this._touchSelectedView.set('isSelected', NO); }
2342
+
2343
+ if (this.get('useToggleSelection')) {
2344
+ var sel = this.get('selection');
2345
+ isSelected = sel && sel.containsObject(itemView.get('content'));
2346
+ }
2347
+
2348
+ if (isSelected) {
2349
+ this.deselect(contentIndex);
2350
+ } else {
2351
+ this.select(contentIndex, NO);
2352
+
2353
+ // If actOnSelect is implemented, the action will be fired.
2354
+ this._cv_performSelectAction(itemView, touch, 0);
2355
+ }
2344
2356
  },
2345
2357
 
2346
2358
  touchCancelled: function(evt) {
2347
- this.select(null, NO);
2359
+ // Remove fake selection
2360
+ if (this._touchSelectedView) { this._touchSelectedView.set('isSelected', NO); }
2348
2361
  },
2349
2362
 
2350
2363
  /** @private */
@@ -85,7 +85,7 @@ SC.DateFieldView = SC.TextFieldView.extend(
85
85
  FUTURE: DatePickerSupport.
86
86
  createChildViews: function() {
87
87
  sc_super();
88
- if (SC.browser.safari) {
88
+ if (SC.browser.webkit) {
89
89
  // ON MOZILLA DON'T WORK
90
90
  var view = Shared.DatePickerView.extend({
91
91
  layout: { right: 0, centerY: 0, width: 18, height: 15 }
@@ -764,7 +764,7 @@ SC.ScrollView = SC.View.extend(SC.Border, {
764
764
  // save adjustment and then invoke the actual scroll code later. This will
765
765
  // keep the view feeling smooth.
766
766
  mouseWheel: function(evt) {
767
- var deltaAdjust = (SC.browser.safari && SC.browser.version > 533.0) ? 120 : 1;
767
+ var deltaAdjust = (SC.browser.webkit && SC.browser.version > 533.0) ? 120 : 1;
768
768
 
769
769
  this._scroll_wheelDeltaX += evt.wheelDeltaX / deltaAdjust;
770
770
  this._scroll_wheelDeltaY += evt.wheelDeltaY / deltaAdjust;