sproutcore 1.10.3.1 → 1.11.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (380) hide show
  1. checksums.yaml +8 -8
  2. data/CHANGELOG +4 -8
  3. data/VERSION.yml +2 -2
  4. data/lib/frameworks/sproutcore/Buildfile +5 -4
  5. data/lib/frameworks/sproutcore/CHANGELOG.md +274 -40
  6. data/lib/frameworks/sproutcore/CONTRIBUTORS.md +133 -0
  7. data/lib/frameworks/sproutcore/README.md +31 -144
  8. data/lib/frameworks/sproutcore/apps/showcase/controllers/source_tree_controller.js +9 -4
  9. data/lib/frameworks/sproutcore/apps/showcase/resources/stylesheet.css +5 -0
  10. data/lib/frameworks/sproutcore/apps/showcase/system/views_item_content.js +1 -1
  11. data/lib/frameworks/sproutcore/apps/showcase/views/split_views.js +15 -2
  12. data/lib/frameworks/sproutcore/apps/showcase/views/stacked_views.js +1 -1
  13. data/lib/frameworks/sproutcore/apps/tests/english.lproj/main_page.js +11 -1
  14. data/lib/frameworks/sproutcore/frameworks/ajax/mixins/websocket_delegate.js +90 -0
  15. data/lib/frameworks/sproutcore/frameworks/ajax/system/request.js +81 -5
  16. data/lib/frameworks/sproutcore/frameworks/ajax/system/response.js +23 -4
  17. data/lib/frameworks/sproutcore/frameworks/ajax/system/websocket.js +475 -0
  18. data/lib/frameworks/sproutcore/frameworks/ajax/tests/system/request.js +149 -26
  19. data/lib/frameworks/sproutcore/frameworks/ajax/tests/system/websocket.js +197 -0
  20. data/lib/frameworks/sproutcore/frameworks/ajax/tests/system/xhr_response_test.js +65 -0
  21. data/lib/frameworks/sproutcore/frameworks/bootstrap/system/loader.js +4 -0
  22. data/lib/frameworks/sproutcore/frameworks/core_foundation/child_view_layouts/horizontal_stack_layout.js +232 -52
  23. data/lib/frameworks/sproutcore/frameworks/core_foundation/child_view_layouts/vertical_stack_layout.js +235 -49
  24. data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/array.js +23 -13
  25. data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/object.js +3 -1
  26. data/lib/frameworks/sproutcore/frameworks/core_foundation/core.js +81 -1
  27. data/lib/frameworks/sproutcore/frameworks/core_foundation/english.lproj/ordinal.js +17 -0
  28. data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/string.js +7 -0
  29. data/lib/frameworks/sproutcore/frameworks/{desktop/tests/views/disclosure/methods.js → core_foundation/french.lproj/ordinal.js} +7 -4
  30. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/layout.js +2 -6
  31. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/main.js +1 -1
  32. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/pane.js +104 -69
  33. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/pane_statechart.js +6 -1
  34. data/lib/frameworks/sproutcore/frameworks/core_foundation/protocols/child_view_layout_protocol.js +59 -0
  35. data/lib/frameworks/sproutcore/frameworks/core_foundation/protocols/view_transition_protocol.js +18 -1
  36. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/application.js +192 -0
  37. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/bezier_curves.js +52 -0
  38. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/color.js +384 -64
  39. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/core_query.js +6 -14
  40. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/device.js +21 -35
  41. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/event.js +72 -36
  42. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/locale.js +90 -34
  43. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/platform.js +55 -7
  44. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/render_context.js +20 -15
  45. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/req_anim_frame.js +9 -10
  46. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/root_responder.js +763 -542
  47. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/selection_set.js +4 -3
  48. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/sparse_array.js +1 -7
  49. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/string.js +14 -0
  50. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/touch.js +538 -0
  51. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/utils/rect.js +56 -1
  52. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/array_case.js +99 -4
  53. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/object/single_case.js +25 -19
  54. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/core_tests.js +75 -0
  55. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/ext/number_test.js +81 -0
  56. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/action_support.js +4 -4
  57. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/responder_context.js +4 -4
  58. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/string.js +19 -1
  59. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/color.js +36 -20
  60. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/design_modes_test.js +83 -0
  61. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/makeMainPane.js +7 -3
  62. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/mouse_events.js +338 -0
  63. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/root_responder.js +14 -89
  64. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/touch.js +106 -0
  65. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/sparse_array.js +2 -2
  66. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/touch.js +136 -0
  67. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/utils/rect.js +42 -1
  68. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/append_remove.js +11 -0
  69. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/child_view.js +5 -5
  70. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/design_mode_test.js +457 -0
  71. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/sendEvent.js +36 -10
  72. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/background_color.js +44 -0
  73. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/border_frame_test.js +51 -24
  74. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/childViewLayout_test.js +176 -1
  75. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/clippingFrame.js +46 -16
  76. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/convertFrames.js +69 -15
  77. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/didAppendToDocument.js +2 -2
  78. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layout.js +7 -1
  79. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutDidChange.js +30 -10
  80. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutStyle.js +376 -71
  81. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/static_layout.js +0 -10
  82. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/viewDidResize.js +117 -34
  83. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/view_states_test.js +52 -2
  84. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +656 -42
  85. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/animation.js +159 -38
  86. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/cursor.js +0 -7
  87. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/design_mode.js +206 -0
  88. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/enabled.js +0 -28
  89. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/keyboard.js +21 -6
  90. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout.js +372 -450
  91. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout_style.js +28 -13
  92. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/manipulation.js +22 -51
  93. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/statechart.js +59 -30
  94. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/theming.js +0 -29
  95. data/lib/frameworks/sproutcore/frameworks/datastore/mixins/relationship_support.js +22 -10
  96. data/lib/frameworks/sproutcore/frameworks/datastore/models/children_attribute.js +42 -36
  97. data/lib/frameworks/sproutcore/frameworks/datastore/models/many_attribute.js +54 -3
  98. data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +178 -59
  99. data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +2 -2
  100. data/lib/frameworks/sproutcore/frameworks/datastore/system/child_array.js +206 -132
  101. data/lib/frameworks/sproutcore/frameworks/datastore/system/many_array.js +214 -118
  102. data/lib/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +96 -13
  103. data/lib/frameworks/sproutcore/frameworks/datastore/system/query.js +14 -4
  104. data/lib/frameworks/sproutcore/frameworks/datastore/system/record_array.js +82 -42
  105. data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +272 -177
  106. data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/store_interaction_test.js +54 -0
  107. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/datetime_recordattribute.js +24 -16
  108. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/many_attribute.js +6 -3
  109. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/data_store.js +267 -35
  110. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record.js +57 -46
  111. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array.js +150 -53
  112. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array_complex.js +57 -17
  113. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_complex.js +13 -9
  114. data/lib/frameworks/sproutcore/frameworks/{experimental/frameworks/polymorphism → datastore}/tests/models/polymorphism/many.js +2 -2
  115. data/lib/frameworks/sproutcore/frameworks/{experimental/frameworks/polymorphism → datastore}/tests/models/polymorphism/simple.js +0 -0
  116. data/lib/frameworks/sproutcore/frameworks/{experimental/frameworks/polymorphism → datastore}/tests/models/polymorphism/single.js +12 -2
  117. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/writeAttribute.js +20 -15
  118. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +9 -2
  119. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/many_array/core_methods.js +80 -14
  120. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/autonomous_dataSourceCallbacks.js +280 -0
  121. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/autonomous_pushChanges.js +232 -0
  122. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/chain.js +31 -5
  123. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/parse.js +16 -2
  124. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/core_methods.js +60 -40
  125. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/materializeRecord.js +78 -0
  126. data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/system/datetime.js +13 -1
  127. data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/tests/system/datetime.js +20 -0
  128. data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/localized/{resources → english.lproj}/strings.js +0 -0
  129. data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/localized/french.lproj/strings.js +45 -0
  130. data/lib/frameworks/sproutcore/frameworks/designer/designers/object_designer.js +7 -3
  131. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_row_delegate.js +125 -44
  132. data/lib/frameworks/sproutcore/frameworks/desktop/panes/alert.js +139 -48
  133. data/lib/frameworks/sproutcore/frameworks/desktop/panes/draggable.js +202 -0
  134. data/lib/frameworks/sproutcore/frameworks/desktop/panes/menu.js +59 -56
  135. data/lib/frameworks/sproutcore/frameworks/desktop/panes/palette.js +13 -49
  136. data/lib/frameworks/sproutcore/frameworks/desktop/panes/picker.js +466 -305
  137. data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drag_source.js +49 -12
  138. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/slider.js +79 -21
  139. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/split.js +12 -2
  140. data/lib/frameworks/sproutcore/frameworks/desktop/resources/menu_item_view.css +8 -0
  141. data/lib/frameworks/sproutcore/frameworks/desktop/resources/overlay-scroller.css +187 -0
  142. data/lib/frameworks/sproutcore/frameworks/desktop/system/drag.js +94 -30
  143. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +163 -3
  144. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/methods.js +97 -78
  145. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/ui.js +61 -1
  146. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/methods.js +7 -3
  147. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/ui.js +47 -22
  148. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/methods.js +66 -9
  149. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/ui.js +21 -11
  150. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/sheet/ui.js +12 -18
  151. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/methods.js +17 -14
  152. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/ui.js +2 -1
  153. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +9 -6
  154. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/collection_fast_path.js +54 -21
  155. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/content.js +52 -20
  156. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/itemViewForContentIndex.js +94 -4
  157. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/keyboard.js +177 -0
  158. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/layerIdFor.js +13 -1
  159. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/length.js +9 -9
  160. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/mouse.js +18 -0
  161. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/date_field/methods.js +104 -0
  162. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/disclosure/ui.js +48 -49
  163. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/grid/drag_and_drop.js +22 -18
  164. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/grid/methods.js +17 -5
  165. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/link_view_test.js +136 -0
  166. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/contentIndexesInRect.js +77 -0
  167. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/drag_and_drop.js +53 -16
  168. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/layoutForContentIndex.js +41 -0
  169. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowDelegate.js +25 -25
  170. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowOffsetForContentIndex.js +102 -27
  171. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/{rowHeightForContentIndex.js → rowSizeForContentIndex.js} +7 -6
  172. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_outline.js +2 -0
  173. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_row_heights.js +70 -75
  174. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_simple.js +29 -30
  175. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list_item.js +57 -0
  176. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/menu_scroll_view/menu_scroll_view_test.js +206 -0
  177. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +15 -0
  178. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/radio/methods.js +15 -7
  179. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/integration.js +16 -11
  180. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/methods.js +164 -12
  181. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/scale.js +387 -0
  182. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/touch.js +549 -0
  183. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/ui.js +214 -45
  184. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroller.js +5 -5
  185. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/methods.js +73 -22
  186. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +88 -3
  187. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select/methods.js +8 -0
  188. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/slider/methods.js +16 -1
  189. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/slider/ui.js +54 -0
  190. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/split/dividers.js +21 -2
  191. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/static_content.js +31 -25
  192. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/tab/methods.js +109 -29
  193. data/lib/frameworks/sproutcore/frameworks/desktop/views/button.js +10 -1
  194. data/lib/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +3 -0
  195. data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +779 -603
  196. data/lib/frameworks/sproutcore/frameworks/desktop/views/date_field.js +106 -7
  197. data/lib/frameworks/sproutcore/frameworks/desktop/views/link_view.js +406 -0
  198. data/lib/frameworks/sproutcore/frameworks/desktop/views/list.js +437 -245
  199. data/lib/frameworks/sproutcore/frameworks/desktop/views/list_item.js +13 -0
  200. data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +124 -62
  201. data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_scroll.js +176 -597
  202. data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_scroller_view.js +206 -0
  203. data/lib/frameworks/sproutcore/frameworks/desktop/views/popup_button.js +3 -0
  204. data/lib/frameworks/sproutcore/frameworks/desktop/views/progress.js +5 -4
  205. data/lib/frameworks/sproutcore/frameworks/desktop/views/radio.js +3 -0
  206. data/lib/frameworks/sproutcore/frameworks/desktop/views/scene.js +56 -158
  207. data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll_view.js +2560 -0
  208. data/lib/frameworks/sproutcore/frameworks/desktop/views/scroller.js +458 -242
  209. data/lib/frameworks/sproutcore/frameworks/desktop/views/segmented.js +117 -54
  210. data/lib/frameworks/sproutcore/frameworks/desktop/views/select.js +18 -12
  211. data/lib/frameworks/sproutcore/frameworks/desktop/views/slider.js +162 -34
  212. data/lib/frameworks/sproutcore/frameworks/desktop/views/split.js +30 -15
  213. data/lib/frameworks/sproutcore/frameworks/desktop/views/split_divider.js +33 -7
  214. data/lib/frameworks/sproutcore/frameworks/desktop/views/static_content.js +22 -2
  215. data/lib/frameworks/sproutcore/frameworks/desktop/views/tab.js +47 -22
  216. data/lib/frameworks/sproutcore/frameworks/experimental/Buildfile +0 -6
  217. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/views/form.js +2 -1
  218. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/views/form_row.js +21 -21
  219. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/ext/menu.js +14 -3
  220. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/mixins/select_view_menu.js +24 -10
  221. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/ext/menu_resizing.js +1 -1
  222. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/mixins/select_view_menu/bindings.js +7 -4
  223. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/mixins/select_view_menu/check_selected.js +7 -9
  224. data/lib/frameworks/sproutcore/frameworks/{desktop/tests/panes/select_button/methods.js → experimental/frameworks/select_view/tests/views/select/method.js} +54 -76
  225. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/views/select/selected_item.js +35 -0
  226. data/lib/frameworks/sproutcore/frameworks/{desktop/tests/panes/select_button → experimental/frameworks/select_view/tests/views/select}/ui.js +107 -36
  227. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/views/select.js +225 -66
  228. data/lib/frameworks/sproutcore/frameworks/foundation/controllers/tree.js +39 -38
  229. data/lib/frameworks/sproutcore/frameworks/foundation/core.js +5 -18
  230. data/lib/frameworks/sproutcore/frameworks/foundation/debug/control_test_pane.js +12 -0
  231. data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/inflections.js +84 -0
  232. data/lib/frameworks/sproutcore/frameworks/foundation/french.lproj/inflections.js +41 -0
  233. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_mixin.js +1 -0
  234. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_resize.js +7 -0
  235. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/content_display.js +3 -4
  236. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/flowed_layout.js +6 -2
  237. data/lib/frameworks/sproutcore/frameworks/foundation/private/tree_item_observer.js +408 -239
  238. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/canvas_image.js +1 -1
  239. data/lib/frameworks/sproutcore/frameworks/foundation/resources/text_field.css +2 -1
  240. data/lib/frameworks/sproutcore/frameworks/foundation/spanish.lproj/inflections.js +38 -0
  241. data/lib/frameworks/sproutcore/frameworks/foundation/system/benchmark.js +104 -76
  242. data/lib/frameworks/sproutcore/frameworks/foundation/system/string.js +20 -94
  243. data/lib/frameworks/sproutcore/frameworks/foundation/system/text_selection.js +33 -22
  244. data/lib/frameworks/sproutcore/frameworks/foundation/system/undo_manager.js +475 -0
  245. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/auto_resize_test.js +163 -1
  246. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/flowed_layout/tests.js +41 -0
  247. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/staticLayout.js +2 -5
  248. data/lib/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/methods.js +268 -0
  249. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/undo_manager.js +231 -0
  250. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/container/ui.js +16 -0
  251. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/image/ui.js +27 -0
  252. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/methods.js +24 -0
  253. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +135 -6
  254. data/lib/frameworks/sproutcore/frameworks/foundation/transitions/fade_transition.js +6 -0
  255. data/lib/frameworks/sproutcore/frameworks/foundation/transitions/pop_transition.js +7 -0
  256. data/lib/frameworks/sproutcore/frameworks/foundation/transitions/scale_transition.js +6 -0
  257. data/lib/frameworks/sproutcore/frameworks/foundation/transitions/slide_transition.js +4 -0
  258. data/lib/frameworks/sproutcore/frameworks/foundation/transitions/swap_dissolve_transition.js +3 -1
  259. data/lib/frameworks/sproutcore/frameworks/foundation/validators/credit_card.js +21 -21
  260. data/lib/frameworks/sproutcore/frameworks/foundation/views/container.js +65 -15
  261. data/lib/frameworks/sproutcore/frameworks/foundation/views/image.js +4 -1
  262. data/lib/frameworks/sproutcore/frameworks/foundation/views/label.js +1 -1
  263. data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +193 -213
  264. data/lib/frameworks/sproutcore/frameworks/jquery/{jquery-1.8.3-patched.js → jquery-1.11.1.js} +7507 -6684
  265. data/lib/frameworks/sproutcore/frameworks/routing/system/routes.js +28 -11
  266. data/lib/frameworks/sproutcore/frameworks/routing/tests/system/routes.js +26 -0
  267. data/lib/frameworks/sproutcore/frameworks/runtime/core.js +54 -25
  268. data/lib/frameworks/sproutcore/frameworks/runtime/ext/array.js +0 -6
  269. data/lib/frameworks/sproutcore/frameworks/runtime/ext/number.js +36 -0
  270. data/lib/frameworks/sproutcore/frameworks/runtime/ext/window.js +25 -0
  271. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/array.js +3 -3
  272. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +1 -1
  273. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +156 -66
  274. data/lib/frameworks/sproutcore/frameworks/runtime/private/observer_set.js +2 -2
  275. data/lib/frameworks/sproutcore/frameworks/runtime/system/binding.js +150 -65
  276. data/lib/frameworks/sproutcore/frameworks/runtime/system/index_set.js +57 -11
  277. data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +68 -49
  278. data/lib/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +14 -6
  279. data/lib/frameworks/sproutcore/frameworks/runtime/system/string.js +23 -23
  280. data/lib/frameworks/sproutcore/frameworks/runtime/tests/ext/number_test.js +44 -0
  281. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/array.js +0 -10
  282. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/enumerable/enumerable.js +340 -285
  283. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/binding.js +104 -3
  284. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/observer_set.js +14 -1
  285. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/string.js +15 -2
  286. data/lib/frameworks/sproutcore/frameworks/statechart/system/state.js +21 -18
  287. data/lib/frameworks/sproutcore/frameworks/statechart/system/statechart.js +52 -19
  288. data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/responder/pane.js +27 -24
  289. data/lib/frameworks/sproutcore/frameworks/template_view/controls/button.js +30 -0
  290. data/lib/frameworks/sproutcore/frameworks/template_view/ext/handlebars/bind.js +1 -1
  291. data/lib/frameworks/sproutcore/frameworks/template_view/ext/handlebars/collection.js +2 -0
  292. data/lib/frameworks/sproutcore/frameworks/template_view/ext/handlebars/view.js +1 -0
  293. data/lib/frameworks/sproutcore/frameworks/template_view/tests/mixins/template_helpers/checkbox_support.js +2 -2
  294. data/lib/frameworks/sproutcore/frameworks/template_view/tests/views/template/handlebars.js +4 -2
  295. data/lib/frameworks/sproutcore/frameworks/template_view/views/bindable_span.js +1 -1
  296. data/lib/frameworks/sproutcore/frameworks/template_view/views/template_collection.js +16 -14
  297. data/lib/frameworks/sproutcore/frameworks/testing/core.js +5 -3
  298. data/lib/frameworks/sproutcore/frameworks/testing/system/plan.js +13 -0
  299. data/lib/frameworks/sproutcore/lib/index.rhtml +2 -2
  300. data/lib/frameworks/sproutcore/phantomjs/test_runner.js +28 -7
  301. data/lib/frameworks/sproutcore/scripts/run_sc_server_master.sh +1 -1
  302. data/lib/frameworks/sproutcore/themes/ace/resources/_variables.css +2 -0
  303. data/lib/frameworks/sproutcore/themes/ace/resources/disclosure/ace/disclosure.css +1 -0
  304. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover.css +3 -4
  305. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/horizontal.css +15 -15
  306. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/horizontal_overlay.css +74 -0
  307. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/vertical.css +11 -13
  308. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/vertical_overlay.css +74 -0
  309. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/jumbo/knob-active.png +0 -0
  310. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/jumbo/knob-active@2x.png +0 -0
  311. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/jumbo/knob.png +0 -0
  312. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/jumbo/knob@2x.png +0 -0
  313. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/{22px → jumbo}/slider.css +9 -4
  314. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/jumbo/track.png +0 -0
  315. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/jumbo/track@2x.png +0 -0
  316. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/knob-active.png +0 -0
  317. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/knob-active@2x.png +0 -0
  318. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/knob.png +0 -0
  319. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/knob@2x.png +0 -0
  320. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/slider.css +32 -0
  321. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/track.png +0 -0
  322. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/track@2x.png +0 -0
  323. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/slider.css +13 -0
  324. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/knob-active.png +0 -0
  325. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/knob-active@2x.png +0 -0
  326. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/knob.png +0 -0
  327. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/knob@2x.png +0 -0
  328. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/slider.css +32 -0
  329. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/track.png +0 -0
  330. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/track@2x.png +0 -0
  331. data/lib/frameworks/sproutcore/themes/ace/resources/split/split.css +2 -3
  332. data/lib/sproutcore/builders/chance_file.rb +3 -3
  333. data/lib/sproutcore/helpers/minifier.rb +1 -0
  334. data/vendor/chance/lib/chance/instance.rb +34 -34
  335. data/vendor/chance/lib/chance/instance/spriting.rb +21 -16
  336. metadata +81 -58
  337. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/visibility.js +0 -17
  338. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_fast_path.js +0 -710
  339. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/scrollable.js +0 -267
  340. data/lib/frameworks/sproutcore/frameworks/desktop/resources/touch-scroller.css +0 -196
  341. data/lib/frameworks/sproutcore/frameworks/desktop/system/undo_manager.js +0 -224
  342. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/methods.js +0 -163
  343. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/ui.js +0 -177
  344. data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll.js +0 -2053
  345. data/lib/frameworks/sproutcore/frameworks/desktop/views/select_button.js +0 -1024
  346. data/lib/frameworks/sproutcore/frameworks/desktop/views/select_field.js +0 -404
  347. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/menu/render_delegates/menu_scroller.js +0 -28
  348. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/menu/tests/menu/scroll.js +0 -235
  349. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/menu/views/menu/scroll.js +0 -363
  350. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/menu/views/menu/scroller.js +0 -250
  351. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/README.md +0 -47
  352. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/models/record.js +0 -134
  353. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/render_delegates/desktop_scroller.js +0 -92
  354. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/render_delegates/native_scroll.js +0 -25
  355. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/render_delegates/scroll.js +0 -33
  356. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/render_delegates/touch_scroller.js +0 -76
  357. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/tests/scroll/integration.js +0 -25
  358. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/tests/scroll/methods.js +0 -143
  359. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/tests/scroll/ui.js +0 -256
  360. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/core_scroll.js +0 -1164
  361. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/core_scroller.js +0 -332
  362. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/desktop/scroll.js +0 -236
  363. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/desktop/scroller.js +0 -347
  364. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/scroll.js +0 -15
  365. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/scroller.js +0 -10
  366. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/touch/scroll.js +0 -804
  367. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/touch/scroller.js +0 -133
  368. data/lib/frameworks/sproutcore/frameworks/foundation/tasks/preload_bundle.js +0 -41
  369. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/horizontal_touch.css +0 -91
  370. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/vertical_touch.css +0 -92
  371. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/14px/knob.png +0 -0
  372. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/14px/knob_active.png +0 -0
  373. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/14px/slider.css +0 -27
  374. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/16px/knob.png +0 -0
  375. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/16px/knob_active.png +0 -0
  376. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/16px/slider.css +0 -27
  377. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/22px/knob.png +0 -0
  378. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/22px/knob_active.png +0 -0
  379. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/22px/track.png +0 -0
  380. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/track.png +0 -0
