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.
Files changed (174) hide show
  1. data/CHANGELOG +6 -0
  2. data/VERSION.yml +1 -1
  3. data/lib/Buildfile +1 -1
  4. data/lib/buildtasks/build.rake +14 -6
  5. data/lib/buildtasks/manifest.rake +171 -72
  6. data/lib/frameworks/sproutcore/Buildfile +3 -5
  7. data/lib/frameworks/sproutcore/CHANGELOG.md +9 -0
  8. data/lib/frameworks/sproutcore/apps/test_controls/resources/main_page.js +2 -1
  9. data/lib/frameworks/sproutcore/apps/test_controls/resources/progress_page.js +7 -17
  10. data/lib/frameworks/sproutcore/frameworks/bootstrap/system/browser.js +7 -1
  11. data/lib/frameworks/sproutcore/frameworks/bootstrap/system/loader.js +14 -1
  12. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/browser.js +0 -2
  13. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/event.js +1 -1
  14. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/root_responder.js +14 -3
  15. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template/collection.js +1 -1
  16. data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +2 -2
  17. data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +6 -0
  18. data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +1 -1
  19. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/scrollable.js +1 -1
  20. data/lib/frameworks/sproutcore/frameworks/desktop/panes/alert.js +49 -4
  21. data/lib/frameworks/sproutcore/frameworks/desktop/panes/menu.js +8 -0
  22. data/lib/frameworks/sproutcore/frameworks/desktop/panes/panel.js +46 -1
  23. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/button.js +32 -5
  24. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/checkbox.js +32 -6
  25. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/disclosure.js +31 -3
  26. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/progress.js +15 -3
  27. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/radio.js +28 -7
  28. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segmented.js +1 -1
  29. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/slider.js +20 -1
  30. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/well.js +2 -4
  31. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +40 -34
  32. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/ui.js +35 -0
  33. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/ui.js +43 -0
  34. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/ui.js +47 -0
  35. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +6 -16
  36. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/ui.js +21 -0
  37. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/disclosure/ui.js +41 -1
  38. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +128 -0
  39. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/radio/ui.js +93 -3
  40. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/ui.js +13 -1
  41. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroller.js +28 -0
  42. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/methods.js +47 -0
  43. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +51 -0
  44. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/toolbar/method.js +33 -0
  45. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/toolbar/ui.js +29 -0
  46. data/lib/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +28 -0
  47. data/lib/frameworks/sproutcore/frameworks/desktop/views/disclosure.js +9 -1
  48. data/lib/frameworks/sproutcore/frameworks/desktop/views/list_item.js +148 -134
  49. data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +18 -0
  50. data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_scroll.js +30 -3
  51. data/lib/frameworks/sproutcore/frameworks/desktop/views/progress.js +9 -0
  52. data/lib/frameworks/sproutcore/frameworks/desktop/views/radio.js +52 -4
  53. data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll.js +2 -1
  54. data/lib/frameworks/sproutcore/frameworks/desktop/views/scroller.js +36 -3
  55. data/lib/frameworks/sproutcore/frameworks/desktop/views/segmented.js +1 -1
  56. data/lib/frameworks/sproutcore/frameworks/desktop/views/slider.js +9 -1
  57. data/lib/frameworks/sproutcore/frameworks/desktop/views/split.js +15 -4
  58. data/lib/frameworks/sproutcore/frameworks/desktop/views/split_divider.js +1 -6
  59. data/lib/frameworks/sproutcore/frameworks/desktop/views/tab.js +4 -2
  60. data/lib/frameworks/sproutcore/frameworks/desktop/views/toolbar.js +7 -0
  61. data/lib/frameworks/sproutcore/frameworks/desktop/views/well.js +1 -2
  62. data/lib/frameworks/sproutcore/frameworks/forms/views/form.js +3 -1
  63. data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/bootstrap.rhtml +1 -1
  64. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_resize.js +0 -9
  65. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/editable.js +1 -1
  66. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/flowed_layout.js +2 -0
  67. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/canvas_image.js +1 -1
  68. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/label.js +25 -1
  69. data/lib/frameworks/sproutcore/frameworks/foundation/system/chance.js +64 -0
  70. data/lib/frameworks/sproutcore/frameworks/foundation/system/module.js +34 -27
  71. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/editable/ui.js +42 -0
  72. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/ui.js +62 -0
  73. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/image/ui.js +0 -8
  74. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/label/ui.js +12 -0
  75. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +48 -1
  76. data/lib/frameworks/sproutcore/frameworks/foundation/views/field.js +19 -0
  77. data/lib/frameworks/sproutcore/frameworks/foundation/views/image.js +2 -0
  78. data/lib/frameworks/sproutcore/frameworks/foundation/views/label.js +11 -5
  79. data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +152 -74
  80. data/lib/frameworks/sproutcore/frameworks/runtime/private/observer_queue.js +12 -9
  81. data/lib/frameworks/sproutcore/frameworks/runtime/system/logger.js +1476 -176
  82. data/lib/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +0 -2
  83. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/logger.js +227 -32
  84. data/lib/frameworks/sproutcore/frameworks/statechart/system/state.js +11 -11
  85. data/lib/frameworks/sproutcore/frameworks/statechart/system/statechart.js +1 -1
  86. data/lib/frameworks/sproutcore/frameworks/testing/system/runner.js +10 -0
  87. data/lib/frameworks/sproutcore/lib/index.rhtml +30 -8
  88. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/18px/segmented.css +4 -4
  89. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented.css +4 -4
  90. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented.css +4 -4
  91. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/44px/segmented.css +4 -4
  92. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/segmented.css +4 -0
  93. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/slider.css +5 -1
  94. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/slider.js +11 -3
  95. data/lib/frameworks/sproutcore/themes/ace/resources/well/well.css +7 -8
  96. data/lib/frameworks/sproutcore/themes/ace/resources/well/well.js +2 -4
  97. data/lib/gen/app/templates/apps/@target_name@/Buildfile +14 -0
  98. data/lib/gen/app/templates/apps/@target_name@/theme.js +27 -0
  99. data/lib/gen/html_app/templates/apps/@target_name@/resources/stylesheets/@target_name@.css +4 -0
  100. data/lib/gen/project/templates/@filename@/Buildfile +7 -2
  101. data/lib/gen/theme/templates/themes/@target_name@/Buildfile +3 -0
  102. data/lib/gen/theme/templates/themes/@target_name@/theme.js +23 -0
  103. data/lib/sproutcore/builders.rb +2 -0
  104. data/lib/sproutcore/builders/chance.rb +64 -0
  105. data/lib/sproutcore/builders/chance_file.rb +59 -0
  106. data/lib/sproutcore/builders/combine.rb +0 -45
  107. data/lib/sproutcore/builders/html.rb +1 -1
  108. data/lib/sproutcore/builders/minify.rb +5 -17
  109. data/lib/sproutcore/builders/module.rb +2 -2
  110. data/lib/sproutcore/builders/string_wrapper.rb +13 -15
  111. data/lib/sproutcore/helpers.rb +1 -1
  112. data/lib/sproutcore/helpers/minifier.rb +56 -0
  113. data/lib/sproutcore/helpers/static_helper.rb +86 -40
  114. data/lib/sproutcore/models/generator.rb +16 -0
  115. data/lib/sproutcore/models/manifest_entry.rb +8 -1
  116. data/lib/sproutcore/models/target.rb +101 -33
  117. data/lib/sproutcore/tools.rb +0 -7
  118. data/lib/sproutcore/tools/build.rb +2 -37
  119. data/spec/buildtasks/manifest/prepare_build_tasks/chance_spec.rb +100 -0
  120. data/spec/buildtasks/manifest/prepare_build_tasks/combine_spec.rb +86 -9
  121. data/spec/buildtasks/manifest/prepare_build_tasks/css_spec.rb +1 -1
  122. data/spec/buildtasks/manifest/prepare_build_tasks/minify_spec.rb +1 -1
  123. data/spec/buildtasks/manifest/prepare_build_tasks/module_info_spec.rb +96 -0
  124. data/spec/buildtasks/manifest/prepare_build_tasks/module_spec.rb +83 -0
  125. data/spec/buildtasks/manifest/prepare_build_tasks/packed_spec.rb +37 -4
  126. data/spec/buildtasks/manifest/spec_helper.rb +4 -0
  127. data/spec/fixtures/builder_tests/Buildfile +11 -9
  128. data/spec/fixtures/builder_tests/apps/chance_test/Buildfile +14 -0
  129. data/spec/fixtures/builder_tests/apps/chance_test/core.js +27 -0
  130. data/spec/fixtures/builder_tests/apps/chance_test/main.js +30 -0
  131. data/spec/fixtures/builder_tests/apps/chance_test/resources/demo.css +6 -0
  132. data/spec/fixtures/builder_tests/apps/chance_test/resources/last_file.css +7 -0
  133. data/spec/fixtures/builder_tests/apps/chance_test/resources/loading.rhtml +9 -0
  134. data/spec/fixtures/builder_tests/apps/chance_test/resources/main_page.js +24 -0
  135. data/spec/fixtures/builder_tests/apps/chance_test/resources/z_first_file.css +6 -0
  136. data/spec/fixtures/builder_tests/apps/chance_test/theme.js +27 -0
  137. data/spec/fixtures/builder_tests/apps/module_test/module.js +1 -0
  138. data/spec/fixtures/builder_tests/apps/module_test/modules/deferred_module/english.lproj/req_style_2.css +0 -0
  139. data/spec/fixtures/builder_tests/apps/module_test/modules/deferred_module/english.lproj/test.rhtml +1 -0
  140. data/spec/fixtures/builder_tests/apps/module_test/modules/deferred_module/javascript.js +1 -0
  141. data/spec/fixtures/builder_tests/apps/module_test/modules/deferred_module/lib/alt_layout.rhtml +0 -0
  142. data/spec/fixtures/builder_tests/apps/module_test/modules/deferred_module/req_js_2.js +0 -0
  143. data/spec/fixtures/builder_tests/apps/module_test/modules/dynamic_req_target_1/dynamic_req_js_1.js +0 -0
  144. data/spec/fixtures/builder_tests/apps/module_test/modules/dynamic_req_target_1/english.lproj/dynamic_req_style_1.css +0 -0
  145. data/spec/fixtures/builder_tests/apps/module_test/modules/inlined_module/README +0 -0
  146. data/spec/fixtures/builder_tests/apps/module_test/modules/required_target/english.lproj/req_style_1.css +0 -0
  147. data/spec/fixtures/builder_tests/apps/module_test/modules/required_target/english.lproj/strings.js +4 -0
  148. data/spec/fixtures/builder_tests/apps/module_test/modules/required_target/english.lproj/test.rhtml +1 -0
  149. data/spec/fixtures/builder_tests/apps/module_test/modules/required_target/req_js_1.js +0 -0
  150. data/spec/fixtures/helper_tests/apps/minifier_test/core.js +8 -0
  151. data/spec/fixtures/real_world/Buildfile +11 -1
  152. data/spec/fixtures/real_world/apps/account/modules/preferences/README +0 -0
  153. data/spec/fixtures/real_world/apps/calendar/modules/preferences/README +0 -0
  154. data/spec/fixtures/real_world/apps/contacts/modules/preferences/README +0 -0
  155. data/spec/fixtures/real_world/apps/contacts/modules/printing/README +0 -0
  156. data/spec/fixtures/real_world/apps/mail/modules/preferences/README +0 -0
  157. data/spec/fixtures/real_world/apps/mail/modules/printing/README +0 -0
  158. data/spec/fixtures/real_world/apps/photos/modules/email/README +0 -0
  159. data/spec/fixtures/real_world/apps/photos/modules/preferences/README +0 -0
  160. data/spec/lib/builders/chance_file_spec.rb +63 -0
  161. data/spec/lib/builders/chance_spec.rb +81 -0
  162. data/spec/lib/builders/module_spec.rb +133 -0
  163. data/spec/lib/helpers/minifier.rb +31 -0
  164. data/spec/lib/models/project/find_targets_for_spec.rb +1 -1
  165. data/vendor/chance/lib/chance/imagers/data_url.rb +68 -17
  166. data/vendor/chance/lib/chance/instance.rb +55 -30
  167. data/vendor/chance/lib/chance/parser.rb +1 -1
  168. data/vendor/chance/lib/chance/slicing.rb +39 -3
  169. metadata +52 -7
  170. data/lib/frameworks/sproutcore/frameworks/foundation/system/logger.js +0 -163
  171. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/logger.js +0 -44
  172. data/spec/buildtasks/manifest/prepare_build_tasks/bundle_spec.rb +0 -254
  173. data/spec/fixtures/builder_tests/apps/bundle_test/bundle.js +0 -1
  174. 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 = dataSource.get('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 = dataSource.get('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'), width = dataSource.get('width');
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'));
@@ -74,4 +74,4 @@ SC.BaseTheme.segmentedRenderDelegate = SC.Object.create({
74
74
  // Default not found
75
75
  return -1;
76
76
  }
77
- });
77
+ });
@@ -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 = SC.BLANK_IMAGE_URL;
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.Well.containerRenderDelegate = SC.Object.create({
12
- name: 'container',
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("users interaction with mutiple alert panes with 1-3 buttons", function() {
120
-
121
- var delegate = SC.Object.create({
122
-
123
- threeButtonAlertPane: function() {
124
- 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);
125
- },
126
-
127
- twoButtonAlertPane: function() {
128
- pane = SC.AlertPane.error("AlertPane.error title", 'Click OK to see one button alert pane.', 'Click cancel to dismiss.', "OK", "Cancel", delegate);
129
- },
130
-
131
- oneButtonAlertPane: function() {
132
- pane = SC.AlertPane.info("AlertPane.info title", 'Click OK to dismiss.', delegate);
133
- },
134
-
135
- alertPaneDidDismiss: function(alert, status) {
136
- //console.log("%@.alertDidDismiss - %@".fmt(alert, status));
137
- switch(status) {
138
- case SC.BUTTON1_STATUS:
139
- if(alert.icon && alert.icon.indexOf('alert')!=-1) this.invokeLater(this.threeButtonAlertPane, 1000);
140
- if(alert.icon && alert.icon.indexOf('error')!=-1) this.oneButtonAlertPane();
141
- break;
142
- case SC.BUTTON3_STATUS:
143
- this.twoButtonAlertPane();
144
- break;
145
- }
146
- }
147
- });
148
-
149
- SC.RunLoop.begin();
150
- delegate.threeButtonAlertPane();
151
- SC.RunLoop.end();
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
+ });