sproutcore 0.9.1 → 0.9.2
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.
- data/History.txt +233 -0
- data/Manifest.txt +67 -34
- data/bin/sc-build +12 -1
- data/bin/sc-gen +1 -1
- data/bin/sproutcore +14 -0
- data/clients/sc_docs/controllers/docs.js +38 -8
- data/clients/sc_docs/english.lproj/body.css +80 -127
- data/clients/sc_docs/english.lproj/body.rhtml +43 -23
- data/clients/sc_docs/english.lproj/no_docs.rhtml +2 -1
- data/clients/sc_docs/english.lproj/tabs.rhtml +16 -0
- data/clients/sc_docs/main.js +14 -9
- data/clients/sc_docs/models/doc.js +1 -1
- data/clients/sc_docs/tests/controllers/docs.rhtml +1 -2
- data/clients/sc_docs/tests/models/doc.rhtml +1 -2
- data/clients/sc_docs/tests/views/doc_frame.rhtml +1 -2
- data/clients/sc_docs/tests/views/doc_label_view.rhtml +1 -2
- data/clients/sc_docs/views/doc_frame.js +1 -1
- data/clients/sc_test_runner/controllers/runner.js +31 -8
- data/clients/sc_test_runner/english.lproj/body.css +62 -122
- data/clients/sc_test_runner/english.lproj/body.rhtml +62 -26
- data/clients/sc_test_runner/main.js +1 -6
- data/clients/sc_test_runner/models/test.js +14 -1
- data/clients/sc_test_runner/views/runner_frame.js +4 -2
- data/clients/view_builder/builders/builder.js +339 -0
- data/clients/view_builder/builders/button.js +81 -0
- data/clients/view_builder/controllers/document.js +21 -0
- data/clients/view_builder/core.js +19 -0
- data/clients/view_builder/english.lproj/body.css +77 -0
- data/clients/view_builder/english.lproj/body.rhtml +41 -0
- data/clients/{sc_docs → view_builder}/english.lproj/controls.css +0 -0
- data/clients/view_builder/english.lproj/strings.js +14 -0
- data/clients/view_builder/main.js +38 -0
- data/clients/view_builder/tests/controllers/document.rhtml +20 -0
- data/clients/view_builder/tests/views/builder.rhtml +20 -0
- data/clients/view_builder/views/builder.js +23 -0
- data/frameworks/prototype/prototype.js +1 -1
- data/frameworks/sproutcore/Core.js +32 -7
- data/frameworks/sproutcore/README +1 -1
- data/frameworks/sproutcore/animation/animation.js +411 -0
- data/frameworks/sproutcore/controllers/array.js +17 -9
- data/frameworks/sproutcore/controllers/collection.js +9 -110
- data/frameworks/sproutcore/controllers/controller.js +1 -1
- data/frameworks/sproutcore/controllers/object.js +2 -1
- data/frameworks/sproutcore/drag/drag.js +267 -56
- data/frameworks/sproutcore/drag/drag_data_source.js +24 -16
- data/frameworks/sproutcore/drag/drag_source.js +53 -42
- data/frameworks/sproutcore/drag/drop_target.js +2 -2
- data/frameworks/sproutcore/english.lproj/buttons.css +337 -236
- data/frameworks/sproutcore/english.lproj/core.css +115 -0
- data/frameworks/sproutcore/english.lproj/icons.css +227 -0
- data/{clients/sc_docs → frameworks/sproutcore}/english.lproj/images/indicator.gif +0 -0
- data/frameworks/sproutcore/english.lproj/images/sc-theme-sprite.png +0 -0
- data/frameworks/sproutcore/english.lproj/images/sc-theme-ysprite.png +0 -0
- data/frameworks/sproutcore/english.lproj/images/shared-icons.png +0 -0
- data/frameworks/sproutcore/english.lproj/menu.css +1 -1
- data/frameworks/sproutcore/english.lproj/strings.js +1 -1
- data/frameworks/sproutcore/english.lproj/theme.css +405 -31
- data/frameworks/sproutcore/foundation/application.js +15 -11
- data/frameworks/sproutcore/foundation/benchmark.js +1 -1
- data/frameworks/sproutcore/foundation/binding.js +2 -2
- data/frameworks/sproutcore/foundation/date.js +1 -1
- data/frameworks/sproutcore/foundation/error.js +1 -1
- data/frameworks/sproutcore/foundation/input_manager.js +32 -21
- data/frameworks/sproutcore/foundation/mock.js +1 -1
- data/frameworks/sproutcore/foundation/node_descriptor.js +9 -6
- data/frameworks/sproutcore/foundation/object.js +249 -177
- data/frameworks/sproutcore/foundation/page.js +5 -2
- data/frameworks/sproutcore/foundation/path_module.js +11 -10
- data/frameworks/sproutcore/foundation/responder.js +5 -2
- data/frameworks/sproutcore/foundation/routes.js +17 -13
- data/frameworks/sproutcore/foundation/run_loop.js +249 -11
- data/frameworks/sproutcore/foundation/server.js +1 -1
- data/frameworks/sproutcore/foundation/set.js +3 -3
- data/frameworks/sproutcore/foundation/string.js +5 -3
- data/frameworks/sproutcore/foundation/timer.js +371 -0
- data/frameworks/sproutcore/foundation/undo_manager.js +1 -1
- data/frameworks/sproutcore/foundation/unittest.js +3 -3
- data/frameworks/sproutcore/foundation/utils.js +161 -2
- data/frameworks/sproutcore/globals/panels.js +1 -1
- data/frameworks/sproutcore/globals/popups.js +4 -3
- data/frameworks/sproutcore/globals/window.js +44 -4
- data/frameworks/sproutcore/lib/button_views.rb +328 -0
- data/frameworks/sproutcore/lib/collection_view.rb +80 -0
- data/frameworks/sproutcore/lib/core_views.rb +281 -0
- data/frameworks/sproutcore/lib/form_views.rb +253 -0
- data/frameworks/sproutcore/lib/index.rhtml +2 -0
- data/frameworks/sproutcore/lib/menu_views.rb +88 -0
- data/frameworks/sproutcore/{foundation → mixins}/array.js +60 -29
- data/frameworks/sproutcore/mixins/control.js +265 -0
- data/frameworks/sproutcore/mixins/delegate_support.js +66 -0
- data/frameworks/sproutcore/{foundation → mixins}/observable.js +176 -6
- data/frameworks/sproutcore/mixins/scrollable.js +245 -0
- data/frameworks/sproutcore/mixins/selection_support.js +148 -0
- data/frameworks/sproutcore/mixins/validatable.js +152 -0
- data/frameworks/sproutcore/models/collection.js +5 -5
- data/frameworks/sproutcore/models/record.js +1 -1
- data/frameworks/sproutcore/models/store.js +1 -1
- data/frameworks/sproutcore/panes/dialog.js +1 -1
- data/frameworks/sproutcore/panes/manager.js +1 -1
- data/frameworks/sproutcore/panes/menu.js +1 -1
- data/frameworks/sproutcore/panes/overlay.js +2 -2
- data/frameworks/sproutcore/panes/panel.js +1 -1
- data/frameworks/sproutcore/panes/picker.js +1 -1
- data/frameworks/sproutcore/tests/controllers/array.rhtml +44 -4
- data/frameworks/sproutcore/tests/foundation/timer/invalidate.rhtml +33 -0
- data/frameworks/sproutcore/tests/foundation/timer/invokeLater.rhtml +145 -0
- data/frameworks/sproutcore/tests/foundation/timer/isPaused.rhtml +70 -0
- data/frameworks/sproutcore/tests/foundation/timer/schedule.rhtml +145 -0
- data/frameworks/sproutcore/tests/views/{scroll.rhtml → checkbox.rhtml} +3 -3
- data/frameworks/sproutcore/tests/views/{collection.rhtml → collection/base.rhtml} +33 -32
- data/frameworks/sproutcore/tests/views/collection/incremental_rendering.rhtml +260 -0
- data/frameworks/sproutcore/tests/views/image_cell.rhtml +19 -0
- data/frameworks/sproutcore/tests/views/label_item.rhtml +2 -4
- data/frameworks/sproutcore/tests/views/list.rhtml +2 -3
- data/frameworks/sproutcore/tests/views/list_item.rhtml +20 -0
- data/frameworks/sproutcore/tests/views/slider.rhtml +20 -0
- data/frameworks/sproutcore/tests/views/text_cell.rhtml +19 -0
- data/frameworks/sproutcore/tests/views/view/clippingFrame.rhtml +395 -0
- data/frameworks/sproutcore/tests/views/view/frame.rhtml +353 -0
- data/frameworks/sproutcore/tests/views/view/innerFrame.rhtml +347 -0
- data/frameworks/sproutcore/tests/views/view/isVisibleInWindow.rhtml +148 -0
- data/frameworks/sproutcore/tests/views/view/scrollFrame.rhtml +468 -0
- data/frameworks/sproutcore/validators/credit_card.js +33 -13
- data/frameworks/sproutcore/validators/date.js +26 -6
- data/frameworks/sproutcore/validators/email.js +21 -3
- data/frameworks/sproutcore/validators/not_empty.js +11 -1
- data/frameworks/sproutcore/validators/number.js +18 -4
- data/frameworks/sproutcore/validators/password.js +12 -1
- data/frameworks/sproutcore/validators/validator.js +204 -194
- data/frameworks/sproutcore/views/{button.js → button/button.js} +96 -94
- data/frameworks/sproutcore/views/button/checkbox.js +29 -0
- data/frameworks/sproutcore/views/button/disclosure.js +42 -0
- data/frameworks/sproutcore/views/button/radio.js +29 -0
- data/frameworks/sproutcore/views/{collection.js → collection/collection.js} +1373 -1024
- data/frameworks/sproutcore/views/collection/grid.js +124 -46
- data/frameworks/sproutcore/views/collection/image_cell.js +17 -46
- data/frameworks/sproutcore/views/collection/list.js +45 -35
- data/frameworks/sproutcore/views/collection/source_list.js +386 -0
- data/frameworks/sproutcore/views/collection/table.js +118 -0
- data/frameworks/sproutcore/views/container.js +7 -2
- data/frameworks/sproutcore/views/error_explanation.js +23 -10
- data/frameworks/sproutcore/views/{checkbox_field.js → field/checkbox_field.js} +16 -6
- data/frameworks/sproutcore/views/field/field.js +219 -0
- data/frameworks/sproutcore/views/{radio_field.js → field/radio_field.js} +27 -12
- data/frameworks/sproutcore/views/{select_field.js → field/select_field.js} +116 -90
- data/frameworks/sproutcore/views/{text_field.js → field/text_field.js} +57 -8
- data/frameworks/sproutcore/views/{textarea_field.js → field/textarea_field.js} +13 -3
- data/frameworks/sproutcore/views/filter_button.js +2 -2
- data/frameworks/sproutcore/views/form.js +3 -3
- data/frameworks/sproutcore/views/image.js +128 -21
- data/frameworks/sproutcore/views/inline_text_editor.js +1 -1
- data/frameworks/sproutcore/views/label.js +149 -92
- data/frameworks/sproutcore/views/list_item.js +225 -0
- data/frameworks/sproutcore/views/menu_item.js +10 -4
- data/frameworks/sproutcore/views/pagination.js +11 -4
- data/frameworks/sproutcore/views/popup_button.js +25 -21
- data/frameworks/sproutcore/views/popup_menu.js +10 -4
- data/frameworks/sproutcore/views/progress.js +29 -16
- data/frameworks/sproutcore/views/radio_group.js +1 -1
- data/frameworks/sproutcore/views/scroll.js +60 -20
- data/frameworks/sproutcore/views/segmented.js +1 -1
- data/frameworks/sproutcore/views/slider.js +132 -0
- data/frameworks/sproutcore/views/source_list_group.js +130 -0
- data/frameworks/sproutcore/views/spinner.js +1 -1
- data/frameworks/sproutcore/views/split.js +292 -0
- data/frameworks/sproutcore/views/split_divider.js +109 -0
- data/frameworks/sproutcore/views/tab.js +1 -1
- data/frameworks/sproutcore/views/toolbar.js +1 -1
- data/frameworks/sproutcore/views/view.js +1272 -591
- data/generators/client/templates/english.lproj/body.css +1 -1
- data/generators/controller/controller_generator.rb +1 -1
- data/generators/controller/templates/test.rhtml +2 -1
- data/generators/model/templates/test.rhtml +1 -1
- data/generators/test/templates/test.rhtml +1 -1
- data/generators/view/templates/test.rhtml +1 -1
- data/jsdoc/templates/sproutcore/class.tmpl +241 -338
- data/jsdoc/templates/sproutcore/default.css +105 -155
- data/jsdoc/templates/sproutcore/index.tmpl +43 -8
- data/jsdoc/templates/sproutcore/publish.js +9 -4
- data/lib/sproutcore/build_tools/html_builder.rb +29 -13
- data/lib/sproutcore/build_tools/resource_builder.rb +1 -1
- data/lib/sproutcore/bundle.rb +86 -25
- data/lib/sproutcore/jsdoc.rb +2 -0
- data/lib/sproutcore/version.rb +1 -1
- data/lib/sproutcore/view_helpers.rb +36 -3
- data/tasks/deployment.rake +1 -1
- metadata +69 -36
- data/clients/sc_docs/english.lproj/icons/small/next.png +0 -0
- data/clients/sc_docs/english.lproj/icons/small/reset.png +0 -0
- data/clients/sc_docs/english.lproj/images/gradients.png +0 -0
- data/clients/sc_docs/english.lproj/images/toolbar.png +0 -0
- data/clients/sc_docs/english.lproj/warning.rhtml +0 -6
- data/clients/sc_test_runner/english.lproj/warning.rhtml +0 -6
- data/frameworks/sproutcore/english.lproj/buttons.png +0 -0
- data/frameworks/sproutcore/english.lproj/collections.css +0 -82
- data/frameworks/sproutcore/english.lproj/images/buttons-sprite.png +0 -0
- data/frameworks/sproutcore/views/collection/collection_item.js +0 -36
- data/frameworks/sproutcore/views/collection/text_cell.js +0 -128
- data/frameworks/sproutcore/views/field.js +0 -214
- data/frameworks/sproutcore/views/workspace.js +0 -170
- data/generators/client/templates/english.lproj/controls.css +0 -0
- data/generators/framework/templates/english.lproj/body.css +0 -0
- data/generators/framework/templates/english.lproj/body.rhtml +0 -3
- data/generators/framework/templates/english.lproj/controls.css +0 -0
- data/lib/sproutcore/view_helpers/button_views.rb +0 -302
- data/lib/sproutcore/view_helpers/core_views.rb +0 -292
- data/lib/sproutcore/view_helpers/form_views.rb +0 -258
- data/lib/sproutcore/view_helpers/menu_views.rb +0 -94
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// ========================================================================
|
|
2
2
|
// SproutCore
|
|
3
|
-
// copyright 2006-
|
|
3
|
+
// copyright 2006-2008 Sprout Systems, Inc.
|
|
4
4
|
// ========================================================================
|
|
5
5
|
|
|
6
6
|
require('views/view') ;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// ========================================================================
|
|
2
2
|
// SproutCore
|
|
3
|
-
// copyright 2006-
|
|
3
|
+
// copyright 2006-2008 Sprout Systems, Inc.
|
|
4
4
|
// ========================================================================
|
|
5
5
|
|
|
6
6
|
require('views/view') ;
|
|
@@ -32,8 +32,9 @@ SC.PopupView = SC.PanelView.extend({
|
|
|
32
32
|
}),
|
|
33
33
|
|
|
34
34
|
locationFor: function(view,ev) {
|
|
35
|
-
var
|
|
36
|
-
var
|
|
35
|
+
var loc = Event.pointerLocation(ev) ;
|
|
36
|
+
var x = (ev) ? (loc.x - 20) : 100 ;
|
|
37
|
+
var y = (ev) ? lox.y : 100 ;
|
|
37
38
|
var dim = view.get('size') ;
|
|
38
39
|
var screenSize = Element.getDimensions(this) ;
|
|
39
40
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// ========================================================================
|
|
2
2
|
// SproutCore
|
|
3
|
-
// copyright 2006-
|
|
3
|
+
// copyright 2006-2008 Sprout Systems, Inc.
|
|
4
4
|
// ========================================================================
|
|
5
5
|
|
|
6
6
|
require('Core') ;
|
|
@@ -26,6 +26,18 @@ SC.window = SC.PaneView.extend({
|
|
|
26
26
|
// Window Size/Resizing
|
|
27
27
|
//
|
|
28
28
|
|
|
29
|
+
innerFrame: function() {
|
|
30
|
+
return this.frame();
|
|
31
|
+
}.property('frame'),
|
|
32
|
+
|
|
33
|
+
clippingFrame: function() {
|
|
34
|
+
return this.frame();
|
|
35
|
+
}.property('frame'),
|
|
36
|
+
|
|
37
|
+
scrollFrame: function() {
|
|
38
|
+
return this.frame();
|
|
39
|
+
}.property('frame'),
|
|
40
|
+
|
|
29
41
|
frame: function() {
|
|
30
42
|
var size = this.get('size') ;
|
|
31
43
|
return { x: 0, y: 0, width: size.width, height: size.height } ;
|
|
@@ -161,6 +173,10 @@ SC.window = SC.PaneView.extend({
|
|
|
161
173
|
|
|
162
174
|
_onmousedown: function(evt)
|
|
163
175
|
{
|
|
176
|
+
// make sure the view gets focus no matter what. FF is inconsistant
|
|
177
|
+
// about this.
|
|
178
|
+
this._onfocus();
|
|
179
|
+
|
|
164
180
|
// first, save the click count. Click count resets if your down is
|
|
165
181
|
// more than 125msec after you last click up.
|
|
166
182
|
this._clickCount = this._clickCount + 1 ;
|
|
@@ -243,6 +259,11 @@ SC.window = SC.PaneView.extend({
|
|
|
243
259
|
// trigger calls to mouseDragged.
|
|
244
260
|
//
|
|
245
261
|
_onmousemove: function(evt) {
|
|
262
|
+
|
|
263
|
+
// make sure the view gets focus no matter what. FF is inconsistant
|
|
264
|
+
// about this.
|
|
265
|
+
this._onfocus();
|
|
266
|
+
|
|
246
267
|
var lh = this._lastHovered || [] ;
|
|
247
268
|
var nh = [] ;
|
|
248
269
|
var view = this.firstViewForEvent(evt) ;
|
|
@@ -288,13 +309,30 @@ SC.window = SC.PaneView.extend({
|
|
|
288
309
|
});
|
|
289
310
|
},
|
|
290
311
|
|
|
291
|
-
|
|
312
|
+
_onfocus: function() {
|
|
313
|
+
if (!this._hasFocus) {
|
|
314
|
+
this._hasFocus = YES ;
|
|
315
|
+
this.addClassName('focus') ;
|
|
316
|
+
this.removeClassName('blur') ;
|
|
317
|
+
}
|
|
318
|
+
},
|
|
319
|
+
|
|
320
|
+
_onblur: function() {
|
|
321
|
+
if (this._hasFocus) {
|
|
322
|
+
this._hasFocus = NO ;
|
|
323
|
+
this.removeClassName('focus') ;
|
|
324
|
+
this.addClassName('blur');
|
|
325
|
+
}
|
|
326
|
+
},
|
|
327
|
+
|
|
328
|
+
_hasFocus: NO,
|
|
329
|
+
|
|
330
|
+
_EVTS: ['mousedown', 'mouseup', 'click', 'dblclick', 'keydown', 'keyup', 'keypress', 'mouseover', 'mouseout', 'mousemove', 'resize', 'unload', 'focus', 'blur'],
|
|
292
331
|
|
|
293
332
|
_listenerCache: [],
|
|
294
333
|
|
|
295
334
|
setup: function() {
|
|
296
|
-
|
|
297
|
-
|
|
335
|
+
|
|
298
336
|
// setup event listeners for window.
|
|
299
337
|
var win = this ;
|
|
300
338
|
win._EVTS.each(function(e) {
|
|
@@ -308,6 +346,8 @@ SC.window = SC.PaneView.extend({
|
|
|
308
346
|
});
|
|
309
347
|
|
|
310
348
|
this.get('size') ; // fetch the size from the window and save it.
|
|
349
|
+
this.set('isVisibleInWindow', true) ;
|
|
350
|
+
this._onfocus() ;
|
|
311
351
|
}
|
|
312
352
|
}).viewFor($tag('body')) ;
|
|
313
353
|
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
############################################################
|
|
2
|
+
# BUTTON VIEW HELPERS
|
|
3
|
+
#
|
|
4
|
+
# You can do a lot of different things with buttons: push buttons, switches,
|
|
5
|
+
# checkboxes, radio buttons and more. This file contains the helpers you can
|
|
6
|
+
# use to help you build these.
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
require_helpers 'core_views'
|
|
10
|
+
|
|
11
|
+
# This is the core button_view helper. Most other helpers in this file
|
|
12
|
+
# descend from this helper. If a helper is not provided that already
|
|
13
|
+
# builds the button you want, you can probably use this helper to
|
|
14
|
+
# construct it yourself.
|
|
15
|
+
#
|
|
16
|
+
# :enabled (bindable) =>
|
|
17
|
+
# If set to true, the button will be enabled.
|
|
18
|
+
#
|
|
19
|
+
# :selected (bindable) =>
|
|
20
|
+
# Set to true, false or :mixed. This will determine if the button
|
|
21
|
+
# appears selected. You can bind to this option but more often you will
|
|
22
|
+
# want to bind to :value.
|
|
23
|
+
#
|
|
24
|
+
# :default (bindable) =>
|
|
25
|
+
# Set to true to make this button the default button triggered when
|
|
26
|
+
# you press return while focused in a panel or form.
|
|
27
|
+
#
|
|
28
|
+
# :cancel (bindable) =>
|
|
29
|
+
# Set to true to make this button the one triggered when you press
|
|
30
|
+
# return while focused on a panel or form.
|
|
31
|
+
#
|
|
32
|
+
# :theme => :regular | :back | :checkbox | :radio | :square |
|
|
33
|
+
# (your own theme)
|
|
34
|
+
# Use this to set the theme appearance of the button. The SC theme
|
|
35
|
+
# comes with built-in support for the ones listed above or you can
|
|
36
|
+
# name your own. a CSS class name will be assigned to the button with
|
|
37
|
+
# this theme name.
|
|
38
|
+
#
|
|
39
|
+
# :behavior => :push, :toggle, :on, :off
|
|
40
|
+
# Specify the behavior of the button when pressed. The default is
|
|
41
|
+
# :push.
|
|
42
|
+
#
|
|
43
|
+
# :tag =>
|
|
44
|
+
# The tag name to use for the button. Defaults to 'a'. If the tag is
|
|
45
|
+
# 'a', an href="javascript:;" will be added automatically unless you
|
|
46
|
+
# specify an alternate.
|
|
47
|
+
#
|
|
48
|
+
# :href =>
|
|
49
|
+
# optional href to pass. Generall you don't want to pass this.
|
|
50
|
+
#
|
|
51
|
+
# :label =>
|
|
52
|
+
# The value of the label placed inside the button. You can alternately
|
|
53
|
+
# specify inner_html which will be used a the label. Note that the
|
|
54
|
+
# button_view generator automatically wraps your inner_html with a
|
|
55
|
+
# standard button structure unless you pass :label => false
|
|
56
|
+
#
|
|
57
|
+
# :image =>
|
|
58
|
+
# Renders an image tag on the outside of the label span. If this is
|
|
59
|
+
# set, then the wrapping tag will also have 'image' css class applied.
|
|
60
|
+
#
|
|
61
|
+
# :sprite => [resource_url, x-ofset, y-offset]
|
|
62
|
+
# Render an image sprite! The expected size of the sprite depends on
|
|
63
|
+
# the class name of the view. If the x-offset or y-offset are numbers
|
|
64
|
+
# they will be converted to "px". If this is set, then the wrapping
|
|
65
|
+
# tag will also have 'sprite' css class applied.
|
|
66
|
+
#
|
|
67
|
+
# Alternatively, name the CSS class you want assigned to the img for
|
|
68
|
+
# the sprite.
|
|
69
|
+
#
|
|
70
|
+
view_helper :button_view do
|
|
71
|
+
# JavaScript
|
|
72
|
+
property :enabled, :key => 'isEnabled'
|
|
73
|
+
|
|
74
|
+
property :action
|
|
75
|
+
property :target
|
|
76
|
+
|
|
77
|
+
#property(:action) { |v| "function(ev) { return #{v}(this, ev); }" }
|
|
78
|
+
property :default, :key => 'isDefault'
|
|
79
|
+
property :cancel, :key => 'isCancel'
|
|
80
|
+
property :value
|
|
81
|
+
property :theme
|
|
82
|
+
property :size
|
|
83
|
+
property :behavior, :key => 'buttonBehavior'
|
|
84
|
+
property :toggle_on_value
|
|
85
|
+
property :toggle_off_value
|
|
86
|
+
|
|
87
|
+
property :key_equivalent, :key => :keyEquivalent
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
property(:selected, :key => 'isSelected') do |x|
|
|
91
|
+
(x == :mixed) ? 'SC.MIXED_STATE' : x
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
view 'SC.ButtonView'
|
|
95
|
+
|
|
96
|
+
# HTML
|
|
97
|
+
var :title
|
|
98
|
+
var :label, @title || @inner_html || 'Submit'
|
|
99
|
+
var :tag, 'a'
|
|
100
|
+
var :theme, :regular
|
|
101
|
+
var :size, :normal
|
|
102
|
+
|
|
103
|
+
attribute(:href) { |x| (x.nil? && (@tag.downcase.to_s == 'a')) ? 'javascript:;' : nil }
|
|
104
|
+
|
|
105
|
+
# Add the theme to the CSS class.
|
|
106
|
+
css_class_names << 'sc-button-view'
|
|
107
|
+
css_class_names << @theme unless @theme.nil? || @theme == false
|
|
108
|
+
css_class_names << @size unless @size.nil? || @size == false
|
|
109
|
+
|
|
110
|
+
var :image
|
|
111
|
+
var :sprite
|
|
112
|
+
|
|
113
|
+
if @image
|
|
114
|
+
@image = %(<img src="#{@image}" />)
|
|
115
|
+
css_class_names << 'image'
|
|
116
|
+
|
|
117
|
+
elsif @sprite
|
|
118
|
+
img_url = self.blank_url
|
|
119
|
+
|
|
120
|
+
if @sprite.instance_of?(Array)
|
|
121
|
+
xoff = @sprite[1]
|
|
122
|
+
xoff = "#{xoff}px" if xoff.kind_of?(Numeric)
|
|
123
|
+
|
|
124
|
+
yoff = @sprite[2]
|
|
125
|
+
yoff = "#{yoff}px" if yoff.kind_of?(Numeric)
|
|
126
|
+
|
|
127
|
+
# render image part
|
|
128
|
+
@image = %(<img class="sprite" style="background: url(#{@sprite[0]}) no-repeat #{xoff} #{yoff};" src="#{img_url}" />)
|
|
129
|
+
|
|
130
|
+
else
|
|
131
|
+
@image = %(<img class="#{@sprite} sprite" src="#{img_url}" />)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# Generate some standard HTML for unless :label => false.
|
|
137
|
+
unless @label == false
|
|
138
|
+
# Button Width properties must be set on the inner label. To deal
|
|
139
|
+
# with this remove any width style properties from the parent element
|
|
140
|
+
# and append them to the inner label.
|
|
141
|
+
@label_style = []
|
|
142
|
+
css_styles.flatten!
|
|
143
|
+
css_styles.reject! do | part |
|
|
144
|
+
if part =~ /width:/
|
|
145
|
+
@label_style << part
|
|
146
|
+
true
|
|
147
|
+
else
|
|
148
|
+
false
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
if @label_style.size > 0
|
|
152
|
+
@label_style = %(style="#{@label_style * ' '}" )
|
|
153
|
+
else
|
|
154
|
+
@label_style = ''
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# Avoid doing the normal thing for anchor tags.
|
|
158
|
+
@inner_html = %(<span class="button-inner">#{@image}<span #{@label_style}class="label">#{@label}</span></span>)
|
|
159
|
+
|
|
160
|
+
else
|
|
161
|
+
@inner_html = [@image,@inner_html] * ''
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
view_helper :popup_button_view, :wraps => :button_view do
|
|
169
|
+
parent_helper
|
|
170
|
+
property :menu, :key => :menuName
|
|
171
|
+
view 'SC.PopupButtonView'
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
# Renders a disclosure triangle.
|
|
176
|
+
view_helper :disclosure_view, :wraps => :button_view do
|
|
177
|
+
opts = { :theme => :disclosure }
|
|
178
|
+
opts[:label] = false if options[:label].nil?
|
|
179
|
+
parent_helper(opts)
|
|
180
|
+
|
|
181
|
+
view 'SC.DisclosureView'
|
|
182
|
+
@inner_html = [%(<img class="button" src="#{blank_url}" />)]
|
|
183
|
+
@inner_html << %(<span #{@label_style}class="label">#{@label}</span>) if @label
|
|
184
|
+
@inner_html = @inner_html.join('')
|
|
185
|
+
|
|
186
|
+
css_class_names << 'sc-disclosure-view'
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
# Renders a checkbox. If you pass a label this will render the label
|
|
191
|
+
# text next to the checkbox. Unlike button_view, passing no :label is
|
|
192
|
+
# the same as passing :label => false.
|
|
193
|
+
view_helper :checkbox_view, :wraps => :button_view do
|
|
194
|
+
opts = { :theme => :checkbox }
|
|
195
|
+
opts[:label] = false if options[:label].nil?
|
|
196
|
+
parent_helper(opts)
|
|
197
|
+
|
|
198
|
+
# provide some defaults to the JavaScript.
|
|
199
|
+
view 'SC.CheckboxView'
|
|
200
|
+
|
|
201
|
+
# render checkbox HTML.
|
|
202
|
+
css_class_names << 'sc-checkbox-view'
|
|
203
|
+
|
|
204
|
+
img_url = self.blank_url
|
|
205
|
+
@inner_html = [%(<img class="button" src="#{img_url}" />)]
|
|
206
|
+
@inner_html << %(<span #{@label_style}class="label">#{@label}</span>) if @label
|
|
207
|
+
@inner_html = @inner_html.join ''
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
# Renders a radio buton. If you pass a label this will render the label
|
|
211
|
+
# text next to the checkbox. Unlike button_view, passing no :label is
|
|
212
|
+
# the same as passing :label => false.
|
|
213
|
+
view_helper :radio_view, :wraps => :button_view do
|
|
214
|
+
opts = { :theme => :radio }
|
|
215
|
+
opts[:label] = false if options[:label].nil?
|
|
216
|
+
parent_helper(opts)
|
|
217
|
+
|
|
218
|
+
view 'SC.RadioView'
|
|
219
|
+
|
|
220
|
+
css_class_names << 'sc-radio-button-view'
|
|
221
|
+
|
|
222
|
+
# render checkbox HTML.
|
|
223
|
+
img_url = self.blank_url
|
|
224
|
+
@inner_html = [%(<img class="button" src="#{img_url}" />)]
|
|
225
|
+
@inner_html << %(<span #{@label_style}class="label">#{@label}</span>) if @label
|
|
226
|
+
@inner_html = @inner_html.join ''
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
# This renders a group of radio buttons. The buttons are controlled by
|
|
230
|
+
# a RadioGroupView that will map the value to a set of selection states.
|
|
231
|
+
#
|
|
232
|
+
# :values => [REQ]
|
|
233
|
+
# Set this to the values you want displayed in the radio buttons. You
|
|
234
|
+
# can pass an array here of strings or symbols, in which case these will
|
|
235
|
+
# be used as the values for the buttons and the names will be created
|
|
236
|
+
# from them. Or you can pass an array of arrays. The first items is
|
|
237
|
+
# the key value, the second item is the human readable value.
|
|
238
|
+
# Alternatively, you can set the inner_html of your view to include
|
|
239
|
+
# radio buttons as outlets. In this case, you must name the outlets
|
|
240
|
+
# :key_button.
|
|
241
|
+
#
|
|
242
|
+
# :layout => :horizontal | :vertical
|
|
243
|
+
# This will write out horizontal or vertical to the CSS class names so
|
|
244
|
+
# you can control the layout of your radio buttons.
|
|
245
|
+
#
|
|
246
|
+
# :width =>
|
|
247
|
+
# This will set the width of each item in the view.
|
|
248
|
+
#
|
|
249
|
+
# BINDABLE OPTIONS
|
|
250
|
+
#
|
|
251
|
+
# :value =>
|
|
252
|
+
# The current value of the radio buttons.
|
|
253
|
+
#
|
|
254
|
+
view_helper :radio_group_view do
|
|
255
|
+
|
|
256
|
+
#JavaScript
|
|
257
|
+
property :value
|
|
258
|
+
view 'SC.RadioGroupView'
|
|
259
|
+
|
|
260
|
+
# HTML
|
|
261
|
+
|
|
262
|
+
# get the layout mode.
|
|
263
|
+
var :layout, :vertical
|
|
264
|
+
css_class_names << 'sc-radio-group-view'
|
|
265
|
+
css_class_names << @layout if @layout
|
|
266
|
+
|
|
267
|
+
var :tag, 'span'
|
|
268
|
+
|
|
269
|
+
# If a set of values was passed, build the button views automatically.
|
|
270
|
+
var :values
|
|
271
|
+
if @values
|
|
272
|
+
# Get the width styles out of the main style to put into the
|
|
273
|
+
# individual radio items.
|
|
274
|
+
css_styles.flatten!
|
|
275
|
+
@label_styles = css_styles.reject { |p| !(p =~ /width:/) }
|
|
276
|
+
css_styles.reject! { |p| @label_styles.include?(p) }
|
|
277
|
+
|
|
278
|
+
if @label_styles.size > 0
|
|
279
|
+
@label_styles = %( style="#{@label_styles * ' '}" )
|
|
280
|
+
else
|
|
281
|
+
@label_styles = ''
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
# save off client_builder. The context this is run in later will
|
|
285
|
+
# not retain the client_builder
|
|
286
|
+
current_client_builder = self.client_builder
|
|
287
|
+
html = @values.map do | v |
|
|
288
|
+
v = [v].flatten
|
|
289
|
+
key = v.first
|
|
290
|
+
label = (v.size > 1) ? v[1] : key.to_s.humanize
|
|
291
|
+
render_source.radio_view(:outlet => true, :label => label, :style => @label_styles, :toggle_on_value => key, :toggle_off_value => nil, :client => self.client_builder)
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
@inner_html = html * "\n"
|
|
295
|
+
end
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
# Renders a slider view.
|
|
299
|
+
view_helper :slider_view do
|
|
300
|
+
|
|
301
|
+
property :minimum
|
|
302
|
+
property :maximum
|
|
303
|
+
property :step
|
|
304
|
+
view 'SC.SliderView'
|
|
305
|
+
|
|
306
|
+
css_class_names << 'sc-slider-view'
|
|
307
|
+
|
|
308
|
+
@label_style = []
|
|
309
|
+
css_styles.flatten!
|
|
310
|
+
css_styles.reject! do | part |
|
|
311
|
+
if part =~ /width:/
|
|
312
|
+
@label_style << part
|
|
313
|
+
true
|
|
314
|
+
else
|
|
315
|
+
false
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
if @label_style.size > 0
|
|
319
|
+
# subtract the extra space required
|
|
320
|
+
@label_style = @label_style.map { |x| x.gsub(/[0-9]+/,($1.to_i-48).to_s)}
|
|
321
|
+
@label_style = %(style="#{@label_style * ' '}" )
|
|
322
|
+
else
|
|
323
|
+
@label_style = ''
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
@inner_html = %(<span class="outer"><span #{@label_style} class="inner"></span><img src="#{self.blank_url}" class="sc-handle" /></span>)
|
|
327
|
+
|
|
328
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
############################################################
|
|
2
|
+
# COLLECTION VIEW HELPERS
|
|
3
|
+
#
|
|
4
|
+
# Collection views render groups of views such as lists, tables, source lists,
|
|
5
|
+
# grids and so on. The view helpers here will make that easy.
|
|
6
|
+
#
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
require_helpers 'core_views'
|
|
10
|
+
|
|
11
|
+
# Base Helper for a collection view. Many times you will need
|
|
12
|
+
# your collection view to actually appear inside of a scroll_view. If
|
|
13
|
+
# this is the case, just pass :use_scroll_view => true.
|
|
14
|
+
#
|
|
15
|
+
# Note that many of the default views will set this to true by default.
|
|
16
|
+
#
|
|
17
|
+
view_helper :collection_view do
|
|
18
|
+
property :content
|
|
19
|
+
property :selection
|
|
20
|
+
property :toggle, :key => 'useToggleSelection'
|
|
21
|
+
property :selectable, :key => 'isSelectable'
|
|
22
|
+
property :enabled, :key => 'isEnabled'
|
|
23
|
+
property :act_on_select
|
|
24
|
+
property(:example_view) { |v| v }
|
|
25
|
+
property(:example_group_view) { |v| v }
|
|
26
|
+
property :content_value_key
|
|
27
|
+
property :group_visible_key
|
|
28
|
+
property :group_title_key
|
|
29
|
+
property :accepts_first_responder, true
|
|
30
|
+
property :can_reorder_content
|
|
31
|
+
|
|
32
|
+
property :content_icon_key
|
|
33
|
+
|
|
34
|
+
# Unless the developer passes something specific, automatically enable
|
|
35
|
+
# has_content_icon if either icon property is specified.
|
|
36
|
+
var :content_icon_key
|
|
37
|
+
property :has_content_icon, !!@content_icon_key
|
|
38
|
+
|
|
39
|
+
# Unless the developer passes something specific, automatically enable
|
|
40
|
+
# content branc if content_is_branch_property is defined.
|
|
41
|
+
var :content_is_branch_key
|
|
42
|
+
property :content_is_branch_key
|
|
43
|
+
property :has_content_branch, !!@content_is_branch_key
|
|
44
|
+
|
|
45
|
+
property :content_unread_count_key
|
|
46
|
+
property :content_action_key
|
|
47
|
+
|
|
48
|
+
property(:group, :key => 'groupBy') do |v|
|
|
49
|
+
"['#{Array(v) * "','" }']"
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
property(:action) { |v| "function(ev) { return #{v}(this, ev); }" }
|
|
53
|
+
view 'SC.CollectionView'
|
|
54
|
+
|
|
55
|
+
css_class_names << 'sc-collection-view'
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
view_helper :list_view, :extends => :collection_view do
|
|
59
|
+
property :row_height
|
|
60
|
+
view 'SC.ListView'
|
|
61
|
+
css_class_names << 'sc-list-view'
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
view_helper :grid_view, :extends => :collection_view do
|
|
65
|
+
property :row_height
|
|
66
|
+
property :column_width
|
|
67
|
+
view 'SC.GridView'
|
|
68
|
+
css_class_names << 'sc-grid-view'
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
view_helper :source_list_view, :extends => :collection_view do
|
|
72
|
+
view 'SC.SourceListView'
|
|
73
|
+
css_class_names << 'sc-source-list-view'
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
view_helper :table_view, :extends => :collection_view do
|
|
77
|
+
view 'SC.TableView'
|
|
78
|
+
css_class_names << 'sc-table-view'
|
|
79
|
+
end
|
|
80
|
+
|