sproutcore 0.9.0

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 (270) hide show
  1. data/History.txt +4 -0
  2. data/License.txt +20 -0
  3. data/Manifest.txt +269 -0
  4. data/README.txt +67 -0
  5. data/Rakefile +4 -0
  6. data/app_generators/sproutcore/USAGE +5 -0
  7. data/app_generators/sproutcore/sproutcore_generator.rb +66 -0
  8. data/app_generators/sproutcore/templates/README +77 -0
  9. data/app_generators/sproutcore/templates/environment.yml +4 -0
  10. data/bin/sc-build +145 -0
  11. data/bin/sc-gen +24 -0
  12. data/bin/sc-server +63 -0
  13. data/bin/sproutcore +21 -0
  14. data/clients/sc_docs/controllers/docs.js +118 -0
  15. data/clients/sc_docs/core.js +19 -0
  16. data/clients/sc_docs/english.lproj/body.css +159 -0
  17. data/clients/sc_docs/english.lproj/body.rhtml +33 -0
  18. data/clients/sc_docs/english.lproj/controls.css +0 -0
  19. data/clients/sc_docs/english.lproj/icons/small/next.png +0 -0
  20. data/clients/sc_docs/english.lproj/icons/small/reset.png +0 -0
  21. data/clients/sc_docs/english.lproj/images/gradients.png +0 -0
  22. data/clients/sc_docs/english.lproj/images/indicator.gif +0 -0
  23. data/clients/sc_docs/english.lproj/images/toolbar.png +0 -0
  24. data/clients/sc_docs/english.lproj/no_docs.rhtml +7 -0
  25. data/clients/sc_docs/english.lproj/strings.js +14 -0
  26. data/clients/sc_docs/english.lproj/warning.rhtml +6 -0
  27. data/clients/sc_docs/fixtures/doc.js +11 -0
  28. data/clients/sc_docs/main.js +21 -0
  29. data/clients/sc_docs/models/doc.js +9 -0
  30. data/clients/sc_docs/tests/controllers/docs.rhtml +21 -0
  31. data/clients/sc_docs/tests/models/doc.rhtml +21 -0
  32. data/clients/sc_docs/tests/views/doc_frame.rhtml +21 -0
  33. data/clients/sc_docs/tests/views/doc_label_view.rhtml +21 -0
  34. data/clients/sc_docs/views/doc_frame.js +33 -0
  35. data/clients/sc_docs/views/doc_label.js +20 -0
  36. data/clients/sc_test_runner/controllers/runner.js +175 -0
  37. data/clients/sc_test_runner/core.js +19 -0
  38. data/clients/sc_test_runner/english.lproj/body.css +151 -0
  39. data/clients/sc_test_runner/english.lproj/body.rhtml +35 -0
  40. data/clients/sc_test_runner/english.lproj/controls.css +0 -0
  41. data/clients/sc_test_runner/english.lproj/icons/small/next.png +0 -0
  42. data/clients/sc_test_runner/english.lproj/icons/small/reset.png +0 -0
  43. data/clients/sc_test_runner/english.lproj/images/gradients.png +0 -0
  44. data/clients/sc_test_runner/english.lproj/images/indicator.gif +0 -0
  45. data/clients/sc_test_runner/english.lproj/images/toolbar.png +0 -0
  46. data/clients/sc_test_runner/english.lproj/no_tests.rhtml +6 -0
  47. data/clients/sc_test_runner/english.lproj/strings.js +14 -0
  48. data/clients/sc_test_runner/english.lproj/warning.rhtml +6 -0
  49. data/clients/sc_test_runner/fixtures/test.js +12 -0
  50. data/clients/sc_test_runner/main.js +26 -0
  51. data/clients/sc_test_runner/models/test.js +11 -0
  52. data/clients/sc_test_runner/views/runner_frame.js +72 -0
  53. data/clients/sc_test_runner/views/test_label.js +20 -0
  54. data/config/hoe.rb +70 -0
  55. data/config/requirements.rb +17 -0
  56. data/environment.yml +9 -0
  57. data/frameworks/prototype/prototype.js +4186 -0
  58. data/frameworks/sproutcore/Core.js +378 -0
  59. data/frameworks/sproutcore/README +3 -0
  60. data/frameworks/sproutcore/controllers/array.js +236 -0
  61. data/frameworks/sproutcore/controllers/collection.js +305 -0
  62. data/frameworks/sproutcore/controllers/controller.js +323 -0
  63. data/frameworks/sproutcore/controllers/object.js +372 -0
  64. data/frameworks/sproutcore/drag/drag.js +549 -0
  65. data/frameworks/sproutcore/drag/drag_data_source.js +32 -0
  66. data/frameworks/sproutcore/drag/drag_source.js +64 -0
  67. data/frameworks/sproutcore/drag/drop_target.js +153 -0
  68. data/frameworks/sproutcore/english.lproj/blank.gif +0 -0
  69. data/frameworks/sproutcore/english.lproj/buttons.css +589 -0
  70. data/frameworks/sproutcore/english.lproj/buttons.png +0 -0
  71. data/frameworks/sproutcore/english.lproj/inline_text_editor.css +21 -0
  72. data/frameworks/sproutcore/english.lproj/menu.css +121 -0
  73. data/frameworks/sproutcore/english.lproj/panels/background-fat.jpg +0 -0
  74. data/frameworks/sproutcore/english.lproj/panels/background-thin.jpg +0 -0
  75. data/frameworks/sproutcore/english.lproj/panels/bottom-edge.png +0 -0
  76. data/frameworks/sproutcore/english.lproj/panels/bottom-left-corner.png +0 -0
  77. data/frameworks/sproutcore/english.lproj/panels/bottom-right-corner.png +0 -0
  78. data/frameworks/sproutcore/english.lproj/panels/left-edge.png +0 -0
  79. data/frameworks/sproutcore/english.lproj/panels/overlay.png +0 -0
  80. data/frameworks/sproutcore/english.lproj/panels/right-edge.png +0 -0
  81. data/frameworks/sproutcore/english.lproj/panels/top-edge.png +0 -0
  82. data/frameworks/sproutcore/english.lproj/panels/top-left-corner.png +0 -0
  83. data/frameworks/sproutcore/english.lproj/panels/top-right-corner.png +0 -0
  84. data/frameworks/sproutcore/english.lproj/panes.css +155 -0
  85. data/frameworks/sproutcore/english.lproj/picker.css +22 -0
  86. data/frameworks/sproutcore/english.lproj/strings.js +15 -0
  87. data/frameworks/sproutcore/english.lproj/tab.css +23 -0
  88. data/frameworks/sproutcore/english.lproj/tests.css +67 -0
  89. data/frameworks/sproutcore/english.lproj/theme.css +77 -0
  90. data/frameworks/sproutcore/foundation/animator.js +670 -0
  91. data/frameworks/sproutcore/foundation/application.js +199 -0
  92. data/frameworks/sproutcore/foundation/array.js +348 -0
  93. data/frameworks/sproutcore/foundation/benchmark.js +211 -0
  94. data/frameworks/sproutcore/foundation/binding.js +384 -0
  95. data/frameworks/sproutcore/foundation/date.js +357 -0
  96. data/frameworks/sproutcore/foundation/error.js +39 -0
  97. data/frameworks/sproutcore/foundation/input_manager.js +153 -0
  98. data/frameworks/sproutcore/foundation/json.js +296 -0
  99. data/frameworks/sproutcore/foundation/mock.js +42 -0
  100. data/frameworks/sproutcore/foundation/node_descriptor.js +56 -0
  101. data/frameworks/sproutcore/foundation/object.js +777 -0
  102. data/frameworks/sproutcore/foundation/observable.js +451 -0
  103. data/frameworks/sproutcore/foundation/page.js +63 -0
  104. data/frameworks/sproutcore/foundation/path_module.js +413 -0
  105. data/frameworks/sproutcore/foundation/responder.js +310 -0
  106. data/frameworks/sproutcore/foundation/routes.js +371 -0
  107. data/frameworks/sproutcore/foundation/run_loop.js +21 -0
  108. data/frameworks/sproutcore/foundation/server.js +491 -0
  109. data/frameworks/sproutcore/foundation/set.js +96 -0
  110. data/frameworks/sproutcore/foundation/string.js +149 -0
  111. data/frameworks/sproutcore/foundation/undo_manager.js +186 -0
  112. data/frameworks/sproutcore/foundation/unittest.js +622 -0
  113. data/frameworks/sproutcore/foundation/utils.js +61 -0
  114. data/frameworks/sproutcore/globals/panels.js +182 -0
  115. data/frameworks/sproutcore/globals/popups.js +60 -0
  116. data/frameworks/sproutcore/globals/window.js +381 -0
  117. data/frameworks/sproutcore/lib/index.rhtml +66 -0
  118. data/frameworks/sproutcore/models/collection.js +395 -0
  119. data/frameworks/sproutcore/models/record.js +622 -0
  120. data/frameworks/sproutcore/models/store.js +295 -0
  121. data/frameworks/sproutcore/panes/dialog.js +16 -0
  122. data/frameworks/sproutcore/panes/manager.js +164 -0
  123. data/frameworks/sproutcore/panes/menu.js +45 -0
  124. data/frameworks/sproutcore/panes/overlay.js +231 -0
  125. data/frameworks/sproutcore/panes/pane.js +90 -0
  126. data/frameworks/sproutcore/panes/panel.js +19 -0
  127. data/frameworks/sproutcore/panes/picker.js +45 -0
  128. data/frameworks/sproutcore/tests/controllers/array.rhtml +86 -0
  129. data/frameworks/sproutcore/tests/controllers/controller.rhtml +273 -0
  130. data/frameworks/sproutcore/tests/controllers/object.rhtml +327 -0
  131. data/frameworks/sproutcore/tests/foundation/application.rhtml +125 -0
  132. data/frameworks/sproutcore/tests/foundation/array.rhtml +221 -0
  133. data/frameworks/sproutcore/tests/foundation/object.rhtml +69 -0
  134. data/frameworks/sproutcore/tests/globals/window.rhtml +45 -0
  135. data/frameworks/sproutcore/tests/panes/pane.rhtml +88 -0
  136. data/frameworks/sproutcore/tests/views/collection.rhtml +137 -0
  137. data/frameworks/sproutcore/tests/views/popup_button.rhtml +115 -0
  138. data/frameworks/sproutcore/tests/views/text_field.rhtml +37 -0
  139. data/frameworks/sproutcore/validators/credit_card.js +92 -0
  140. data/frameworks/sproutcore/validators/date.js +36 -0
  141. data/frameworks/sproutcore/validators/email.js +29 -0
  142. data/frameworks/sproutcore/validators/not_empty.js +24 -0
  143. data/frameworks/sproutcore/validators/number.js +55 -0
  144. data/frameworks/sproutcore/validators/password.js +78 -0
  145. data/frameworks/sproutcore/validators/validator.js +304 -0
  146. data/frameworks/sproutcore/views/button.js +425 -0
  147. data/frameworks/sproutcore/views/checkbox_field.js +30 -0
  148. data/frameworks/sproutcore/views/collection.js +1521 -0
  149. data/frameworks/sproutcore/views/container.js +62 -0
  150. data/frameworks/sproutcore/views/error_explanation.js +45 -0
  151. data/frameworks/sproutcore/views/field.js +214 -0
  152. data/frameworks/sproutcore/views/filter_button.js +29 -0
  153. data/frameworks/sproutcore/views/form.js +591 -0
  154. data/frameworks/sproutcore/views/image.js +141 -0
  155. data/frameworks/sproutcore/views/inline_text_editor.js +96 -0
  156. data/frameworks/sproutcore/views/label.js +176 -0
  157. data/frameworks/sproutcore/views/menu_item.js +90 -0
  158. data/frameworks/sproutcore/views/pagination.js +54 -0
  159. data/frameworks/sproutcore/views/popup_button.js +86 -0
  160. data/frameworks/sproutcore/views/popup_menu.js +137 -0
  161. data/frameworks/sproutcore/views/progress.js +100 -0
  162. data/frameworks/sproutcore/views/radio_field.js +107 -0
  163. data/frameworks/sproutcore/views/radio_group.js +48 -0
  164. data/frameworks/sproutcore/views/segmented.js +80 -0
  165. data/frameworks/sproutcore/views/select_field.js +272 -0
  166. data/frameworks/sproutcore/views/spinner.js +11 -0
  167. data/frameworks/sproutcore/views/tab.js +126 -0
  168. data/frameworks/sproutcore/views/text_field.js +179 -0
  169. data/frameworks/sproutcore/views/textarea_field.js +14 -0
  170. data/frameworks/sproutcore/views/toolbar.js +29 -0
  171. data/frameworks/sproutcore/views/view.js +1389 -0
  172. data/frameworks/sproutcore/views/workspace.js +170 -0
  173. data/generators/client/README +3 -0
  174. data/generators/client/USAGE +12 -0
  175. data/generators/client/client_generator.rb +53 -0
  176. data/generators/client/templates/core.js +19 -0
  177. data/generators/client/templates/english.lproj/body.css +0 -0
  178. data/generators/client/templates/english.lproj/body.rhtml +3 -0
  179. data/generators/client/templates/english.lproj/controls.css +0 -0
  180. data/generators/client/templates/english.lproj/strings.js +14 -0
  181. data/generators/client/templates/main.js +37 -0
  182. data/generators/controller/USAGE +16 -0
  183. data/generators/controller/controller_generator.rb +51 -0
  184. data/generators/controller/templates/controller.js +21 -0
  185. data/generators/controller/templates/test.rhtml +21 -0
  186. data/generators/framework/README +7 -0
  187. data/generators/framework/USAGE +12 -0
  188. data/generators/framework/framework_generator.rb +53 -0
  189. data/generators/framework/templates/core.js +20 -0
  190. data/generators/framework/templates/english.lproj/body.css +0 -0
  191. data/generators/framework/templates/english.lproj/body.rhtml +3 -0
  192. data/generators/framework/templates/english.lproj/controls.css +0 -0
  193. data/generators/framework/templates/english.lproj/strings.js +14 -0
  194. data/generators/language/USAGE +16 -0
  195. data/generators/language/language_generator.rb +47 -0
  196. data/generators/language/templates/strings.js +10 -0
  197. data/generators/model/USAGE +24 -0
  198. data/generators/model/model_generator.rb +55 -0
  199. data/generators/model/templates/fixture.js +11 -0
  200. data/generators/model/templates/model.js +20 -0
  201. data/generators/model/templates/test.rhtml +21 -0
  202. data/generators/test/USAGE +16 -0
  203. data/generators/test/templates/test.rhtml +21 -0
  204. data/generators/test/test_generator.rb +47 -0
  205. data/generators/view/USAGE +16 -0
  206. data/generators/view/templates/test.rhtml +21 -0
  207. data/generators/view/templates/view.js +20 -0
  208. data/generators/view/view_generator.rb +51 -0
  209. data/jsdoc/README.txt +119 -0
  210. data/jsdoc/app/DocFile.js +137 -0
  211. data/jsdoc/app/DocTag.js +110 -0
  212. data/jsdoc/app/Doclet.js +63 -0
  213. data/jsdoc/app/Dumper.js +143 -0
  214. data/jsdoc/app/JsDoc.js +103 -0
  215. data/jsdoc/app/JsHilite.js +45 -0
  216. data/jsdoc/app/JsIO.js +163 -0
  217. data/jsdoc/app/JsParse.js +385 -0
  218. data/jsdoc/app/JsPlate.js +130 -0
  219. data/jsdoc/app/JsTestrun.js +129 -0
  220. data/jsdoc/app/JsToke.js +564 -0
  221. data/jsdoc/app/Symbol.js +298 -0
  222. data/jsdoc/app/Transformer.js +14 -0
  223. data/jsdoc/app/Util.js +97 -0
  224. data/jsdoc/app/js.jar +0 -0
  225. data/jsdoc/app/run.js +144 -0
  226. data/jsdoc/plugins/min.js +316 -0
  227. data/jsdoc/plugins/strip.js +20 -0
  228. data/jsdoc/templates/sproutcore/class.tmpl +438 -0
  229. data/jsdoc/templates/sproutcore/default.css +241 -0
  230. data/jsdoc/templates/sproutcore/index.html +13 -0
  231. data/jsdoc/templates/sproutcore/index.tmpl +21 -0
  232. data/jsdoc/templates/sproutcore/prototype.js +4186 -0
  233. data/jsdoc/templates/sproutcore/publish.js +236 -0
  234. data/jsdoc/templates/sproutcore/splash.html +7 -0
  235. data/lib/sproutcore/build_tools/html_builder.rb +88 -0
  236. data/lib/sproutcore/build_tools/resource_builder.rb +194 -0
  237. data/lib/sproutcore/build_tools.rb +44 -0
  238. data/lib/sproutcore/bundle.rb +517 -0
  239. data/lib/sproutcore/bundle_manifest.rb +397 -0
  240. data/lib/sproutcore/generator_helper.rb +170 -0
  241. data/lib/sproutcore/helpers/capture_helper.rb +42 -0
  242. data/lib/sproutcore/helpers/static_helper.rb +80 -0
  243. data/lib/sproutcore/helpers/tag_helper.rb +110 -0
  244. data/lib/sproutcore/helpers/text_helper.rb +336 -0
  245. data/lib/sproutcore/helpers.rb +3 -0
  246. data/lib/sproutcore/jsdoc.rb +40 -0
  247. data/lib/sproutcore/jsmin.rb +247 -0
  248. data/lib/sproutcore/library.rb +258 -0
  249. data/lib/sproutcore/merb/bundle_controller.rb +179 -0
  250. data/lib/sproutcore/merb/router.rb +43 -0
  251. data/lib/sproutcore/merb.rb +27 -0
  252. data/lib/sproutcore/version.rb +9 -0
  253. data/lib/sproutcore/view_helpers/button_views.rb +302 -0
  254. data/lib/sproutcore/view_helpers/core_views.rb +284 -0
  255. data/lib/sproutcore/view_helpers/form_views.rb +258 -0
  256. data/lib/sproutcore/view_helpers/menu_views.rb +94 -0
  257. data/lib/sproutcore/view_helpers.rb +628 -0
  258. data/lib/sproutcore.rb +30 -0
  259. data/script/destroy +14 -0
  260. data/script/generate +14 -0
  261. data/script/txt2html +74 -0
  262. data/setup.rb +1585 -0
  263. data/spec/spec.opts +1 -0
  264. data/spec/spec_helper.rb +7 -0
  265. data/spec/sproutcore_spec.rb +11 -0
  266. data/tasks/deployment.rake +34 -0
  267. data/tasks/environment.rake +7 -0
  268. data/tasks/rspec.rake +21 -0
  269. data/tasks/website.rake +17 -0
  270. metadata +365 -0
