sproutcore 1.5.0.pre.4 → 1.5.0.pre.4.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +6 -0
- data/VERSION.yml +1 -1
- data/lib/Buildfile +1 -1
- data/lib/buildtasks/build.rake +14 -6
- data/lib/buildtasks/manifest.rake +171 -72
- data/lib/frameworks/sproutcore/Buildfile +3 -5
- data/lib/frameworks/sproutcore/CHANGELOG.md +9 -0
- data/lib/frameworks/sproutcore/apps/test_controls/resources/main_page.js +2 -1
- data/lib/frameworks/sproutcore/apps/test_controls/resources/progress_page.js +7 -17
- data/lib/frameworks/sproutcore/frameworks/bootstrap/system/browser.js +7 -1
- data/lib/frameworks/sproutcore/frameworks/bootstrap/system/loader.js +14 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/browser.js +0 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/event.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/root_responder.js +14 -3
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template/collection.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +6 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/scrollable.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/alert.js +49 -4
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/menu.js +8 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/panel.js +46 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/button.js +32 -5
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/checkbox.js +32 -6
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/disclosure.js +31 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/progress.js +15 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/radio.js +28 -7
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segmented.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/slider.js +20 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/well.js +2 -4
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +40 -34
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/ui.js +35 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/ui.js +43 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/ui.js +47 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +6 -16
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/ui.js +21 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/disclosure/ui.js +41 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +128 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/radio/ui.js +93 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/ui.js +13 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroller.js +28 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/methods.js +47 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +51 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/toolbar/method.js +33 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/toolbar/ui.js +29 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +28 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/disclosure.js +9 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/views/list_item.js +148 -134
- data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +18 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_scroll.js +30 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/views/progress.js +9 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/radio.js +52 -4
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll.js +2 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scroller.js +36 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/views/segmented.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/views/slider.js +9 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/views/split.js +15 -4
- data/lib/frameworks/sproutcore/frameworks/desktop/views/split_divider.js +1 -6
- data/lib/frameworks/sproutcore/frameworks/desktop/views/tab.js +4 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/views/toolbar.js +7 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/well.js +1 -2
- data/lib/frameworks/sproutcore/frameworks/forms/views/form.js +3 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/bootstrap.rhtml +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_resize.js +0 -9
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/editable.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/flowed_layout.js +2 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/canvas_image.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/label.js +25 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/system/chance.js +64 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/system/module.js +34 -27
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/editable/ui.js +42 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/ui.js +62 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/image/ui.js +0 -8
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/label/ui.js +12 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +48 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/views/field.js +19 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/views/image.js +2 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/views/label.js +11 -5
- data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +152 -74
- data/lib/frameworks/sproutcore/frameworks/runtime/private/observer_queue.js +12 -9
- data/lib/frameworks/sproutcore/frameworks/runtime/system/logger.js +1476 -176
- data/lib/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +0 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/logger.js +227 -32
- data/lib/frameworks/sproutcore/frameworks/statechart/system/state.js +11 -11
- data/lib/frameworks/sproutcore/frameworks/statechart/system/statechart.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/testing/system/runner.js +10 -0
- data/lib/frameworks/sproutcore/lib/index.rhtml +30 -8
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/18px/segmented.css +4 -4
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented.css +4 -4
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented.css +4 -4
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/44px/segmented.css +4 -4
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/segmented.css +4 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/slider.css +5 -1
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/slider.js +11 -3
- data/lib/frameworks/sproutcore/themes/ace/resources/well/well.css +7 -8
- data/lib/frameworks/sproutcore/themes/ace/resources/well/well.js +2 -4
- data/lib/gen/app/templates/apps/@target_name@/Buildfile +14 -0
- data/lib/gen/app/templates/apps/@target_name@/theme.js +27 -0
- data/lib/gen/html_app/templates/apps/@target_name@/resources/stylesheets/@target_name@.css +4 -0
- data/lib/gen/project/templates/@filename@/Buildfile +7 -2
- data/lib/gen/theme/templates/themes/@target_name@/Buildfile +3 -0
- data/lib/gen/theme/templates/themes/@target_name@/theme.js +23 -0
- data/lib/sproutcore/builders.rb +2 -0
- data/lib/sproutcore/builders/chance.rb +64 -0
- data/lib/sproutcore/builders/chance_file.rb +59 -0
- data/lib/sproutcore/builders/combine.rb +0 -45
- data/lib/sproutcore/builders/html.rb +1 -1
- data/lib/sproutcore/builders/minify.rb +5 -17
- data/lib/sproutcore/builders/module.rb +2 -2
- data/lib/sproutcore/builders/string_wrapper.rb +13 -15
- data/lib/sproutcore/helpers.rb +1 -1
- data/lib/sproutcore/helpers/minifier.rb +56 -0
- data/lib/sproutcore/helpers/static_helper.rb +86 -40
- data/lib/sproutcore/models/generator.rb +16 -0
- data/lib/sproutcore/models/manifest_entry.rb +8 -1
- data/lib/sproutcore/models/target.rb +101 -33
- data/lib/sproutcore/tools.rb +0 -7
- data/lib/sproutcore/tools/build.rb +2 -37
- data/spec/buildtasks/manifest/prepare_build_tasks/chance_spec.rb +100 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/combine_spec.rb +86 -9
- data/spec/buildtasks/manifest/prepare_build_tasks/css_spec.rb +1 -1
- data/spec/buildtasks/manifest/prepare_build_tasks/minify_spec.rb +1 -1
- data/spec/buildtasks/manifest/prepare_build_tasks/module_info_spec.rb +96 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/module_spec.rb +83 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/packed_spec.rb +37 -4
- data/spec/buildtasks/manifest/spec_helper.rb +4 -0
- data/spec/fixtures/builder_tests/Buildfile +11 -9
- data/spec/fixtures/builder_tests/apps/chance_test/Buildfile +14 -0
- data/spec/fixtures/builder_tests/apps/chance_test/core.js +27 -0
- data/spec/fixtures/builder_tests/apps/chance_test/main.js +30 -0
- data/spec/fixtures/builder_tests/apps/chance_test/resources/demo.css +6 -0
- data/spec/fixtures/builder_tests/apps/chance_test/resources/last_file.css +7 -0
- data/spec/fixtures/builder_tests/apps/chance_test/resources/loading.rhtml +9 -0
- data/spec/fixtures/builder_tests/apps/chance_test/resources/main_page.js +24 -0
- data/spec/fixtures/builder_tests/apps/chance_test/resources/z_first_file.css +6 -0
- data/spec/fixtures/builder_tests/apps/chance_test/theme.js +27 -0
- data/spec/fixtures/builder_tests/apps/module_test/module.js +1 -0
- data/spec/fixtures/builder_tests/apps/module_test/modules/deferred_module/english.lproj/req_style_2.css +0 -0
- data/spec/fixtures/builder_tests/apps/module_test/modules/deferred_module/english.lproj/test.rhtml +1 -0
- data/spec/fixtures/builder_tests/apps/module_test/modules/deferred_module/javascript.js +1 -0
- data/spec/fixtures/builder_tests/apps/module_test/modules/deferred_module/lib/alt_layout.rhtml +0 -0
- data/spec/fixtures/builder_tests/apps/module_test/modules/deferred_module/req_js_2.js +0 -0
- data/spec/fixtures/builder_tests/apps/module_test/modules/dynamic_req_target_1/dynamic_req_js_1.js +0 -0
- data/spec/fixtures/builder_tests/apps/module_test/modules/dynamic_req_target_1/english.lproj/dynamic_req_style_1.css +0 -0
- data/spec/fixtures/builder_tests/apps/module_test/modules/inlined_module/README +0 -0
- data/spec/fixtures/builder_tests/apps/module_test/modules/required_target/english.lproj/req_style_1.css +0 -0
- data/spec/fixtures/builder_tests/apps/module_test/modules/required_target/english.lproj/strings.js +4 -0
- data/spec/fixtures/builder_tests/apps/module_test/modules/required_target/english.lproj/test.rhtml +1 -0
- data/spec/fixtures/builder_tests/apps/module_test/modules/required_target/req_js_1.js +0 -0
- data/spec/fixtures/helper_tests/apps/minifier_test/core.js +8 -0
- data/spec/fixtures/real_world/Buildfile +11 -1
- data/spec/fixtures/real_world/apps/account/modules/preferences/README +0 -0
- data/spec/fixtures/real_world/apps/calendar/modules/preferences/README +0 -0
- data/spec/fixtures/real_world/apps/contacts/modules/preferences/README +0 -0
- data/spec/fixtures/real_world/apps/contacts/modules/printing/README +0 -0
- data/spec/fixtures/real_world/apps/mail/modules/preferences/README +0 -0
- data/spec/fixtures/real_world/apps/mail/modules/printing/README +0 -0
- data/spec/fixtures/real_world/apps/photos/modules/email/README +0 -0
- data/spec/fixtures/real_world/apps/photos/modules/preferences/README +0 -0
- data/spec/lib/builders/chance_file_spec.rb +63 -0
- data/spec/lib/builders/chance_spec.rb +81 -0
- data/spec/lib/builders/module_spec.rb +133 -0
- data/spec/lib/helpers/minifier.rb +31 -0
- data/spec/lib/models/project/find_targets_for_spec.rb +1 -1
- data/vendor/chance/lib/chance/imagers/data_url.rb +68 -17
- data/vendor/chance/lib/chance/instance.rb +55 -30
- data/vendor/chance/lib/chance/parser.rb +1 -1
- data/vendor/chance/lib/chance/slicing.rb +39 -3
- metadata +52 -7
- data/lib/frameworks/sproutcore/frameworks/foundation/system/logger.js +0 -163
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/logger.js +0 -44
- data/spec/buildtasks/manifest/prepare_build_tasks/bundle_spec.rb +0 -254
- data/spec/fixtures/builder_tests/apps/bundle_test/bundle.js +0 -1
- data/spec/lib/builders/bundle_spec.rb +0 -295
@@ -29,15 +29,28 @@ SC.BaseTheme.checkboxRenderDelegate = SC.RenderDelegate.create({
|
|
29
29
|
name: 'checkbox',
|
30
30
|
|
31
31
|
render: function(dataSource, context) {
|
32
|
-
var theme = dataSource.get('theme')
|
33
|
-
|
32
|
+
var theme = dataSource.get('theme'),
|
33
|
+
view = dataSource.get('view'),
|
34
|
+
ariaLabel,ariaLabeledBy;
|
35
|
+
|
36
|
+
if(view) {
|
37
|
+
ariaLabel = view.get('ariaLabel');
|
38
|
+
ariaLabeledBy = view.get('ariaLabeledBy');
|
39
|
+
}
|
40
|
+
|
34
41
|
var isSelected = dataSource.get('isSelected') || NO;
|
35
42
|
var isActive = dataSource.get('isActive');
|
36
43
|
var isDisabled = !dataSource.get('isEnabled');
|
37
44
|
|
38
45
|
context.attr('role', 'checkbox');
|
39
46
|
context.attr('aria-checked', isSelected.toString());
|
40
|
-
|
47
|
+
if(ariaLabeledBy && ariaLabeledBy !== "") {
|
48
|
+
context.attr('aria-labelledby', ariaLabeledBy);
|
49
|
+
}
|
50
|
+
if(ariaLabel && ariaLabel !== "") {
|
51
|
+
context.attr('aria-label', ariaLabel);
|
52
|
+
}
|
53
|
+
|
41
54
|
context.setClass({
|
42
55
|
'sel': isSelected,
|
43
56
|
'active': isActive,
|
@@ -52,15 +65,28 @@ SC.BaseTheme.checkboxRenderDelegate = SC.RenderDelegate.create({
|
|
52
65
|
},
|
53
66
|
|
54
67
|
update: function(dataSource, jquery) {
|
55
|
-
var theme = dataSource.get('theme')
|
56
|
-
|
68
|
+
var theme = dataSource.get('theme'),
|
69
|
+
view = dataSource.get('view'),
|
70
|
+
ariaLabel,ariaLabeledBy;
|
71
|
+
|
72
|
+
if(view) {
|
73
|
+
ariaLabel = view.get('ariaLabel');
|
74
|
+
ariaLabeledBy = view.get('ariaLabeledBy');
|
75
|
+
}
|
76
|
+
|
57
77
|
var isSelected = dataSource.get('isSelected');
|
58
78
|
var isActive = dataSource.get('isActive');
|
59
79
|
var isDisabled = !dataSource.get('isEnabled');
|
60
80
|
|
61
81
|
// address accessibility
|
62
82
|
jquery.attr('aria-checked', isSelected.toString());
|
63
|
-
|
83
|
+
if(ariaLabeledBy && ariaLabeledBy !== "") {
|
84
|
+
jquery.attr('aria-labelledby', ariaLabeledBy);
|
85
|
+
}
|
86
|
+
if(ariaLabel && ariaLabel !== "") {
|
87
|
+
jquery.attr('aria-label', ariaLabel);
|
88
|
+
}
|
89
|
+
|
64
90
|
theme.labelRenderDelegate.update(dataSource, jquery.find('span.label'));
|
65
91
|
|
66
92
|
// add class names
|
@@ -9,8 +9,22 @@ SC.BaseTheme.disclosureRenderDelegate = SC.RenderDelegate.create({
|
|
9
9
|
name: 'disclosure',
|
10
10
|
|
11
11
|
render: function(dataSource, context) {
|
12
|
-
var theme = dataSource.get('theme')
|
13
|
-
|
12
|
+
var theme = dataSource.get('theme'),
|
13
|
+
value = dataSource.get('value'),
|
14
|
+
title = dataSource.get('title'),
|
15
|
+
view = dataSource.get('view'),
|
16
|
+
ariaLabel;
|
17
|
+
|
18
|
+
if(view) {
|
19
|
+
ariaLabel = view.get('ariaLabel');
|
20
|
+
}
|
21
|
+
|
22
|
+
//addresing accessibility
|
23
|
+
context.attr('aria-expanded', value);
|
24
|
+
if(ariaLabel && ariaLabel !== ""){
|
25
|
+
context.attr('aria-label', ariaLabel);
|
26
|
+
}
|
27
|
+
|
14
28
|
if (dataSource.get('isSelected')) context.addClass('sel');
|
15
29
|
|
16
30
|
var state = '';
|
@@ -25,7 +39,21 @@ SC.BaseTheme.disclosureRenderDelegate = SC.RenderDelegate.create({
|
|
25
39
|
},
|
26
40
|
|
27
41
|
update: function(dataSource, jquery) {
|
28
|
-
var theme = dataSource.get('theme')
|
42
|
+
var theme = dataSource.get('theme'),
|
43
|
+
value = dataSource.get('value'),
|
44
|
+
title = dataSource.get('title'),
|
45
|
+
view = dataSource.get('view'),
|
46
|
+
ariaLabel;
|
47
|
+
|
48
|
+
if(view) {
|
49
|
+
ariaLabel = view.get('ariaLabel');
|
50
|
+
}
|
51
|
+
|
52
|
+
//addresing accessibility
|
53
|
+
jquery.attr('aria-expanded', value);
|
54
|
+
if(ariaLabel && ariaLabel !== ""){
|
55
|
+
jquery.attr('aria-label', ariaLabel);
|
56
|
+
}
|
29
57
|
|
30
58
|
if (dataSource.get('isSelected')) jquery.addClass('sel');
|
31
59
|
|
@@ -42,7 +42,10 @@ SC.BaseTheme.PROGRESS_OFFSET_RANGE = 24;
|
|
42
42
|
*/
|
43
43
|
SC.BaseTheme.progressRenderDelegate = SC.RenderDelegate.create({
|
44
44
|
render: function(dataSource, context) {
|
45
|
-
var theme
|
45
|
+
var theme = dataSource.get('theme'),
|
46
|
+
valueMax = dataSource.get('maximum'),
|
47
|
+
valueMin = dataSource.get('minimum'),
|
48
|
+
valueNow = dataSource.get('value');
|
46
49
|
|
47
50
|
var inner, animatedBackground, value = dataSource.get('value') * 100,
|
48
51
|
cssString, backPosition,
|
@@ -52,6 +55,12 @@ SC.BaseTheme.progressRenderDelegate = SC.RenderDelegate.create({
|
|
52
55
|
offsetRange = theme.PROGRESS_OFFSET_RANGE,
|
53
56
|
offset = (isIndeterminate && isRunning) ?
|
54
57
|
(Math.floor(Date.now()/75)%offsetRange-offsetRange) : 0;
|
58
|
+
|
59
|
+
//addressing accessibility
|
60
|
+
context.attr('aria-valuemax', valueMax);
|
61
|
+
context.attr('aria-valuemin', valueMin);
|
62
|
+
context.attr('aria-valuenow', valueNow);
|
63
|
+
context.attr('aria-valuetext', valueNow);
|
55
64
|
|
56
65
|
// offsetRange from dataSource only supported for backwards-compatibility
|
57
66
|
if (dataSource.get('offsetRange')) {
|
@@ -93,7 +102,8 @@ SC.BaseTheme.progressRenderDelegate = SC.RenderDelegate.create({
|
|
93
102
|
|
94
103
|
update: function(dataSource, $) {
|
95
104
|
|
96
|
-
var theme
|
105
|
+
var theme = dataSource.get('theme'),
|
106
|
+
valueNow = dataSource.get('value');
|
97
107
|
|
98
108
|
var inner, value, cssString, backPosition,
|
99
109
|
animatedBackground = theme.PROGRESS_ANIMATED_BACKGROUND_MATRIX,
|
@@ -119,7 +129,9 @@ SC.BaseTheme.progressRenderDelegate = SC.RenderDelegate.create({
|
|
119
129
|
'sc-complete': (value >= 100)
|
120
130
|
};
|
121
131
|
|
122
|
-
|
132
|
+
//addressing accessibility
|
133
|
+
$.attr('aria-valuenow', valueNow);
|
134
|
+
$.attr('aria-valuetext', valueNow);
|
123
135
|
|
124
136
|
$.setClass(classNames);
|
125
137
|
inner = $.find('.sc-inner');
|
@@ -32,18 +32,29 @@ SC.BaseTheme.radioRenderDelegate = SC.RenderDelegate.create({
|
|
32
32
|
var theme = dataSource.get('theme');
|
33
33
|
|
34
34
|
var isSelected = dataSource.get('isSelected'),
|
35
|
-
width = dataSource.get('width')
|
36
|
-
|
35
|
+
width = dataSource.get('width'),
|
36
|
+
title = dataSource.get('title'),
|
37
|
+
value = dataSource.get('value'),
|
38
|
+
ariaLabeledBy = dataSource.get('ariaLabeledBy'),
|
39
|
+
ariaLabel = dataSource.get('ariaLabel');
|
40
|
+
|
37
41
|
context.setClass({
|
38
42
|
active: dataSource.get('isActive'),
|
39
43
|
mixed: dataSource.get('isMixed'),
|
40
44
|
sel: dataSource.get('isSelected'),
|
41
45
|
disabled: !dataSource.get('isEnabled')
|
42
46
|
});
|
43
|
-
|
47
|
+
|
48
|
+
//accessing accessibility
|
44
49
|
context.attr('role', 'radio');
|
45
50
|
context.attr('aria-checked', isSelected);
|
46
|
-
|
51
|
+
if(ariaLabel && ariaLabel !== "") {
|
52
|
+
context.attr('aria-label', ariaLabel);
|
53
|
+
}
|
54
|
+
if(ariaLabeledBy && ariaLabeledBy !== "") {
|
55
|
+
context.attr('aria-labelledby', ariaLabeledBy);
|
56
|
+
}
|
57
|
+
|
47
58
|
if (width) context.css('width', width);
|
48
59
|
|
49
60
|
context.push('<span class = "button"></span>');
|
@@ -56,8 +67,13 @@ SC.BaseTheme.radioRenderDelegate = SC.RenderDelegate.create({
|
|
56
67
|
update: function(dataSource, jquery) {
|
57
68
|
var theme = dataSource.get('theme');
|
58
69
|
|
59
|
-
var isSelected = dataSource.get('isSelected'),
|
60
|
-
|
70
|
+
var isSelected = dataSource.get('isSelected'),
|
71
|
+
width = dataSource.get('width'),
|
72
|
+
title = dataSource.get('title'),
|
73
|
+
value = dataSource.get('value'),
|
74
|
+
ariaLabeledBy = dataSource.get('ariaLabeledBy'),
|
75
|
+
ariaLabel = dataSource.get('ariaLabel');
|
76
|
+
|
61
77
|
jquery.setClass({
|
62
78
|
active: dataSource.get('isActive'),
|
63
79
|
mixed: dataSource.get('isMixed'),
|
@@ -66,7 +82,12 @@ SC.BaseTheme.radioRenderDelegate = SC.RenderDelegate.create({
|
|
66
82
|
});
|
67
83
|
|
68
84
|
jquery.attr('aria-checked', isSelected);
|
69
|
-
|
85
|
+
if(ariaLabel !== ""){
|
86
|
+
jquery.attr('aria-label', ariaLabel);
|
87
|
+
}
|
88
|
+
if(ariaLabeledBy !== "") {
|
89
|
+
jquery.attr('aria-labelledby', ariaLabeledBy);
|
90
|
+
}
|
70
91
|
jquery.css('width', width ? width : null);
|
71
92
|
|
72
93
|
theme.labelRenderDelegate.update(dataSource, jquery.find('.sc-button-label'));
|
@@ -21,19 +21,38 @@ SC.BaseTheme.sliderRenderDelegate = SC.RenderDelegate.create({
|
|
21
21
|
name: 'slider',
|
22
22
|
|
23
23
|
render: function(dataSource, context) {
|
24
|
-
var blankImage
|
24
|
+
var blankImage = SC.BLANK_IMAGE_URL,
|
25
|
+
valueMax = dataSource.get('maximum'),
|
26
|
+
valueMin = dataSource.get('minimum'),
|
27
|
+
valueNow = dataSource.get('value');
|
28
|
+
|
25
29
|
context.push('<span class="sc-inner">',
|
26
30
|
'<span class="sc-leftcap"></span>',
|
27
31
|
'<span class="sc-rightcap"></span>',
|
28
32
|
'<img src="', blankImage,
|
29
33
|
'" class="sc-handle" style="left: ', dataSource.get('value'), '%" />',
|
30
34
|
'</span>');
|
35
|
+
|
36
|
+
//addressing accessibility
|
37
|
+
context.attr('aria-valuemax', valueMax);
|
38
|
+
context.attr('aria-valuemin', valueMin);
|
39
|
+
context.attr('aria-valuenow', valueNow);
|
40
|
+
context.attr('aria-valuetext', valueNow);
|
41
|
+
context.attr('aria-orientation', 'horizontal');
|
42
|
+
|
31
43
|
},
|
32
44
|
|
33
45
|
update: function(dataSource, jquery) {
|
46
|
+
|
47
|
+
var valueNow = dataSource.get('value');
|
48
|
+
|
34
49
|
if (dataSource.didChangeFor('sliderRenderDelegate', 'value')) {
|
35
50
|
jquery.find(".sc-handle").css('left', dataSource.get('value') + "%");
|
36
51
|
}
|
52
|
+
|
53
|
+
//addressing accessibility
|
54
|
+
jquery.attr('aria-valuenow', valueNow);
|
55
|
+
jquery.attr('aria-valuetext', valueNow);
|
37
56
|
}
|
38
57
|
|
39
58
|
});
|
@@ -5,11 +5,9 @@
|
|
5
5
|
// License: Licensed under MIT license (see license.js)
|
6
6
|
// ==========================================================================
|
7
7
|
|
8
|
-
SC.BaseTheme.Well = SC.BaseTheme.subtheme('well');
|
9
|
-
|
10
8
|
// the 'well'-styled container
|
11
|
-
SC.BaseTheme.
|
12
|
-
name: '
|
9
|
+
SC.BaseTheme.wellRenderDelegate = SC.Object.create({
|
10
|
+
name: 'well',
|
13
11
|
|
14
12
|
render: function(dataSource, context) {
|
15
13
|
context.push("<div class='top-left-edge'></div>",
|
@@ -116,37 +116,43 @@ test("AlertPane.info with icon, message, description, caption and 1 button (pass
|
|
116
116
|
pane.dismiss();
|
117
117
|
});
|
118
118
|
|
119
|
-
test("
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
}
|
119
|
+
test("Alert pane should have role as alertdialog", function() {
|
120
|
+
pane = SC.AlertPane.info("AlertPane.message", 'AlertPane.description', 'AlertPane.caption', null, null, null, this);
|
121
|
+
equals(pane.$().attr('role'), 'alertdialog', 'Alert pane should have role as alertdialog');
|
122
|
+
pane.dismiss();
|
123
|
+
});
|
124
|
+
|
125
|
+
// test("users interaction with mutiple alert panes with 1-3 buttons", function() {
|
126
|
+
//
|
127
|
+
// var delegate = SC.Object.create({
|
128
|
+
//
|
129
|
+
// threeButtonAlertPane: function() {
|
130
|
+
// pane = SC.AlertPane.warn("AlertPane.warn title", 'Click OK to see this alert pane again. \nClick Other... to see other alert panes.', 'Click cancel to dismiss.', "OK", "Cancel", 'Other...', this);
|
131
|
+
// },
|
132
|
+
//
|
133
|
+
// twoButtonAlertPane: function() {
|
134
|
+
// pane = SC.AlertPane.error("AlertPane.error title", 'Click OK to see one button alert pane.', 'Click cancel to dismiss.', "OK", "Cancel", delegate);
|
135
|
+
// },
|
136
|
+
//
|
137
|
+
// oneButtonAlertPane: function() {
|
138
|
+
// pane = SC.AlertPane.info("AlertPane.info title", 'Click OK to dismiss.', delegate);
|
139
|
+
// },
|
140
|
+
//
|
141
|
+
// alertPaneDidDismiss: function(alert, status) {
|
142
|
+
// //console.log("%@.alertDidDismiss - %@".fmt(alert, status));
|
143
|
+
// switch(status) {
|
144
|
+
// case SC.BUTTON1_STATUS:
|
145
|
+
// if(alert.icon && alert.icon.indexOf('alert')!=-1) this.invokeLater(this.threeButtonAlertPane, 1000);
|
146
|
+
// if(alert.icon && alert.icon.indexOf('error')!=-1) this.oneButtonAlertPane();
|
147
|
+
// break;
|
148
|
+
// case SC.BUTTON3_STATUS:
|
149
|
+
// this.twoButtonAlertPane();
|
150
|
+
// break;
|
151
|
+
// }
|
152
|
+
// }
|
153
|
+
// });
|
154
|
+
//
|
155
|
+
// SC.RunLoop.begin();
|
156
|
+
// delegate.threeButtonAlertPane();
|
157
|
+
// SC.RunLoop.end();
|
158
|
+
// }) ;
|
@@ -221,3 +221,38 @@ test('Automatic Closing', function() {
|
|
221
221
|
ok(!menu.get('isVisibleInWindow'), 'menu should close if anywhere other than a menu item is clicked');
|
222
222
|
});
|
223
223
|
|
224
|
+
test('aria-role attribute', function() {
|
225
|
+
var menuPane = SC.MenuPane.create({
|
226
|
+
layout: { width: 200 },
|
227
|
+
items: items,
|
228
|
+
itemCheckboxKey: 'isChecked'
|
229
|
+
}), menuItems,normalItem, itemWithCheckBox, separatorItem;
|
230
|
+
menuPane.popup();
|
231
|
+
|
232
|
+
equals(menuPane.$().attr('role'), 'menu', "menu pane should have role set");
|
233
|
+
|
234
|
+
menuItems = menuPane.get('menuItemViews');
|
235
|
+
normalItem = menuItems[0];
|
236
|
+
itemWithCheckBox = menuItems[1];
|
237
|
+
separatorItem = menuItems[3];
|
238
|
+
|
239
|
+
equals(normalItem.$().attr('role'), 'menuitem', "normal menuitem has correct role set");
|
240
|
+
equals(itemWithCheckBox.$().attr('role'), 'menuitemcheckbox', "menuitem with checkbox has correct role set");
|
241
|
+
equals(separatorItem.$().attr('role'), 'separator', "separator menuitem has correct role set");
|
242
|
+
clickOn(menuPane);
|
243
|
+
});
|
244
|
+
|
245
|
+
test('aria-checked attribute', function() {
|
246
|
+
var menuPane = SC.MenuPane.create({
|
247
|
+
layout: { width: 200 },
|
248
|
+
items: items,
|
249
|
+
itemCheckboxKey: 'isChecked'
|
250
|
+
}),itemWithCheckBox;
|
251
|
+
menuPane.popup();
|
252
|
+
|
253
|
+
itemWithCheckBox = menuPane.get('menuItemViews')[1];
|
254
|
+
|
255
|
+
equals(itemWithCheckBox.$().attr('aria-checked'), "true", "checked menuitem has aria-checked attribute set");
|
256
|
+
clickOn(menuPane);
|
257
|
+
});
|
258
|
+
|
@@ -38,3 +38,46 @@ test("verify panel content container is visible at correct location with right s
|
|
38
38
|
pane.remove();
|
39
39
|
}) ;
|
40
40
|
|
41
|
+
test("Verify panel pane has aria role set", function() {
|
42
|
+
var pane = SC.PanelPane.create({
|
43
|
+
layout: { width: 400, height: 200, centerX: 0, centerY: 0 },
|
44
|
+
contentView: SC.View.extend({
|
45
|
+
})
|
46
|
+
});
|
47
|
+
pane.append();
|
48
|
+
|
49
|
+
equals(pane.$().attr('role'), 'dialog', "panel pane has role attribute set");
|
50
|
+
|
51
|
+
pane.remove();
|
52
|
+
|
53
|
+
});
|
54
|
+
|
55
|
+
test("Verify panel pane has aria-labelledby attribute set, when ariaLabeledBy is provided", function() {
|
56
|
+
var pane = SC.PanelPane.create({
|
57
|
+
layout: { width: 400, height: 200, centerX: 0, centerY: 0 },
|
58
|
+
contentView: SC.View.extend({
|
59
|
+
}),
|
60
|
+
ariaLabeledBy: "Panel is labelled by this value for voiceover"
|
61
|
+
});
|
62
|
+
pane.append();
|
63
|
+
|
64
|
+
equals(pane.$().attr('aria-labelledby'), 'Panel is labelled by this value for voiceover', "panel pane has aria-labelledby attribute set");
|
65
|
+
|
66
|
+
pane.remove();
|
67
|
+
|
68
|
+
});
|
69
|
+
|
70
|
+
test("Verify panel pane has aria-describedby attribute set, when ariaDescribedBy is provided", function() {
|
71
|
+
var pane = SC.PanelPane.create({
|
72
|
+
layout: { width: 400, height: 200, centerX: 0, centerY: 0 },
|
73
|
+
contentView: SC.View.extend({
|
74
|
+
}),
|
75
|
+
ariaDescribedBy: "Panel is described by this value for voiceover"
|
76
|
+
});
|
77
|
+
pane.append();
|
78
|
+
|
79
|
+
equals(pane.$().attr('aria-describedby'), 'Panel is described by this value for voiceover', "panel pane has aria-describedby attribute set");
|
80
|
+
|
81
|
+
pane.remove();
|
82
|
+
|
83
|
+
});
|