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,171 @@
1
+ (function ($) {
2
+ AblePlayer.prototype.showSearchResults = function() {
3
+
4
+ // search VTT file for all instances of searchTerms
5
+ // Currently just supports search terms separated with one or more spaces
6
+
7
+ // TODO: Add support for more robust search syntax:
8
+ // Search terms wrapped in quotation marks ("") must occur exactly as they appear in the quotes
9
+ // Search terms with an attached minus sign (e.g., -term) are to be excluded from results
10
+ // Boolean AND/OR operators
11
+ // ALSO: Add localization support
12
+
13
+ var thisObj = this;
14
+
15
+ if (this.searchDiv && this.searchString) {
16
+ if ($('#' + this.SearchDiv)) {
17
+ var resultsArray = this.searchFor(this.searchString);
18
+ if (resultsArray.length > 0) {
19
+ var resultsSummary = $('<p>',{
20
+ 'class': 'able-search-results-summary'
21
+ });
22
+ var resultsSummaryText = 'Found <strong>' + resultsArray.length + '</strong> matching items. ';
23
+ resultsSummaryText += 'Click the time associated with any item ';
24
+ resultsSummaryText += 'to play the video from that point.';
25
+ resultsSummary.html(resultsSummaryText);
26
+ var resultsList = $('<ul>');
27
+ for (var i = 0; i < resultsArray.length; i++) {
28
+ var resultsItem = $('<li>',{
29
+ });
30
+ var itemStartTime = this.secondsToTime(resultsArray[i]['start']);
31
+ var itemStartSpan = $('<span>',{
32
+ 'class': 'able-search-results-time',
33
+ 'data-start': resultsArray[i]['start'],
34
+ 'title': itemStartTime['title'],
35
+ 'tabindex': '0'
36
+ });
37
+ itemStartSpan.text(itemStartTime['value']);
38
+ // add a listener for clisk on itemStart
39
+ itemStartSpan.click(function(event) {
40
+ var spanStart = parseFloat($(this).attr('data-start'));
41
+ // Add a tiny amount so that we're inside the span.
42
+ spanStart += .01;
43
+ thisObj.seeking = true;
44
+ thisObj.seekTo(spanStart);
45
+ });
46
+
47
+ var itemText = $('<span>',{
48
+ 'class': 'able-search-result-text'
49
+ })
50
+ itemText.html('...' + resultsArray[i]['caption'] + '...');
51
+ resultsItem.append(itemStartSpan, itemText);
52
+ resultsList.append(resultsItem);
53
+ }
54
+ $('#' + this.searchDiv).append(resultsSummary, resultsList);
55
+ }
56
+ else {
57
+ var noResults = $('<p>').text('No results found.');
58
+ $('#' + this.searchDiv).append(noResults);
59
+ }
60
+ }
61
+ }
62
+ };
63
+
64
+ AblePlayer.prototype.searchFor = function(searchString) {
65
+
66
+ // return chronological array of caption cues that match searchTerms
67
+
68
+ var captionLang, captions, results, caption, c, i, j;
69
+
70
+ // split searchTerms into an array
71
+ var searchTerms = searchString.split(' ');
72
+ if (this.captions.length > 0) {
73
+ captionLang = this.captions[0].language; // in case it's needed later
74
+ captions = this.captions[0].cues;
75
+ if (captions.length > 0) {
76
+ var results = [];
77
+ c = 0;
78
+ for (i = 0; i < captions.length; i++) {
79
+ if ($.inArray(captions[i].components.children[0]['type'], ['string','i','b','u','v','c']) !== -1) {
80
+ caption = this.flattenCueForCaption(captions[i]);
81
+ for (j = 0; j < searchTerms.length; j++) {
82
+ if (caption.indexOf(searchTerms[j]) !== -1) {
83
+ results[c] = [];
84
+ results[c]['start'] = captions[i].start;
85
+ results[c]['caption'] = this.highlightSearchTerm(searchTerms,j,caption);
86
+ c++;
87
+ break;
88
+ }
89
+ }
90
+ }
91
+ }
92
+ }
93
+ }
94
+
95
+ return results;
96
+ };
97
+
98
+ AblePlayer.prototype.highlightSearchTerm = function(searchTerms, index, resultString) {
99
+
100
+ // highlight ALL found searchTerms in the current resultString
101
+ // index is the first index in the searchTerm array where a match has already been found
102
+ // Need to step through the remaining terms to see if they're present as well
103
+
104
+ var i, searchTerm, termIndex, termLength, str1, str2, str3;
105
+
106
+ for (i=index; i<searchTerms.length; i++) {
107
+
108
+ searchTerm = searchTerms[i];
109
+ termIndex = resultString.indexOf(searchTerm);
110
+ if (termIndex !== -1) {
111
+ termLength = searchTerm.length;
112
+ if (termLength > 0) {
113
+ str1 = resultString.substring(0, termIndex);
114
+ str2 = '<span class="able-search-term">' + searchTerm + '</span>';
115
+ str3 = resultString.substring(termIndex+termLength);
116
+ resultString = str1 + str2 + str3;
117
+ }
118
+ else {
119
+ str1 = '<span class="able-search-term">' + searchTerm + '</span>';
120
+ str2 = resultString.substring(termIndex+termLength);
121
+ resultString = str1 + str2;
122
+ }
123
+ }
124
+ }
125
+ return resultString;
126
+ };
127
+
128
+ AblePlayer.prototype.secondsToTime = function(totalSeconds) {
129
+
130
+ // return an array of totalSeconds converted into two formats
131
+ // time['value'] = HH:MM:SS with hours dropped if there are none
132
+ // time['title'] = a speakable rendering, so speech rec users can easily speak the link
133
+
134
+ // first, round down to nearest second
135
+ var totalSeconds = Math.floor(totalSeconds);
136
+
137
+ var hours = parseInt( totalSeconds / 3600 , 10) % 24;
138
+ var minutes = parseInt( totalSeconds / 60 , 10) % 60;
139
+ var seconds = totalSeconds % 60;
140
+ var value = '';
141
+ var title = '';
142
+ if (hours > 0) {
143
+ value += hours + ':';
144
+ title + hours + ' hours ';
145
+ }
146
+ if (minutes < 10) {
147
+ value += '0' + minutes + ':';
148
+ if (minutes > 0) {
149
+ title += minutes + ' minutes ';
150
+ }
151
+ }
152
+ else {
153
+ value += minutes + ':';
154
+ title += minutes + ' minutes ';
155
+ }
156
+ if (seconds < 10) {
157
+ value += '0' + seconds;
158
+ if (seconds > 0) {
159
+ title += seconds + ' seconds ';
160
+ }
161
+ }
162
+ else {
163
+ value += seconds;
164
+ title += seconds + ' seconds ';
165
+ }
166
+ var time = [];
167
+ time['value'] = value;
168
+ time['title'] = title;
169
+ return time;
170
+ };
171
+ })(jQuery);
@@ -0,0 +1,92 @@
1
+ (function ($) {
2
+ AblePlayer.prototype.initSignLanguage = function() {
3
+ // Sign language is only currently supported in HTML5 player, not fallback or YouTube
4
+ if (this.player === 'html5') {
5
+ // check to see if there's a sign language video accompanying this video
6
+ // check only the first source
7
+ // If sign language is provided, it must be provided for all sources
8
+ this.signFile = this.$sources.first().attr('data-sign-src');
9
+ if (this.signFile) {
10
+ if (this.debug) {
11
+ console.log('This video has an accompanying sign language video: ' + this.signFile);
12
+ }
13
+ this.hasSignLanguage = true;
14
+ this.injectSignPlayerCode();
15
+ }
16
+ else {
17
+ this.hasSignLanguage = false;
18
+ }
19
+ }
20
+ };
21
+
22
+ AblePlayer.prototype.injectSignPlayerCode = function() {
23
+
24
+ // create and inject surrounding HTML structure
25
+ // If IOS:
26
+ // If video:
27
+ // IOS does not support any of the player's functionality
28
+ // - everything plays in its own player
29
+ // Therefore, AblePlayer is not loaded & all functionality is disabled
30
+ // (this all determined. If this is IOS && video, this function is never called)
31
+ // If audio:
32
+ // HTML cannot be injected as a *parent* of the <audio> element
33
+ // It is therefore injected *after* the <audio> element
34
+ // This is only a problem in IOS 6 and earlier,
35
+ // & is a known bug, fixed in IOS 7
36
+
37
+ var thisObj, signVideoId, signVideoWidth, i, signSrc, srcType, $signSource;
38
+
39
+ thisObj = this;
40
+
41
+ signVideoWidth = this.getDefaultWidth('sign');
42
+
43
+ signVideoId = this.mediaId + '-sign';
44
+ this.$signVideo = $('<video>',{
45
+ 'id' : signVideoId,
46
+ 'tabindex' : '-1'
47
+ });
48
+ this.signVideo = this.$signVideo[0];
49
+ // for each original <source>, add a <source> to the sign <video>
50
+ for (i=0; i < this.$sources.length; i++) {
51
+ signSrc = this.$sources[i].getAttribute('data-sign-src');
52
+ srcType = this.$sources[i].getAttribute('type');
53
+ if (signSrc) {
54
+ $signSource = $('<source>',{
55
+ 'src' : signSrc,
56
+ 'type' : srcType
57
+ });
58
+ this.$signVideo.append($signSource);
59
+ }
60
+ else {
61
+ // source is missing a sign language version
62
+ // can't include sign language
63
+ this.hasSignLanguage = false;
64
+ break;
65
+ }
66
+ }
67
+
68
+ this.$signWindow = $('<div>',{
69
+ 'class' : 'able-sign-window',
70
+ 'tabindex': '-1'
71
+ });
72
+ this.$signToolbar = $('<div>',{
73
+ 'class': 'able-window-toolbar able-' + this.toolbarIconColor + '-controls'
74
+ });
75
+
76
+ this.$signWindow.append(this.$signToolbar, this.$signVideo);
77
+
78
+ this.$ableWrapper.append(this.$signWindow);
79
+
80
+ // make it draggable
81
+ this.initDragDrop('sign');
82
+
83
+ if (this.prefSign === 1) {
84
+ // sign window is on. Go ahead and position it and show it
85
+ this.positionDraggableWindow('sign',this.getDefaultWidth('sign'));
86
+ }
87
+ else {
88
+ this.$signWindow.hide();
89
+ }
90
+ };
91
+
92
+ })(jQuery);