wai-website-theme 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +52 -0
  4. data/_data/lang.json +730 -0
  5. data/_data/techniques.yml +180 -0
  6. data/_data/wcag.yml +125 -0
  7. data/_includes/.DS_Store +0 -0
  8. data/_includes/body-class.html +1 -0
  9. data/_includes/box.html +10 -0
  10. data/_includes/excol.html +13 -0
  11. data/_includes/footer.html +40 -0
  12. data/_includes/head.html +23 -0
  13. data/_includes/header.html +59 -0
  14. data/_includes/icon.html +6 -0
  15. data/_includes/img.html +17 -0
  16. data/_includes/multilang-list-policy-links.html +29 -0
  17. data/_includes/multilang-list.html +35 -0
  18. data/_includes/multilang-policy-title.html +5 -0
  19. data/_includes/multilang-title-full.html +1 -0
  20. data/_includes/multilang-title.html +1 -0
  21. data/_includes/navlist.html +22 -0
  22. data/_includes/notes.html +2 -0
  23. data/_includes/prevnext.html +34 -0
  24. data/_includes/resources.html +19 -0
  25. data/_includes/sidenav.html +65 -0
  26. data/_includes/sidenote.html +14 -0
  27. data/_includes/toc.html +10 -0
  28. data/_includes/video-player.html +99 -0
  29. data/_layouts/default.html +26 -0
  30. data/_layouts/home.html +14 -0
  31. data/_layouts/news.html +21 -0
  32. data/_layouts/none.html +1 -0
  33. data/_layouts/policy.html +72 -0
  34. data/_layouts/sidenav.html +27 -0
  35. data/_layouts/sidenavsidebar.html +22 -0
  36. data/assets/ableplayer/.gitattributes +14 -0
  37. data/assets/ableplayer/.gitignore +7 -0
  38. data/assets/ableplayer/Gruntfile.js +105 -0
  39. data/assets/ableplayer/LICENSE +26 -0
  40. data/assets/ableplayer/README.md +656 -0
  41. data/assets/ableplayer/build/ableplayer.dist.js +12157 -0
  42. data/assets/ableplayer/build/ableplayer.js +12157 -0
  43. data/assets/ableplayer/build/ableplayer.min.css +2 -0
  44. data/assets/ableplayer/build/ableplayer.min.js +8 -0
  45. data/assets/ableplayer/button-icons/able-icons.svg +116 -0
  46. data/assets/ableplayer/button-icons/black/captions.png +0 -0
  47. data/assets/ableplayer/button-icons/black/chapters.png +0 -0
  48. data/assets/ableplayer/button-icons/black/close.png +0 -0
  49. data/assets/ableplayer/button-icons/black/descriptions.png +0 -0
  50. data/assets/ableplayer/button-icons/black/ellipsis.png +0 -0
  51. data/assets/ableplayer/button-icons/black/faster.png +0 -0
  52. data/assets/ableplayer/button-icons/black/forward.png +0 -0
  53. data/assets/ableplayer/button-icons/black/fullscreen-collapse.png +0 -0
  54. data/assets/ableplayer/button-icons/black/fullscreen-expand.png +0 -0
  55. data/assets/ableplayer/button-icons/black/help.png +0 -0
  56. data/assets/ableplayer/button-icons/black/next.png +0 -0
  57. data/assets/ableplayer/button-icons/black/pause.png +0 -0
  58. data/assets/ableplayer/button-icons/black/pipe.png +0 -0
  59. data/assets/ableplayer/button-icons/black/play.png +0 -0
  60. data/assets/ableplayer/button-icons/black/preferences.png +0 -0
  61. data/assets/ableplayer/button-icons/black/previous.png +0 -0
  62. data/assets/ableplayer/button-icons/black/rabbit.png +0 -0
  63. data/assets/ableplayer/button-icons/black/restart.png +0 -0
  64. data/assets/ableplayer/button-icons/black/rewind.png +0 -0
  65. data/assets/ableplayer/button-icons/black/sign.png +0 -0
  66. data/assets/ableplayer/button-icons/black/slower.png +0 -0
  67. data/assets/ableplayer/button-icons/black/stop.png +0 -0
  68. data/assets/ableplayer/button-icons/black/transcript.png +0 -0
  69. data/assets/ableplayer/button-icons/black/turtle.png +0 -0
  70. data/assets/ableplayer/button-icons/black/volume-loud.png +0 -0
  71. data/assets/ableplayer/button-icons/black/volume-medium.png +0 -0
  72. data/assets/ableplayer/button-icons/black/volume-mute.png +0 -0
  73. data/assets/ableplayer/button-icons/black/volume-soft.png +0 -0
  74. data/assets/ableplayer/button-icons/fonts/able.eot +0 -0
  75. data/assets/ableplayer/button-icons/fonts/able.svg +40 -0
  76. data/assets/ableplayer/button-icons/fonts/able.ttf +0 -0
  77. data/assets/ableplayer/button-icons/fonts/able.woff +0 -0
  78. data/assets/ableplayer/button-icons/white/captions.png +0 -0
  79. data/assets/ableplayer/button-icons/white/chapters.png +0 -0
  80. data/assets/ableplayer/button-icons/white/close.png +0 -0
  81. data/assets/ableplayer/button-icons/white/descriptions.png +0 -0
  82. data/assets/ableplayer/button-icons/white/ellipsis.png +0 -0
  83. data/assets/ableplayer/button-icons/white/faster.png +0 -0
  84. data/assets/ableplayer/button-icons/white/forward.png +0 -0
  85. data/assets/ableplayer/button-icons/white/fullscreen-collapse.png +0 -0
  86. data/assets/ableplayer/button-icons/white/fullscreen-expand.png +0 -0
  87. data/assets/ableplayer/button-icons/white/help.png +0 -0
  88. data/assets/ableplayer/button-icons/white/next.png +0 -0
  89. data/assets/ableplayer/button-icons/white/pause.png +0 -0
  90. data/assets/ableplayer/button-icons/white/pipe.png +0 -0
  91. data/assets/ableplayer/button-icons/white/play.png +0 -0
  92. data/assets/ableplayer/button-icons/white/preferences.png +0 -0
  93. data/assets/ableplayer/button-icons/white/previous.png +0 -0
  94. data/assets/ableplayer/button-icons/white/rabbit.png +0 -0
  95. data/assets/ableplayer/button-icons/white/restart.png +0 -0
  96. data/assets/ableplayer/button-icons/white/rewind.png +0 -0
  97. data/assets/ableplayer/button-icons/white/sign.png +0 -0
  98. data/assets/ableplayer/button-icons/white/slower.png +0 -0
  99. data/assets/ableplayer/button-icons/white/stop.png +0 -0
  100. data/assets/ableplayer/button-icons/white/transcript.png +0 -0
  101. data/assets/ableplayer/button-icons/white/turtle.png +0 -0
  102. data/assets/ableplayer/button-icons/white/volume-loud.png +0 -0
  103. data/assets/ableplayer/button-icons/white/volume-medium.png +0 -0
  104. data/assets/ableplayer/button-icons/white/volume-mute.png +0 -0
  105. data/assets/ableplayer/button-icons/white/volume-soft.png +0 -0
  106. data/assets/ableplayer/images/wingrip.png +0 -0
  107. data/assets/ableplayer/package.json +22 -0
  108. data/assets/ableplayer/scripts/JQuery.doWhen.js +113 -0
  109. data/assets/ableplayer/scripts/ableplayer-base.js +440 -0
  110. data/assets/ableplayer/scripts/browser.js +162 -0
  111. data/assets/ableplayer/scripts/buildplayer.js +1609 -0
  112. data/assets/ableplayer/scripts/caption.js +385 -0
  113. data/assets/ableplayer/scripts/chapters.js +242 -0
  114. data/assets/ableplayer/scripts/control.js +1514 -0
  115. data/assets/ableplayer/scripts/description.js +283 -0
  116. data/assets/ableplayer/scripts/dialog.js +147 -0
  117. data/assets/ableplayer/scripts/dragdrop.js +766 -0
  118. data/assets/ableplayer/scripts/event.js +595 -0
  119. data/assets/ableplayer/scripts/initialize.js +725 -0
  120. data/assets/ableplayer/scripts/langs.js +750 -0
  121. data/assets/ableplayer/scripts/metadata.js +134 -0
  122. data/assets/ableplayer/scripts/misc.js +72 -0
  123. data/assets/ableplayer/scripts/preference.js +909 -0
  124. data/assets/ableplayer/scripts/search.js +171 -0
  125. data/assets/ableplayer/scripts/sign.js +92 -0
  126. data/assets/ableplayer/scripts/slider.js +454 -0
  127. data/assets/ableplayer/scripts/track.js +296 -0
  128. data/assets/ableplayer/scripts/transcript.js +590 -0
  129. data/assets/ableplayer/scripts/translation.js +66 -0
  130. data/assets/ableplayer/scripts/volume.js +383 -0
  131. data/assets/ableplayer/scripts/webvtt.js +765 -0
  132. data/assets/ableplayer/scripts/youtube.js +471 -0
  133. data/assets/ableplayer/styles/ableplayer.css +1241 -0
  134. data/assets/ableplayer/thirdparty/js.cookie.js +145 -0
  135. data/assets/ableplayer/thirdparty/modernizr.custom.js +4 -0
  136. data/assets/ableplayer/translations/ca.js +1 -0
  137. data/assets/ableplayer/translations/de.js +1 -0
  138. data/assets/ableplayer/translations/en.js +305 -0
  139. data/assets/ableplayer/translations/es.js +305 -0
  140. data/assets/ableplayer/translations/fr.js +305 -0
  141. data/assets/ableplayer/translations/it.js +303 -0
  142. data/assets/ableplayer/translations/ja.js +305 -0
  143. data/assets/ableplayer/translations/nl.js +305 -0
  144. data/assets/css/style.css +4360 -0
  145. data/assets/css/style.css.map +1 -0
  146. data/assets/fonts/anonymouspro-bold.woff +0 -0
  147. data/assets/fonts/anonymouspro-bold.woff2 +0 -0
  148. data/assets/fonts/anonymouspro-bolditalic.woff +0 -0
  149. data/assets/fonts/anonymouspro-bolditalic.woff2 +0 -0
  150. data/assets/fonts/anonymouspro-italic.woff +0 -0
  151. data/assets/fonts/anonymouspro-italic.woff2 +0 -0
  152. data/assets/fonts/anonymouspro-regular.woff +0 -0
  153. data/assets/fonts/anonymouspro-regular.woff2 +0 -0
  154. data/assets/fonts/notosans-bold.woff +0 -0
  155. data/assets/fonts/notosans-bold.woff2 +0 -0
  156. data/assets/fonts/notosans-bolditalic.woff +0 -0
  157. data/assets/fonts/notosans-bolditalic.woff2 +0 -0
  158. data/assets/fonts/notosans-italic.woff +0 -0
  159. data/assets/fonts/notosans-italic.woff2 +0 -0
  160. data/assets/fonts/notosans-regular.woff +0 -0
  161. data/assets/fonts/notosans-regular.woff2 +0 -0
  162. data/assets/images/.DS_Store +0 -0
  163. data/assets/images/Shape.svg +10 -0
  164. data/assets/images/icon-related-content.svg +14 -0
  165. data/assets/images/icons.svg +126 -0
  166. data/assets/images/teaser-image@1x.jpg +0 -0
  167. data/assets/images/teaser-image@2x.jpg +0 -0
  168. data/assets/images/w3c.sketch +0 -0
  169. data/assets/images/w3c.svg +10 -0
  170. data/assets/scripts/jquery.min.js +4 -0
  171. data/assets/scripts/main.js +208 -0
  172. data/assets/scripts/svg4everybody.js +1 -0
  173. metadata +257 -0