@@ -0,0 +1,258 @@
1
+ ############################################################
2
+ # FORM VIEW HELPERS
3
+ #
4
+ # These view helpers make it easy to create input forms. You should wrap
5
+ # your form in the form_view tag and include your fields inside.
6
+ #
7
+
8
+ require 'sproutcore/view_helpers/core_views'
9
+
10
+ module SproutCore
11
+ module ViewHelpers
12
+
13
+ # Defines a form view. Note that you can make this form into a panel
14
+ # by passing :panel => true
15
+ view_helper :form_view do
16
+
17
+ property :content
18
+ property :enabled, :key => 'isEnabled'
19
+ property :valid, :key => 'isValid'
20
+ property :commiting, :key => 'isCommitting'
21
+ property :dirty, :key => 'isDirty'
22
+ property :errors
23
+ property :error_count, :key => 'errorCount'
24
+ property :autocommit
25
+ property :prompt, :key => 'commitPrompt'
26
+ view 'SC.FormView'
27
+
28
+ attribute :action, ''
29
+ attribute :method, 'post'
30
+ var :tag, 'form'
31
+ end
32
+
33
+ view_helper :error_explanation_view do
34
+
35
+ # JavaScript
36
+ view 'SC.ErrorExplanationView'
37
+
38
+ # HTML
39
+ var :tag, 'ul'
40
+ css_class_names << 'errors'
41
+ end
42
+
43
+ view_helper :checkbox_field_view do
44
+
45
+ # JavaScript
46
+ property :value
47
+ property :enabled, :key => 'isEnabled'
48
+ view 'SC.CheckboxFieldView'
49
+
50
+ # HTML
51
+ var :tag, 'input'
52
+ var :label
53
+
54
+ attribute :type, 'checkbox'
55
+ attribute :name, @item_id
56
+
57
+ # if a label is passed, then wrap the checkbox in a label tag and
58
+ # place the label text next to it.
59
+ if @label
60
+ content { %(<label><#{@tag} #{attributes} /> <span class="label">#{@label}</span></label>) }
61
+ else
62
+ content { "<#{@tag} #{attributes} />" }
63
+ end
64
+ end
65
+
66
+ # This renders a list of radio buttons.
67
+ #
68
+ # :values => [REQ]
69
+ # Set this to the values you want displayed in the radio buttons. You
70
+ # can pass an array here of strings or symbols, in which case these will
71
+ # be used as the values for the buttons and the names will be created
72
+ # from them. Or you can pass an array of arrays. The first items is
73
+ # the key value, the second item is the human readable value.
74
+ #
75
+ # :layout => :horizontal | :vertical
76
+ # This will write out horizontal or vertical to the CSS class names so
77
+ # you can control the layout of your radio buttons.
78
+ #
79
+ # :width =>
80
+ # This will set the width of each item in the view.
81
+ #
82
+ # BINDABLE OPTIONS
83
+ #
84
+ # :objects =>
85
+ # This can point to a hash of objects which will be used to convert the
86
+ # key values you set into JS objects.
87
+ #
88
+ # :value =>
89
+ # The current value of the radio buttons.
90
+ #
91
+ view_helper :radio_field_view do
92
+
93
+ #JavaScript
94
+ bind :objects
95
+ property :value
96
+ view 'SC.RadioFieldView'
97
+
98
+ # HTML
99
+
100
+ # Get the width styles out of the main style to put into the individual
101
+ # radio items.
102
+ css_styles.flatten!
103
+ @label_styles = css_styles.reject { |p| !(p =~ /width:/) }
104
+ css_styles.reject! { |p| @label_styles.include?(p) }
105
+
106
+ if @label_styles.size > 0
107
+ @label_styles = %( style="#{@label_styles * ' '}" )
108
+ else
109
+ @label_styles = ''
110
+ end
111
+
112
+ # get the layout mode.
113
+ var :layout, :vertical
114
+ css_class_names << 'radio' # default class
115
+ css_class_names << @layout if @layout
116
+
117
+ var :tag, 'div'
118
+
119
+ # generate the inner-html
120
+ var :values
121
+ html = @values.map do | v |
122
+ v = [v].flatten
123
+ key = v.first
124
+ label = (v.size > 1) ? v[1] : key.to_s.humanize
125
+ %(<label><input type="radio" name="#{item_id}" value="#{key}" #{@label_styles} /><span class="label">#{label}</span></label>)
126
+ end
127
+ @inner_html = html * "\n"
128
+
129
+ end
130
+
131
+
132
+
133
+ view_helper :text_field_view do
134
+ var :tag, 'input'
135
+
136
+ view 'SC.TextFieldView'
137
+ property :field_value
138
+ property :value, :key => :field_value
139
+ property :hint
140
+ property :validate, :key => :validator
141
+ property :label, :key => 'fieldLabel'
142
+
143
+ attribute :size
144
+ attribute :type, 'text'
145
+ attribute :label
146
+ attribute :name
147
+ content { "<#{@tag} #{attributes} />" }
148
+ end
149
+
150
+ view_helper :password_field_view, :extends => :text_field_view do
151
+ attribute :type, 'password'
152
+ end
153
+
154
+ view_helper :text_area_view do
155
+ var :form, false
156
+ var :tag, 'textarea'
157
+ var :value, @inner_html
158
+
159
+ if @form
160
+ view nil
161
+ else
162
+ view 'SC.TextareaFieldView'
163
+ property :field_value
164
+ property :value
165
+ end
166
+
167
+ attribute :cols
168
+ attribute :rows
169
+ attribute :validate
170
+ attribute :label
171
+ attribute :name
172
+ attribute :form, :key => :name
173
+ content { "#{ot}#{@value}#{ct}" }
174
+ end
175
+
176
+ # This view renders a browser-native popup menu.
177
+ #
178
+ # :field =>
179
+ # pass a name to make this part of the enclosing form.
180
+ #
181
+ # :options =>
182
+ # This will statically generate the HTML for the options menu. The
183
+ # value of this property should be an array of items containing strings
184
+ # or symbols, which will form both the item names and values or you can
185
+ # pass an array of arrays. The first item should be the value of the
186
+ # object, then second item should be the name of the menu.
187
+ #
188
+ # Note that if you bind to the :objects property, then that binding
189
+ # will override this code.
190
+ #
191
+ # :name_key =>
192
+ # Specifies the key to use to get the name of a menu item from the
193
+ # array of objects. This is only used if the menu items are generated
194
+ # dynamically.
195
+ #
196
+ # :sort_key =>
197
+ # Optional sort key to use to order the menu. If the sort key is not
198
+ # passed, the name of the menu items will be used. This is only used
199
+ # if the menu items are generated dynamically.
200
+ #
201
+ # :value_key =>
202
+ # Optional key used to get the value for each menu item from the
203
+ # array of objects. Only used if the menu items are generated
204
+ # dynamically.
205
+ #
206
+ # :empty =>
207
+ # Optional. Pass the string name of the "Empty" menu item. This item
208
+ # will appear at the top of the menu and its value will be a null
209
+ # object. The value you pass here will be localized by default. Only
210
+ # used if the menu items are generated dynamically.
211
+ #
212
+ # :localize =>
213
+ # Optional. If true, the names of the menu items and the empty menu
214
+ # item will be passed through the localization system. Defaults to
215
+ # false.
216
+ #
217
+ # :validator =>
218
+ # Optional. Pass the name of a validator and it will be used for this
219
+ # control.
220
+ #
221
+ # BINDABLE PROPERTIES
222
+ #
223
+ # :objects =>
224
+ # bind to an array of objects used to generate the menu item. This will
225
+ # override any hard-coded options you pass through the :options param.
226
+ #
227
+ # :value =>
228
+ # bind to the current value to show in the pop-up menu.
229
+ #
230
+ # :enabled =>
231
+ # bind or pass to set the control to enabled or disabled.
232
+ #
233
+ view_helper :select_field_view do
234
+ # JavaScript
235
+ property :name_key
236
+ property :sort_key
237
+ property :value_key
238
+ property :empty, :key => 'emptyName'
239
+ property :enabled, :key => 'isEnabled'
240
+ bind :objects
241
+ view 'SC.SelectFieldView'
242
+
243
+ # HTML
244
+ var :tag, 'select'
245
+ var :options
246
+ if @options
247
+ html = @options.map do |opt|
248
+ opt = [opt].flatten
249
+ key = opt.first
250
+ name = (opt.size > 1) ? opt[1] : key.to_s.titleize
251
+ %(<option value="#{key}">#{name}</option>)
252
+ end
253
+ @inner_html = html * "\n"
254
+ end
255
+ end
256
+
257
+ end
258
+ end
@@ -0,0 +1,94 @@
1
+ ############################################################
2
+ # MENU VIEW HELPERS
3
+ #
4
+ # The view helpers defined in this file help you create popup menus. You can
5
+ # define a menu in your RHTML helper to be used somewhere else with code like
6
+ # this:
7
+ #
8
+
9
+ # This is the quick way to define a menu item. Use this approach if you just
10
+ # want to create a menu with item names and perform an action:
11
+ #
12
+ # <% menu_view :action_menu, :validate=>'My.controller.validate' do |m| %>
13
+ # <%= m.item :item_1, 'Item 1', :action => 'doSomething' %>
14
+ # <%= m.separator_item %>
15
+ # <%= m.item :item_2, 'Item 2', :action => 'doAnother Thing' %>
16
+ # <% end %>
17
+ #
18
+ require 'sproutcore/view_helpers/core_views'
19
+ require 'sproutcore/view_helpers/button_views'
20
+
21
+ module SproutCore
22
+ module ViewHelpers
23
+
24
+ # This will create a popup menu. You should define internal outlets
25
+ # for the menu items. More options to follow.
26
+ view_helper :popup_menu_view do
27
+ var :tag, 'ul'
28
+ view 'SC.PopupMenuView'
29
+ end
30
+
31
+ # Creates a menu item view. Normally you don't want to create these
32
+ # directly. Instead use the menu_view helpers.
33
+ #
34
+ # OPTIONS:
35
+ # :action =>
36
+ # The action to invoke when the menu item is selected.
37
+ #
38
+ # :label =>
39
+ # The label for the menu item.
40
+ #
41
+ # :icon =>
42
+ # The icon for the menu item. No icon will show if this is not set.
43
+ #
44
+ # :shortcut =>
45
+ # The shortcut key for this menu item. Shortcuts are only active when
46
+ # the anchorview the popup menu is attached to is part of the in-focus
47
+ # pane. Shortcuts should be named in the standard input manager
48
+ # syntax like this: alt_ctrl_shift_k (for Alt-Ctrl-Shift-K)
49
+ #
50
+ # Note that on the web, Cmd (on the Mac) and Ctrl are equivalent.
51
+ # Always use ctrl when defining shortcuts.
52
+ #
53
+ # :enabled (bindable) =>
54
+ # Determines if the menu item will be enabled or not. This is generally
55
+ # handled by your validate method or through bindings.
56
+ #
57
+ # :selected (bindable) =>
58
+ # Determines if the menu item is selected or not. May also be a mixed
59
+ # state. This is generally handled by your validate method or through
60
+ # bindings.
61
+ #
62
+ # :alt =>
63
+ # name another item in this menu that is the alternate form of the
64
+ # receiver. If the alt item is enabled, this one will be hidden and
65
+ # visa versa.
66
+ #
67
+ view_helper :menu_item_view, :extends => :button_view do
68
+
69
+ # JavaScript
70
+ view 'SC.MenuItemView'
71
+
72
+ # HTML
73
+ var :tag, 'li'
74
+ var(:shortcut) { |sc| sc.split('_').map { |x| x.capitalize } * '-' }
75
+ css_class_names << 'menu-item'
76
+
77
+ @my_href = @href || 'javascript:;'
78
+ @href = nil
79
+ @inner_html = [
80
+ %(<a href="#{@my_href}">),
81
+ '<span class="sel">&#x2713;</span>',
82
+ '<span class="mixed">-</span>',
83
+ '<span class="inner">',
84
+ @image,
85
+ %(<span class="label">#{@label}</span>),
86
+ '</span>',
87
+ %(<span class="shortcut">#{@shortcut}</span>),
88
+ '</a>'
89
+ ] * ''
90
+
91
+ end
92
+
93
+ end
94
+ end