@@ -1,17 +0,0 @@
1
- // ==========================================================================
2
- // Project: SproutCore - JavaScript Application Framework
3
- // Copyright: ©2006-2011 Strobe Inc. and contributors.
4
- // ©2008-2011 Apple Inc. All rights reserved.
5
- // License: Licensed under MIT license (see license.js)
6
- // ==========================================================================
7
- sc_require("panes/pane");
8
-
9
- SC.Pane.reopen(
10
- /** @scope SC.Pane.prototype */ {
11
-
12
- // recomputeDependentProperties: function(original) {
13
- // this.recomputeIsVisibleInWindow();
14
- // original();
15
- // }.enhance()
16
-
17
- });
@@ -1,710 +0,0 @@
1
- // ==========================================================================
2
- // Project: SproutCore - JavaScript Application Framework
3
- // Copyright: ©2006-2011 Strobe Inc. and contributors.
4
- // Portions ©2008-2011 Apple Inc. All rights reserved.
5
- // License: Licensed under MIT license (see license.js)
6
- // ==========================================================================
7
-
8
- /** @deprecated
9
-
10
- An experimental `CollectionView` mixin that makes it extremely fast under
11
- certain circumstances, including for mobile devices.
12
- */
13
- SC.CollectionFastPath = {
14
-
15
- //
16
- // ITEM VIEW CLASS/INSTANCE MANAGEMENT
17
- //
18
- initMixin: function() {
19
- this._indexMap = {};
20
- this._viewMap = {};
21
- },
22
-
23
- /**
24
- Returns the pool for a given example view.
25
-
26
- The pool is calculated based on the guid for the example view class.
27
-
28
- @param {SC.View} exampleView
29
- */
30
- poolForExampleView: function(exampleView) {
31
- var poolKey = "_pool_" + SC.guidFor(exampleView);
32
- if (!this[poolKey]) this[poolKey] = [];
33
- return this[poolKey];
34
- },
35
-
36
- /**
37
- Creates an item view from a given example view, configuring it with basic settings
38
- and the supplied attributes.
39
-
40
- @param {SC.View} exampleView
41
- @param {Hash} attrs
42
- */
43
- createItemViewFromExampleView: function(exampleView, attrs) {
44
- // create the example view
45
- var ret = this.createItemView(exampleView, null, attrs);
46
-
47
- // for our pooling, if it is poolable, mark the view as poolable and
48
- // give it a reference to its pool.
49
- if (ret.isPoolable) {
50
- ret.owningPool = this.poolForExampleView(exampleView);
51
- }
52
-
53
- // we will sometimes need to know what example view created the item view
54
- ret.createdFromExampleView = exampleView;
55
-
56
- // and now, return (duh)
57
- return ret;
58
- },
59
-
60
- /**
61
- @param {SC.View} itemView
62
- @param {Hash} attrs
63
- */
64
- configureItemView: function(itemView, attrs) {
65
- // set settings. Self explanatory.
66
- itemView.beginPropertyChanges();
67
- itemView.setIfChanged('content', attrs.content);
68
- itemView.setIfChanged('contentIndex', attrs.contentIndex);
69
- itemView.setIfChanged('parentView', attrs.parentView);
70
- itemView.setIfChanged('layerId', attrs.layerId);
71
- itemView.setIfChanged('isEnabled', attrs.isEnabled);
72
- itemView.setIfChanged('isSelected', attrs.isSelected);
73
- itemView.setIfChanged('outlineLevel', attrs.outlineLevel);
74
- itemView.setIfChanged('layout', attrs.layout);
75
- itemView.setIfChanged('disclosureState', attrs.disclosureState);
76
- itemView.setIfChanged('isVisibleInWindow', attrs.isVisibleInWindow);
77
- itemView.setIfChanged('isGroupView', attrs.isGroupView);
78
- itemView.setIfChanged('page', this.page);
79
- itemView.endPropertyChanges();
80
- },
81
-
82
- /**
83
- Configures a pooled view, calling `.awakeFromPool` if it is defined.
84
-
85
- @param {SC.View} itemView
86
- @param {Hash} attrs
87
- */
88
- wakePooledView: function(itemView, attrs) {
89
- // configure
90
- this.configureItemView(itemView, attrs);
91
-
92
- // awake from the pool, etc.
93
- if (itemView.awakeFromPool) itemView.awakeFromPool(itemView.owningPool, this);
94
- },
95
-
96
- /**
97
- Gets an item view from an example view, from a pool if possible, and otherwise
98
- by generating it.
99
-
100
- @param {SC.View} exampleView
101
- @param {Hash} attrs
102
- */
103
- allocateItemView: function(exampleView, attrs) {
104
- // we will try to get it from a pool. This will fill ret. If ret is not
105
- // filled, then we'll know to generate one.
106
- var ret;
107
-
108
- // if it is poolable, we just grab from the pool.
109
- if (exampleView.prototype.isPoolable) {
110
- var pool = this.poolForExampleView(exampleView);
111
- if (pool.length > 0) {
112
- ret = pool.pop();
113
- this.wakePooledView(ret, attrs);
114
- }
115
- }
116
-
117
- if (!ret) {
118
- ret = this.createItemViewFromExampleView(exampleView, attrs);
119
- }
120
-
121
- return ret;
122
- },
123
-
124
- /**
125
- Releases an item view. If the item view is pooled, it puts it into the pool;
126
- otherwise, this calls `.destroy()`.
127
-
128
- This is called for one of two purposes: to release a view that is no longer displaying,
129
- or to release an older cached version of a view that needed to be replaced because the
130
- example view changed.
131
-
132
- @param {SC.View} itemView
133
- */
134
- releaseItemView: function(itemView) {
135
- // if it is not poolable, there is not much we can do.
136
- if (!itemView.isPoolable) {
137
- itemView.destroy();
138
- return;
139
- }
140
-
141
- // otherwise, we need to return to view
142
- var pool = itemView.owningPool;
143
- pool.push(itemView);
144
- if (itemView.hibernateInPool) itemView.hibernateInPool(pool, this);
145
- },
146
-
147
- /** @private
148
- Returns YES if the item at the index is a group.
149
- */
150
- contentIndexIsGroup: function(view, content, index) {
151
- var contentDelegate = this.get("contentDelegate");
152
-
153
- // setup our properties
154
- var groupIndexes = this.get('_contentGroupIndexes'), isGroupView = NO;
155
-
156
- // and do our checking
157
- isGroupView = groupIndexes && groupIndexes.contains(index);
158
- if (isGroupView) isGroupView = contentDelegate.contentIndexIsGroup(this, this.get("content"), index);
159
-
160
- // and return
161
- return isGroupView;
162
- },
163
-
164
- /** @private
165
- Determines the example view for a content index. There are two optional parameters that will
166
- speed things up: `contentObject` and `isGroupView`. If you don't supply them, they must be computed.
167
- */
168
- exampleViewForItem: function(item, index) {
169
- var del = this.get('contentDelegate'),
170
- groupIndexes = this.get('_contentGroupIndexes'),
171
- key, ExampleView,
172
- isGroupView = this.contentIndexIsGroup(this, this.get('content'), index);
173
-
174
- if (isGroupView) {
175
- // so, if it is indeed a group view, we go that route to get the example view
176
- key = this.get('contentGroupExampleViewKey');
177
- if (key && item) ExampleView = item.get(key);
178
- if (!ExampleView) ExampleView = this.get('groupExampleView') || this.get('exampleView');
179
- } else {
180
- // otherwise, we go through the normal example view
181
- key = this.get('contentExampleViewKey');
182
- if (key && item) ExampleView = item.get(key);
183
- if (!ExampleView) ExampleView = this.get('exampleView');
184
- }
185
-
186
- return ExampleView;
187
- },
188
-
189
- /** @private
190
- This may seem somewhat awkward, but it is for memory performance: this fills in a hash
191
- YOU provide with the properties for the given content index.
192
-
193
- Properties include both the attributes given to the view and some `CollectionView` tracking
194
- properties, most importantly the exampleView.
195
- */
196
- setAttributesForItem: function(item, index, attrs) {
197
- var del = this.get('contentDelegate'),
198
- isGroupView = this.contentIndexIsGroup(this, this.get('content'), index),
199
- ExampleView = this.exampleViewForItem(item, index),
200
- content = this.get("content");
201
-
202
- //
203
- // FIGURE OUT "NORMAL" ATTRIBUTES
204
- //
205
- attrs.createdFromExampleView = ExampleView;
206
- attrs.parentView = this.get('containerView') || this;
207
- attrs.contentIndex = index;
208
- attrs.owner = attrs.displayDelegate = this;
209
- attrs.content = item;
210
- attrs.page = this.page;
211
- attrs.layerId = this.layerIdFor(index);
212
- attrs.isEnabled = del.contentIndexIsEnabled(this, content, index);
213
- attrs.isSelected = del.contentIndexIsSelected(this, content, index);
214
- attrs.outlineLevel = del.contentIndexOutlineLevel(this, content, index);
215
- attrs.disclosureState = del.contentIndexDisclosureState(this, content, index);
216
- attrs.isVisibleInWindow = this.get('isVisibleInWindow');
217
- attrs.isGroupView = isGroupView;
218
- attrs.layout = this.layoutForContentIndex(index);
219
- if (!attrs.layout) attrs.layout = ExampleView.prototype.layout;
220
- },
221
-
222
- //
223
- // ITEM LOADING/DOM MANAGEMENT
224
- //
225
-
226
- /** @private
227
- Returns mapped item views for the supplied item.
228
- */
229
- mappedViewsForItem: function(item, map) {
230
- if (!map) map = this._viewMap;
231
- return map[SC.guidFor(item)];
232
- },
233
-
234
- /** @private
235
- Returns the mapped view for an item at the specified index.
236
- */
237
- mappedViewForItem: function(item, idx, map) {
238
- if (!map) map = this._viewMap;
239
- var m = map[SC.guidFor(item)];
240
- if (!m) return undefined;
241
- return m[idx];
242
- },
243
-
244
- /** @private
245
- Maps a view to an item/index combination.
246
- */
247
- mapView: function(item, index, view, map) {
248
- // get the default view map if a map was not supplied
249
- if (!map) map = this._viewMap;
250
-
251
- // get the item map
252
- var g = SC.guidFor(item),
253
- imap = map[g];
254
- if (!imap) imap = map[g] = {_length: 0};
255
-
256
- // fill in the index
257
- imap[index] = view;
258
- imap._length++;
259
- },
260
-
261
- /** @private
262
- Unmaps a view from an item/index combination.
263
- */
264
- unmapView: function(item, index, map) {
265
- if (!map) map = this._viewMap;
266
- var g = SC.guidFor(item),
267
- imap = map[g];
268
-
269
- // return if there is nothing to do
270
- if (!imap) return;
271
-
272
- // remove
273
- if (imap[index]) {
274
- var v = imap[index];
275
- delete imap[index];
276
-
277
- imap._length--;
278
- if (imap._length <= 0) delete map[g];
279
- }
280
- },
281
-
282
- /**
283
- Returns the item view for the given content index.
284
- NOTE: THIS WILL ADD THE VIEW TO DOM TEMPORARILY (it will be cleaned if
285
- it is not used). As such, use sparingly.
286
-
287
- @param {Number} index
288
- */
289
- itemViewForContentIndex: function(index) {
290
- var content = this.get("content");
291
- if (!content) return;
292
-
293
- var item = content.objectAt(index);
294
-
295
- var exampleView = this.exampleViewForItem(item, index),
296
- view = this._indexMap[index];
297
-
298
- if (view && view.createdFromExampleView !== exampleView) {
299
- this.removeItemView(view);
300
- this.unmapView(item, index);
301
- view = null;
302
- }
303
-
304
- if (!view) {
305
- view = this.addItemView(exampleView, item, index);
306
- }
307
-
308
- return view;
309
- },
310
-
311
- /** @private
312
- Returns the nearest item view index to the supplied index mapped to the item.
313
- */
314
- nearestMappedViewIndexForItem: function(item, index, map) {
315
- var m = this.mappedViewsForItem(item, map);
316
- if (!m) return null;
317
-
318
- // keep track of nearest and the nearest distance
319
- var nearest = null, ndist = -1, dist = 0;
320
-
321
- // loop through
322
- for (var idx in m) {
323
- idx = parseInt(idx, 10);
324
- if (isNaN(idx)) continue;
325
- // get distance
326
- dist = Math.abs(index - idx);
327
-
328
- // compare to nearest distance
329
- if (ndist < 0 || dist < ndist) {
330
- ndist = dist;
331
- nearest = idx;
332
- }
333
- }
334
-
335
- return nearest;
336
- },
337
-
338
- /** @private
339
- Remaps the now showing views to their new indexes (if they have moved).
340
- */
341
- remapItemViews: function(nowShowing) {
342
- // reset the view map, but keep the old for removing
343
- var oldMap = this._viewMap,
344
- newMap = (this._viewMap = {}),
345
- indexMap = (this._indexMap = {}),
346
- mayExist = [],
347
- content = this.get("content"), item;
348
-
349
- if (!content) return;
350
- var itemsToAdd = this._itemsToAdd;
351
-
352
- // first, find items which we can (that already exist, etc.)
353
- nowShowing.forEach(function(idx) {
354
- item = content.objectAt(idx);
355
-
356
- // determine if we have view(s) in the old map for the item
357
- var possibleExistingViews = this.mappedViewsForItem(item, oldMap);
358
- if (possibleExistingViews) {
359
-
360
- // if it is the same index, we just take it. End of story.
361
- if (possibleExistingViews[idx]) {
362
- var v = possibleExistingViews[idx];
363
- this.unmapView(item, idx, oldMap);
364
- this.mapView(item, idx, v, newMap);
365
- indexMap[idx] = v;
366
- } else {
367
- // otherwise, we must investigate later
368
- mayExist.push(idx);
369
- }
370
- } else {
371
- // if it is in now showing but we didn't find a view, it needs to be created.
372
- itemsToAdd.push(idx);
373
- }
374
- }, this);
375
-
376
- // now there are also some items which _could_ exist (but might not!)
377
- for (var idx = 0, len = mayExist.length; idx < len; idx++) {
378
- var newIdx = mayExist[idx];
379
- item = content.objectAt(newIdx);
380
- var nearestOldIndex = this.nearestMappedViewIndexForItem(item, newIdx, oldMap),
381
- nearestView;
382
-
383
- if (!SC.none(nearestOldIndex)) {
384
- nearestView = this.mappedViewForItem(item, nearestOldIndex, oldMap);
385
- var newExampleView = this.exampleViewForItem(item, newIdx);
386
- if (newExampleView === nearestView.createdFromExampleView) {
387
- // if there is a near one, use it, and remove it from the map
388
- this.unmapView(item, nearestOldIndex, oldMap);
389
- this.mapView(item, newIdx, nearestView, newMap);
390
- indexMap[newIdx] = nearestView;
391
- } else {
392
- itemsToAdd.push(newIdx);
393
- }
394
- } else {
395
- // otherwise, we need to create it.
396
- itemsToAdd.push(newIdx);
397
- }
398
- }
399
-
400
- return oldMap;
401
- },
402
-
403
- /**
404
- Reloads.
405
-
406
- @param {SC.IndexSet} nowShowing
407
- @param {Boolean} scrollOnly
408
- */
409
- reloadIfNeeded: function(nowShowing, scrollOnly) {
410
- var content = this.get("content"), invalid;
411
-
412
- // we use the nowShowing to determine what should and should not be showing.
413
- if (!nowShowing || !nowShowing.isIndexSet) nowShowing = this.get('nowShowing');
414
-
415
- // we only update if this is a non-scrolling update.
416
- // don't worry: we'll actually update after the fact, and the invalid indexes should
417
- // be queued up nicely.
418
- if (!scrollOnly) {
419
- invalid = this._invalidIndexes;
420
- if (!invalid || !this.get('isVisibleInWindow')) return this;
421
- this._invalidIndexes = NO;
422
-
423
- // tell others we will be reloading
424
- if (invalid.isIndexSet && invalid.contains(nowShowing)) invalid = YES ;
425
- if (this.willReload) this.willReload(invalid === YES ? null : invalid);
426
- }
427
-
428
- // get arrays of items to add/remove
429
- var itemsToAdd = this._itemsToAdd || (this._itemsToAdd = []);
430
-
431
- // remap
432
- var oldMap = this.remapItemViews(nowShowing);
433
-
434
- // The oldMap has the items to remove, so supply it to processRemovals
435
- this.processRemovals(oldMap);
436
-
437
- // handle the invalid set (if it is present)
438
- if (invalid) {
439
- this.processUpdates(invalid === YES ? nowShowing : invalid);
440
- }
441
-
442
- // process items to add
443
- this.processAdds();
444
-
445
- // only clear the DOM pools if this is not during scrolling. Adding/removing is a
446
- // bad idea while scrolling :)
447
- if (!scrollOnly) this.clearDOMPools();
448
-
449
- // clear the lists
450
- itemsToAdd.length = 0;
451
-
452
- // and if this is a full reload, we need to adjust layout
453
- if (!scrollOnly) {
454
- var layout = this.computeLayout();
455
- if (layout) this.adjust(layout);
456
- if (this.didReload) this.didReload(invalid === YES ? null : invalid);
457
- }
458
-
459
- return this;
460
- },
461
-
462
- /**
463
- Loops through remove queue and removes.
464
-
465
- @param {Hash} oldMap
466
- */
467
- processRemovals: function(oldMap) {
468
- var content = this.get("content");
469
- for (var guid in oldMap) {
470
- var imap = oldMap[guid];
471
- for (var itemIdx in imap) {
472
- itemIdx = parseInt(itemIdx, 10);
473
- if (isNaN(itemIdx)) continue;
474
-
475
- var view = imap[itemIdx];
476
-
477
- if (this._indexMap[itemIdx] === view) delete this._indexMap[itemIdx];
478
-
479
- view._isInCollection = NO;
480
- this.removeItemView(view);
481
- }
482
- }
483
- },
484
-
485
- /** @private
486
- Loops through update queue and... updates.
487
- */
488
- processUpdates: function(invalid) {
489
- var u = this._itemsToUpdate, content = this.get("content"), item, view;
490
- invalid.forEach(function(idx) {
491
- item = content.objectAt(idx);
492
- if (view = this.mappedViewForItem(item, idx)) {
493
- if (!view._isInCollection) return;
494
- var ex = this.exampleViewForItem(item, idx);
495
- this.updateItemView(view, ex, item, idx);
496
- }
497
- }, this);
498
- },
499
-
500
- /** @private
501
- Loops through add queue and, well, adds.
502
- */
503
- processAdds: function() {
504
- var content = this.get("content");
505
-
506
- var add = this._itemsToAdd, idx, len = add.length, itemIdx, item;
507
- for (idx = 0; idx < len; idx++) {
508
- itemIdx = add[idx]; item = content.objectAt(itemIdx);
509
-
510
- // get example view and create item view
511
- var exampleView = this.exampleViewForItem(item, itemIdx);
512
- var view = this.addItemView(exampleView, item, itemIdx);
513
- }
514
- },
515
-
516
- /** @private
517
- Clear all DOM pools.
518
- */
519
- clearDOMPools: function() {
520
- var pools = this._domPools || (this._domPools = {});
521
- for (var p in pools) {
522
- this.clearDOMPool(pools[p]);
523
- }
524
- },
525
-
526
- /**
527
- @type Number
528
- @default 10
529
- */
530
- domPoolSize: 10,
531
-
532
- /** @private
533
- Clears a specific DOM pool.
534
- */
535
- clearDOMPool: function(pool) {
536
- var idx, len = pool.length, item;
537
-
538
- // we skip one because there is a buffer area of one while scrolling
539
- for (idx = this.domPoolSize; idx < len; idx++) {
540
- item = pool[idx];
541
-
542
- // remove from DOM
543
- this.removeChild(item);
544
-
545
- // release the item
546
- this.releaseItemView(item);
547
- }
548
-
549
- // pool is cleared.
550
- pool.length = Math.min(pool.length, this.domPoolSize);
551
- },
552
-
553
- /** @private
554
- Returns the DOM pool for the given exampleView.
555
- */
556
- domPoolForExampleView: function(exampleView) {
557
- var pools = this._domPools || (this._domPools = {}), guid = SC.guidFor(exampleView);
558
- var pool = pools[guid];
559
- if (!pool) pool = pools[guid] = [];
560
- return pool;
561
- },
562
-
563
- /** @private
564
- Tries to find an item for the given example view in a dom pool.
565
- If one could not be found, returns `null`.
566
- */
567
- itemFromDOMPool: function(exampleView) {
568
- var pool = this.domPoolForExampleView(exampleView);
569
- if (pool.length < 1) return null;
570
- var view = pool.shift();
571
- if (view.wakeFromDOMPool) view.wakeFromDOMPool();
572
- return view;
573
- },
574
-
575
- /** @private
576
- Sends a view to a DOM pool.
577
- */
578
- sendToDOMPool: function(view) {
579
- var pool = this.domPoolForExampleView(view.createdFromExampleView);
580
- pool.push(view);
581
- var f = view.get("frame");
582
- view.adjust({ top: -f.height });
583
- view.set("layerId", SC.guidFor(view));
584
- if (view.sleepInDOMPool) view.sleepInDOMPool();
585
- },
586
-
587
- /** @private
588
- Adds an item view (grabbing the actual item from one of the pools if possible).
589
- */
590
- addItemView: function(exampleView, object, index) {
591
- var view, attrs = this._TMP_ATTRS || (this._TMP_ATTRS = {});
592
-
593
- // in any case, we need attributes
594
- this.setAttributesForItem(object, index, attrs);
595
-
596
- // try to get from DOM pool first
597
- if (view = this.itemFromDOMPool(exampleView)) {
598
- // set attributes
599
- this.configureItemView(view, attrs);
600
-
601
- // set that it is in the collection
602
- view._isInCollection = YES;
603
-
604
- // add to view map (if not used, it will be removed)
605
- this.mapView(object, index, view);
606
- this._indexMap[index] = view;
607
-
608
- // and that should have repositioned too
609
- return view;
610
- }
611
-
612
- // otherwise, just allocate a view
613
- view = this.allocateItemView(exampleView, attrs);
614
-
615
- // and then, add it
616
- this.appendChild(view);
617
-
618
- // set that it is in the collection.
619
- view._isInCollection = YES;
620
-
621
- // add to view map (if not used, it will be removed)
622
- this.mapView(object, index, view);
623
- this._indexMap[index] = view;
624
-
625
- return view;
626
- },
627
-
628
- /** @private
629
- Removes an item view.
630
- */
631
- removeItemView: function(current) {
632
- if (current.get("layerIsCacheable")) {
633
- this.sendToDOMPool(current);
634
- } else {
635
- this.removeChild(current);
636
- }
637
- current._isInCollection = NO;
638
- },
639
-
640
- /**
641
- Updates the specified item view. If the view is not "layer cacheable" or the
642
- example view has changed, it will be redrawn.
643
-
644
- Otherwise, nothing will happen.
645
- */
646
- updateItemView: function(current, exampleView, object, index) {
647
- if (!current.get("layerIsCacheable") || current.createdFromExampleView !== exampleView) {
648
- // unmap old and remove
649
- this.unmapView(current, index);
650
- delete this._indexMap[index];
651
- this.removeItemView(current, object, index);
652
-
653
- // add new and map
654
- var newView = this.addItemView(exampleView, object, index);
655
- } else {
656
- var attrs = this._TMP_ATTRS || (this._TMP_ATTRS = {});
657
-
658
- this.setAttributesForItem(object, index, attrs);
659
- this.configureItemView(current, attrs);
660
- }
661
- },
662
-
663
-
664
- /** @private
665
- Tells `ScrollView` that this should receive live updates during touch scrolling.
666
- We are so fast, aren't we?
667
- */
668
- _lastTopUpdate: 0,
669
-
670
- /** @private */
671
- _lastLeftUpdate: 0,
672
-
673
- /** @private */
674
- _tolerance: 100,
675
-
676
- /** @private */
677
- touchScrollDidChange: function(left, top) {
678
- // prevent getting too many in close succession.
679
- if (Date.now() - this._lastTouchScrollTime < 25) return;
680
-
681
- var clippingFrame = this.get('clippingFrame');
682
-
683
- var cf = this._inScrollClippingFrame || (this._inScrollClippingFrame = {x: 0, y: 0, width: 0, height: 0});
684
- cf.x = clippingFrame.x; cf.y = clippingFrame.y; cf.width = clippingFrame.width; cf.height = clippingFrame.height;
685
-
686
- // update
687
- cf.x = left;
688
- cf.y = top;
689
-
690
- var r = this.contentIndexesInRect(cf);
691
- if (!r) return; // no rect, do nothing.
692
-
693
- var len = this.get('length'),
694
- max = r.get('max'), min = r.get('min');
695
-
696
- if (max > len || min < 0) {
697
- r = r.copy();
698
- r.remove(len, max-len).remove(min, 0-min).freeze();
699
- }
700
-
701
- if (this._lastNowShowing) {
702
- if (r.contains(this._lastNowShowing) && this._lastNowShowing.contains(r)) return;
703
- }
704
- this._lastNowShowing = r;
705
- this.reloadIfNeeded(r, YES);
706
-
707
- this._lastTouchScrollTime = Date.now();
708
- }
709
-
710
- };