@@ -0,0 +1,296 @@
1
+ (function ($) {
2
+ // Loads files referenced in track elements, and performs appropriate setup.
3
+ // For example, captions and text descriptions.
4
+ // This will be called whenever the player is recreated.
5
+ // Added in v2.2.23: Also handles YouTube caption tracks
6
+ AblePlayer.prototype.setupTracks = function() {
7
+
8
+ var thisObj = this;
9
+
10
+ var deferred = new $.Deferred();
11
+ var promise = deferred.promise();
12
+ this.$tracks = this.$media.find('track');
13
+
14
+ this.captions = [];
15
+ this.captionLabels = [];
16
+ this.descriptions = [];
17
+ this.chapters = [];
18
+ this.meta = [];
19
+
20
+ var loadingPromises = [];
21
+ for (var ii = 0; ii < this.$tracks.length; ii++) {
22
+ var track = this.$tracks[ii];
23
+ var kind = track.getAttribute('kind');
24
+ var trackSrc = track.getAttribute('src');
25
+
26
+ var isDefaultTrack = track.getAttribute('default');
27
+
28
+ if (!trackSrc) {
29
+ // Nothing to load!
30
+ continue;
31
+ }
32
+
33
+ var loadingPromise = this.loadTextObject(trackSrc);
34
+ loadingPromises.push(loadingPromise);
35
+ loadingPromise.then((function (track, kind) {
36
+ return function (trackSrc, trackText) {
37
+ var cues = thisObj.parseWebVTT(trackSrc, trackText).cues;
38
+ if (kind === 'captions' || kind === 'subtitles') {
39
+ thisObj.setupCaptions(track, cues);
40
+ }
41
+ else if (kind === 'descriptions') {
42
+ thisObj.setupDescriptions(track, cues);
43
+ }
44
+ else if (kind === 'chapters') {
45
+ thisObj.setupChapters(track, cues);
46
+ }
47
+ else if (kind === 'metadata') {
48
+ thisObj.setupMetadata(track, cues);
49
+ }
50
+ }
51
+ })(track, kind));
52
+ }
53
+
54
+ $.when.apply($, loadingPromises).then(function () {
55
+ deferred.resolve();
56
+ });
57
+ return promise;
58
+ };
59
+
60
+ AblePlayer.prototype.setupCaptions = function (track, cues) {
61
+
62
+ this.hasCaptions = true;
63
+ // srcLang should always be included with <track>, but HTML5 spec doesn't require it
64
+ // if not provided, assume track is the same language as the default player language
65
+ var trackLang = track.getAttribute('srclang') || this.lang;
66
+ var trackLabel = track.getAttribute('label') || this.getLanguageName(trackLang);
67
+ if (typeof track.getAttribute('default') == 'string') {
68
+ var isDefaultTrack = true;
69
+ // Now remove 'default' attribute from <track>
70
+ // Otherwise, some browsers will display the track
71
+ track.removeAttribute('default');
72
+ }
73
+ else {
74
+ var isDefaultTrack = false;
75
+ }
76
+ // caption cues from WebVTT are used to build a transcript for both audio and video
77
+ // but captions are currently only supported for video
78
+ if (this.mediaType === 'video') {
79
+
80
+ // create a pair of nested divs for displaying captions
81
+ // includes aria-hidden="true" because otherwise
82
+ // captions being added and removed causes sporadic changes to focus in JAWS
83
+ // (not a problem in NVDA or VoiceOver)
84
+ if (!this.$captionsDiv) {
85
+ this.$captionsDiv = $('<div>',{
86
+ 'class': 'able-captions',
87
+ });
88
+ this.$captionsWrapper = $('<div>',{
89
+ 'class': 'able-captions-wrapper',
90
+ 'aria-hidden': 'true'
91
+ });
92
+ if (this.prefCaptionsPosition === 'below') {
93
+ this.$captionsWrapper.addClass('able-captions-below');
94
+ }
95
+ else {
96
+ this.$captionsWrapper.addClass('able-captions-overlay');
97
+ }
98
+ this.$captionsWrapper.append(this.$captionsDiv);
99
+ this.$vidcapContainer.append(this.$captionsWrapper);
100
+ }
101
+ }
102
+
103
+ this.currentCaption = -1;
104
+ if (this.prefCaptions === 1) {
105
+ // Captions default to on.
106
+ this.captionsOn = true;
107
+ }
108
+ else {
109
+ this.captionsOn = false;
110
+ }
111
+
112
+ if (this.transcriptType === 'external' || this.transcriptType === 'popup') {
113
+ // Remove the "Unknown" option from the select box.
114
+ if (this.$unknownTranscriptOption) {
115
+ this.$unknownTranscriptOption.remove();
116
+ this.$unknownTranscriptOption = null;
117
+ }
118
+ var option = $('<option></option>',{
119
+ value: trackLang,
120
+ lang: trackLang
121
+ }).text(trackLabel);
122
+ }
123
+ // alphabetize tracks by label
124
+ if (this.transcriptType === 'external' || this.transcriptType === 'popup') {
125
+ var options = this.$transcriptLanguageSelect.find('option');
126
+ }
127
+ if (this.captions.length === 0) { // this is the first
128
+ this.captions.push({
129
+ 'cues': cues,
130
+ 'language': trackLang,
131
+ 'label': trackLabel,
132
+ 'def': isDefaultTrack
133
+ });
134
+ if (this.transcriptType === 'external' || this.transcriptType === 'popup') {
135
+ if (isDefaultTrack) {
136
+ option.prop('selected', true);
137
+ }
138
+ this.$transcriptLanguageSelect.append(option);
139
+ }
140
+ this.captionLabels.push(trackLabel);
141
+ }
142
+ else { // there are already tracks in the array
143
+ var inserted = false;
144
+ for (var i = 0; i < this.captions.length; i++) {
145
+ var capLabel = this.captionLabels[i];
146
+ if (trackLabel.toLowerCase() < this.captionLabels[i].toLowerCase()) {
147
+ // insert before track i
148
+ this.captions.splice(i,0,{
149
+ 'cues': cues,
150
+ 'language': trackLang,
151
+ 'label': trackLabel,
152
+ 'def': isDefaultTrack
153
+ });
154
+ if (this.transcriptType === 'external' || this.transcriptType === 'popup') {
155
+ if (isDefaultTrack) {
156
+ option.prop('selected', true);
157
+ }
158
+ option.insertBefore(options.eq(i));
159
+ }
160
+ this.captionLabels.splice(i,0,trackLabel);
161
+ inserted = true;
162
+ break;
163
+ }
164
+ }
165
+ if (!inserted) {
166
+ // just add track to the end
167
+ this.captions.push({
168
+ 'cues': cues,
169
+ 'language': trackLang,
170
+ 'label': trackLabel,
171
+ 'def': isDefaultTrack
172
+ });
173
+ if (this.transcriptType === 'external' || this.transcriptType === 'popup') {
174
+ if (isDefaultTrack) {
175
+ option.prop('selected', true);
176
+ }
177
+ this.$transcriptLanguageSelect.append(option);
178
+ }
179
+ this.captionLabels.push(trackLabel);
180
+ }
181
+ }
182
+ if (this.transcriptType === 'external' || this.transcriptType === 'popup') {
183
+ if (this.$transcriptLanguageSelect.find('option').length > 1) {
184
+ // More than one option now, so enable the select.
185
+ this.$transcriptLanguageSelect.prop('disabled', false);
186
+ }
187
+ }
188
+ };
189
+
190
+
191
+ AblePlayer.prototype.setupDescriptions = function (track, cues) {
192
+
193
+ // called via setupTracks() only if there is track with kind="descriptions"
194
+ // prepares for delivery of text description , in case it's needed
195
+ // whether and how it's delivered is controlled within description.js > initDescription()
196
+
197
+ // srcLang should always be included with <track>, but HTML5 spec doesn't require it
198
+ // if not provided, assume track is the same language as the default player language
199
+ var trackLang = track.getAttribute('srclang') || this.lang;
200
+
201
+ this.hasClosedDesc = true;
202
+ this.currentDescription = -1;
203
+ this.descriptions.push({
204
+ cues: cues,
205
+ language: trackLang
206
+ });
207
+ };
208
+
209
+ AblePlayer.prototype.setupChapters = function (track, cues) {
210
+
211
+ // NOTE: WebVTT supports nested timestamps (to form an outline)
212
+ // This is not currently supported.
213
+
214
+ // srcLang should always be included with <track>, but HTML5 spec doesn't require it
215
+ // if not provided, assume track is the same language as the default player language
216
+ var trackLang = track.getAttribute('srclang') || this.lang;
217
+
218
+ this.hasChapters = true;
219
+
220
+ this.chapters.push({
221
+ cues: cues,
222
+ language: trackLang
223
+ });
224
+ };
225
+
226
+ AblePlayer.prototype.setupMetadata = function(track, cues) {
227
+ if (this.metaType === 'text') {
228
+ // Metadata is only supported if data-meta-div is provided
229
+ // The player does not display metadata internally
230
+ if (this.metaDiv) {
231
+ if ($('#' + this.metaDiv)) {
232
+ // container exists
233
+ this.$metaDiv = $('#' + this.metaDiv);
234
+ this.hasMeta = true;
235
+ this.meta = cues;
236
+ }
237
+ }
238
+ }
239
+ else if (this.metaType === 'selector') {
240
+ this.hasMeta = true;
241
+ this.visibleSelectors = [];
242
+ this.meta = cues;
243
+ }
244
+ };
245
+
246
+ AblePlayer.prototype.loadTextObject = function(src) {
247
+
248
+ var deferred = new $.Deferred();
249
+ var promise = deferred.promise();
250
+ var thisObj = this;
251
+
252
+ // create a temp div for holding data
253
+ var $tempDiv = $('<div>',{
254
+ style: 'display:none'
255
+ });
256
+
257
+ $tempDiv.load(src, function (trackText, status, req) {
258
+ if (status === 'error') {
259
+ if (thisObj.debug) {
260
+ console.log ('error reading file ' + src + ': ' + status);
261
+ }
262
+ deferred.fail();
263
+ }
264
+ else {
265
+ deferred.resolve(src, trackText);
266
+ }
267
+ $tempDiv.remove();
268
+ });
269
+ return promise;
270
+ };
271
+
272
+ AblePlayer.prototype.setupAltCaptions = function() {
273
+ // setup captions from an alternative source (not <track> elements)
274
+ // only do this if no <track> captions are provided
275
+ // currently supports: YouTube
276
+ var deferred = new $.Deferred();
277
+ var promise = deferred.promise();
278
+
279
+ if (this.captions.length === 0) {
280
+ if (this.player === 'youtube' && typeof youTubeDataAPIKey !== 'undefined') {
281
+ this.setupYouTubeCaptions().done(function() {
282
+ deferred.resolve();
283
+ });
284
+ }
285
+ else {
286
+ // repeat for other alt sources once supported (e.g., Vimeo, DailyMotion)
287
+ deferred.resolve();
288
+ }
289
+ }
290
+ else { // there are <track> captions, so no need for alt source captions
291
+ deferred.resolve();
292
+ }
293
+ return promise;
294
+ };
295
+
296
+ })(jQuery);