wai-website-theme 1.6 → 1.7
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.
- checksums.yaml +4 -4
- data/_data/lang.json +1 -0
- data/_data/navigation.yml +85 -0
- data/_data/techniques.yml +1 -0
- data/_data/translations.yml +1 -0
- data/_data/wcag.yml +1 -0
- data/_includes/blockquote.html +6 -0
- data/_includes/box.html +4 -7
- data/_includes/button.html +9 -0
- data/_includes/different.html +2 -2
- data/_includes/footer.html +1 -1
- data/_includes/header.html +5 -5
- data/_includes/image.html +14 -0
- data/_includes/input.html +2 -0
- data/_includes/link.html +1 -1
- data/_includes/menuitem.html +2 -2
- data/_includes/navlist.html +2 -1
- data/_includes/secondarynav.html +6 -6
- data/_includes/showhidebutton.html +1 -0
- data/_includes/toc.html +15 -1
- data/_includes/video-link.html +1 -1
- data/_includes/video-player.html +2 -2
- data/assets/ableplayer/build/ableplayer.dist.js +216 -204
- data/assets/ableplayer/build/ableplayer.js +187 -175
- data/assets/ableplayer/build/ableplayer.min.js +2 -2
- data/assets/css/style.css +1 -1
- data/assets/css/style.css.map +1 -1
- metadata +34 -21
- data/assets/images/video-mask-16-9.svg +0 -1
- data/assets/images/video-mask-4-3.svg +0 -1
- data/assets/images/video-still-accessibility-intro-16-9.jpg +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e5ff63f525b7bdbfaa526b5948a80d9d15cc614ef5d7755d86452872de8fba92
|
|
4
|
+
data.tar.gz: b8ab68ccfe3ca812cf2cf3129d59d812911d226a9087e9097985d5891e955d10
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f963eeee23e3c8e16afb9568555345d7c29ce2067c25e1e0c22129d6bb436c05cf831a8fdcf62b1c5d2a24f47d77d9855d0f3c297c308da9b5c4e85757a46c54
|
|
7
|
+
data.tar.gz: a195c9358385c40ce63f4a0292ded5fa527a710f38beceb3ab601004601437dc8b1c82602b273bdbe6954a2a34dc872bb65e528d161263588b7a47afeecb3df9
|
data/_data/lang.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
../_external/data/lang.json
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
- name:
|
|
2
|
+
en: 'Home'
|
|
3
|
+
pages:
|
|
4
|
+
- name: Overview
|
|
5
|
+
url: "/overview/"
|
|
6
|
+
- name:
|
|
7
|
+
en: 'Writing Documents'
|
|
8
|
+
pages:
|
|
9
|
+
- name: Overview
|
|
10
|
+
url: "/writing/"
|
|
11
|
+
- name: Markdown
|
|
12
|
+
url: "/writing/markdown/"
|
|
13
|
+
- name: Custom Markdown Extensions
|
|
14
|
+
url: "/writing/wai-markdown/"
|
|
15
|
+
- name:
|
|
16
|
+
en: 'Design Components'
|
|
17
|
+
pages:
|
|
18
|
+
- name: Overview
|
|
19
|
+
url: "/components/"
|
|
20
|
+
- name: Colors
|
|
21
|
+
url: "/components/colors/"
|
|
22
|
+
- name: Atoms
|
|
23
|
+
url: "/components/atoms/"
|
|
24
|
+
pages:
|
|
25
|
+
- name: Buttons
|
|
26
|
+
url: "/components/atoms/buttons/"
|
|
27
|
+
- name: Button Group
|
|
28
|
+
url: "/components/atoms/button-group/"
|
|
29
|
+
- name: "Show/Hide Buttons"
|
|
30
|
+
url: "/components/atoms/show-hide-buttons/"
|
|
31
|
+
- name: Input Elements
|
|
32
|
+
url: "/components/atoms/input/"
|
|
33
|
+
- name: "Mark Element"
|
|
34
|
+
url: "/components/atoms/mark/"
|
|
35
|
+
- name: "Paragraphs"
|
|
36
|
+
url: "/components/atoms/p/"
|
|
37
|
+
- name: Block Quotes
|
|
38
|
+
url: "/components/blockquotes/"
|
|
39
|
+
- name: Boxes
|
|
40
|
+
url: "/components/boxes/"
|
|
41
|
+
- name: Decision Tree
|
|
42
|
+
url: "/components/decision-tree/"
|
|
43
|
+
- name: "Document Notes"
|
|
44
|
+
url: "/components/document-notes/archived/"
|
|
45
|
+
pages:
|
|
46
|
+
- name: "Archived"
|
|
47
|
+
url: "/components/document-notes/archived/"
|
|
48
|
+
- name: "Draft"
|
|
49
|
+
url: "/components/document-notes/draft/"
|
|
50
|
+
- name: "Translation"
|
|
51
|
+
url: "/components/document-notes/translation/"
|
|
52
|
+
- name: "Deprecated"
|
|
53
|
+
url: "/components/document-notes/deprecated/"
|
|
54
|
+
- name: "Expand/<wbr>Collapse"
|
|
55
|
+
url: "/components/excol/single/"
|
|
56
|
+
pages:
|
|
57
|
+
- name: "Single"
|
|
58
|
+
url: "/components/excol/single/"
|
|
59
|
+
- name: "Multiple"
|
|
60
|
+
url: "/components/excol/multiple/"
|
|
61
|
+
- name: "Figure"
|
|
62
|
+
url: "/components/figure/"
|
|
63
|
+
- name: "Footer (Page & Site)"
|
|
64
|
+
url: "/components/footer/"
|
|
65
|
+
- name: "Form"
|
|
66
|
+
url: "/components/form/elements/"
|
|
67
|
+
pages:
|
|
68
|
+
- name: "Elements"
|
|
69
|
+
url: "/components/form/elements/"
|
|
70
|
+
- name: "Search"
|
|
71
|
+
url: "/components/form/search/"
|
|
72
|
+
- name: "Headings"
|
|
73
|
+
url: "/components/headings/"
|
|
74
|
+
- name: Images
|
|
75
|
+
url: "/components/images/"
|
|
76
|
+
- name: "Lists"
|
|
77
|
+
url: "/components/lists/"
|
|
78
|
+
- name: "Publication Warning"
|
|
79
|
+
url: "/components/publication-warning/"
|
|
80
|
+
- name: "Tables"
|
|
81
|
+
url: "/components/tables/"
|
|
82
|
+
- name: "Video Links"
|
|
83
|
+
url: "/components/video-links/"
|
|
84
|
+
- name: "Video Player"
|
|
85
|
+
url: "/components/video-player/"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
../_external/data/techniques.yml
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
../_external/data/translations.yml
|
data/_data/wcag.yml
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
../_external/data/wcag.yml
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<blockquote{% if include.class %} class="{{ include.class }}"{% endif %}>
|
|
2
|
+
{{ include.content }}
|
|
3
|
+
{%- if include.source %}
|
|
4
|
+
<cite>{%if include.href %}<a href="{{ include.href }}">{%endif%}{{ include.source }}{%if include.href %}</a>{%endif%}</cite>
|
|
5
|
+
{% endif -%}
|
|
6
|
+
</blockquote>
|
data/_includes/box.html
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
{
|
|
2
|
-
{
|
|
1
|
+
{%- if include.type == 'start' -%}
|
|
2
|
+
{%- assign classes = include.class | split: " " -%}
|
|
3
3
|
<aside class="box{% for class in classes %} box-{{ class }}{% endfor %}"{% if include.id %} id="{{include.id}}"{% endif %}>
|
|
4
4
|
{%- if include.title -%}
|
|
5
5
|
<header class="box-h {% for class in classes %} box-h-{{ class }}{% endfor %}{% if include.icon %} box-h-icon{% endif %}">{% if include.icon %} {% include_cached icon.html name=include.icon %}{% endif %}{% if include.h %} <h{{include.h}}>{% endif %} {{ include.title}}{% if include.h %} </h{{include.h}}>{% endif %}</header>
|
|
6
6
|
{%- endif -%}
|
|
7
7
|
<div class="box-i">
|
|
8
|
-
{
|
|
9
|
-
{
|
|
10
|
-
</div>
|
|
11
|
-
</aside>
|
|
12
|
-
{% endif %}
|
|
8
|
+
{%- endif -%}
|
|
9
|
+
{%- if include.type == 'end' -%}</div></aside>{%- endif -%}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{%- if include.type == "fake" -%}
|
|
2
|
+
<span class="button{% for class in include.class %} button-{{ class }}{% endfor %}">{{include.label}}</span>
|
|
3
|
+
{%- else -%}
|
|
4
|
+
{%- if include.type == "link" -%}
|
|
5
|
+
<a class="button{% for class in include.class %} button-{{ class }}{% endfor %}" href="{{ include.href }}"><span>{% if icon %}{% include_cached icon.html name=include.icon %} {% endif %}{{ include.label }}</span></a>
|
|
6
|
+
{%- else -%}
|
|
7
|
+
<button class="button{% for class in include.class %} button-{{ class }}{% endfor %}"{% if include.submit %} type="submit"{% else %} type="submit"{% endif %}{% if include.disabled %} disabled{% endif%}><span>{% if include.icon %}{% include_cached icon.html name=include.icon %} {% endif %}{{ include.label }}</span></button>
|
|
8
|
+
{%- endif -%}
|
|
9
|
+
{%- endif -%}
|
data/_includes/different.html
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
{%- capture thelabel %}{{include.label | default: "Different View"}}{% endcapture -%}
|
|
2
|
-
{% include_cached icon.html name="different-view" label=thelabel %}
|
|
1
|
+
{% comment%}{%- capture thelabel %}{{include.label | default: "Different View"}}{% endcapture -%}
|
|
2
|
+
{% include_cached icon.html name="different-view" label=thelabel %}{% endcomment%}
|
data/_includes/footer.html
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{%- assign col = site.collections | where: "label", page.collection | first -%}
|
|
2
2
|
{%- if page.changelog -%}
|
|
3
|
-
{%- assign
|
|
3
|
+
{%- assign changelogpage=site.documents | where:"ref", page.changelog | first -%}
|
|
4
4
|
{%- unless changelogpage.ref -%}
|
|
5
5
|
{%- assign changelogpage=site.pages | where:"ref", page.changelog | first -%}
|
|
6
6
|
{%- endunless -%}
|
data/_includes/header.html
CHANGED
|
@@ -8,7 +8,7 @@ The first section creates an array of page urls that are page urls of this colle
|
|
|
8
8
|
</p>
|
|
9
9
|
</section>
|
|
10
10
|
{%- endunless -%}
|
|
11
|
-
<nav aria-label="Skip Link
|
|
11
|
+
<nav aria-label="{% include t.html t="Skip Link and Language Selector" %}" id="controls" class="default-grid">
|
|
12
12
|
{% if include.translations[0].ref %}
|
|
13
13
|
{%- comment -%} Translations on this page {%- endcomment-%}
|
|
14
14
|
<ul>
|
|
@@ -58,7 +58,7 @@ The first section creates an array of page urls that are page urls of this colle
|
|
|
58
58
|
</div>
|
|
59
59
|
|
|
60
60
|
<div class="navigations">
|
|
61
|
-
<nav class="metanav" aria-label="Meta & Search">
|
|
61
|
+
<nav class="metanav" aria-label="Meta & Search" lang="en">
|
|
62
62
|
<ul>
|
|
63
63
|
<li><a href="{{ "/about/participating/" | relative_url }}">Get Involved</a></li>
|
|
64
64
|
<li><a href="{{ "/about/" | relative_url }}">About W3C WAI</a></li>
|
|
@@ -157,13 +157,13 @@ The first section creates an array of page urls that are page urls of this colle
|
|
|
157
157
|
{%- endfor -%}
|
|
158
158
|
{%- endif -%}
|
|
159
159
|
|
|
160
|
-
<nav class="mainnav" aria-label="Main" lang="
|
|
160
|
+
<nav class="mainnav" aria-label="{% include t.html t="Main" lang=page.lang %}" lang="{{ page.lang }}">
|
|
161
161
|
{%- if page.url == "/" %}{% assign a_url = "" %}{% endif -%}
|
|
162
|
-
{%- include_cached navlist.html data=site.data.navigation current=a_url -%}
|
|
162
|
+
{%- include_cached navlist.html data=site.data.navigation current=a_url lang=page.lang -%}
|
|
163
163
|
</nav>
|
|
164
164
|
|
|
165
165
|
{%- unless page.url == "/" -%}
|
|
166
|
-
<nav{% comment %} style="grid-column: 2/8; display: flex;"{% endcomment %} class="default-grid breadcrumb" aria-label="Breadcrumb" lang="en">
|
|
166
|
+
<nav{% comment %} style="grid-column: 2/8; display: flex;"{% endcomment %} class="default-grid breadcrumb" aria-label="{% include t.html t="Breadcrumb" lang=page.lang %}" lang="en">
|
|
167
167
|
<ul style="align-self: center;">
|
|
168
168
|
<li><a href="{{ "/" | relative_url }}" lang="en">Home{%comment%}{% include_cached t.html t="Home" lang=pagelang %}{%endcomment%}</a></li>
|
|
169
169
|
{%- unless a_name == "" -%}<li>{% if a_url == enpage.url%}{% include_cached link.html to=a_url text=a_name aria-current="page" lang=page.lang hidelangnotice=true %}{% else %}{% include_cached link.html text=a_name to=a_url lang=page.lang hidelangnotice=true %}{% endif %}</li>{%- endunless -%}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{%- assign repo = page.github.repository | replace: "w3c/", "" -%}
|
|
2
|
+
{%- assign path = "/" | prepend: repo | prepend: "/content-images/" | relative_url -%}
|
|
3
|
+
{%- if include.srcset %}
|
|
4
|
+
{%- assign srcset = "" -%}
|
|
5
|
+
{%- assign srcsetsrces = include.srcset | split: ", " -%}
|
|
6
|
+
{%- for src in srcsetsrces -%}
|
|
7
|
+
{%- unless forloop.last -%}
|
|
8
|
+
{%- assign srcset = srcset | append: path | append: src | append: ", " -%}
|
|
9
|
+
{%- else -%}
|
|
10
|
+
{%- assign srcset = srcset | append: path | append: src -%}
|
|
11
|
+
{%- endunless-%}
|
|
12
|
+
{%- endfor -%}
|
|
13
|
+
{%- endif -%}
|
|
14
|
+
<img src="{{path}}{{include.src}}"{% if include.srcset %} srcset="{{srcset}}"{% endif %} {% if include.sizes %} sizes="{{sizes}}"{% endif %} alt="{{include.alt}}"{% if include.class %} class="{% assign classes = include.class | split: " " %}{% for class in classes %} {{ class }}{% endfor %}"{% endif %}{% if include.style %} style="{{style}}"{% endif %}>
|
data/_includes/link.html
CHANGED
|
@@ -89,4 +89,4 @@
|
|
|
89
89
|
{%- endunless -%}
|
|
90
90
|
{%- endif -%}
|
|
91
91
|
|
|
92
|
-
<a lang="{{linklang}}" href="{{linkurl}}"{% if include.aria-current %} aria-current="{{include.aria-current}}"{% endif %}{% if include.class %} class="{{include.class}}"{% endif %}><span>{{ link_text }}{%- unless in_lang %}{% unless include.hidelangnotice %} <span class="lang" lang="{{pagelang}}" dir="auto" translate="no">({% include_cached t.html t="in English" lang=pagelang %})</span>{% endunless -%}{% endunless -%}{% if include.
|
|
92
|
+
<a lang="{{linklang}}" href="{{linkurl}}"{% if include.aria-current %} aria-current="{{include.aria-current}}"{% endif %}{% if include.class %} class="{{include.class}}"{% endif %}><span>{{ link_text }}{%- unless in_lang %}{% unless include.hidelangnotice %} <span class="lang" lang="{{pagelang}}" dir="auto" translate="no">({% include_cached t.html t="in English" lang=pagelang %})</span>{% endunless -%}{% endunless -%}{% if include.external %} {% include_cached external.html %}{% endif %}</span></a>
|
data/_includes/menuitem.html
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{%- if include.current %}{% assign aria="page" %}{% else %}{% if include.insub%}{% assign aria="location" %}{% endif %}{% endif -%}
|
|
2
2
|
{%- unless include.hide -%}
|
|
3
3
|
<li>
|
|
4
|
-
{% include_cached link.html to=include.url text=include.name aria-current=aria
|
|
4
|
+
{% include_cached link.html to=include.url text=include.name aria-current=aria external=include.external class="page-link" usenavtitle=true lang=page.lang hidelangnotice=true %}
|
|
5
5
|
{%- unless include.submenu == "<ul></ul>" -%}
|
|
6
6
|
{{include.submenu}}
|
|
7
7
|
{%- endunless -%}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
{%- else -%}
|
|
10
10
|
{%- if include.current == true -%}
|
|
11
11
|
<li>
|
|
12
|
-
{% include_cached link.html to=include.url text=include.name aria-current=aria
|
|
12
|
+
{% include_cached link.html to=include.url text=include.name aria-current=aria external=include.external class="page-link" usenavtitle=true lang=page.lang hidelangnotice=true %}
|
|
13
13
|
{%- unless include.submenu == "<ul></ul>" -%}
|
|
14
14
|
{{include.submenu}}
|
|
15
15
|
{%- endunless -%}
|
data/_includes/navlist.html
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
{%- assign the_url = item.pages.first.url -%}
|
|
4
4
|
{%- unless item.mainnav == false -%}
|
|
5
5
|
<li>
|
|
6
|
-
|
|
6
|
+
{%- capture navtitle %}{% include_cached inpl.html lang=include.lang a=item.name %}{% endcapture -%}
|
|
7
|
+
{%- include_cached link.html to=the_url text=navtitle hidelangnotice=true -%}
|
|
7
8
|
</li>
|
|
8
9
|
{%- endunless -%}
|
|
9
10
|
{%- if forloop.last %}</ul>{% endif -%}
|
data/_includes/secondarynav.html
CHANGED
|
@@ -51,9 +51,9 @@
|
|
|
51
51
|
{%- if k.url == searchurl -%}
|
|
52
52
|
{% assign insub = true %}
|
|
53
53
|
{% assign insubsub = true %}
|
|
54
|
-
{% include menuitem.html name=k.name url=k.url
|
|
54
|
+
{% include menuitem.html name=k.name url=k.url hide=k.hide insub=false current=true %}
|
|
55
55
|
{%- else -%}
|
|
56
|
-
{% include menuitem.html name=k.name url=k.url
|
|
56
|
+
{% include menuitem.html name=k.name url=k.url hide=k.hide insub=false current=false %}
|
|
57
57
|
{%- endif -%}
|
|
58
58
|
{%- if forloop.last %}</ul>{% endif -%}
|
|
59
59
|
{%- endfor -%}
|
|
@@ -61,17 +61,17 @@
|
|
|
61
61
|
{%- if forloop.first %}<ul>{% endif -%}
|
|
62
62
|
{%- if j.url == searchurl -%}
|
|
63
63
|
{% assign insub = true %}
|
|
64
|
-
{% include menuitem.html name=j.name url=j.url
|
|
64
|
+
{% include menuitem.html name=j.name url=j.url hide=j.hide insub=insubsub current=true submenu=subsubmenu %}
|
|
65
65
|
{%- else -%}
|
|
66
|
-
{% include menuitem.html name=j.name url=j.url
|
|
66
|
+
{% include menuitem.html name=j.name url=j.url hide=j.hide insub=insubsub current=false submenu=subsubmenu %}
|
|
67
67
|
{%- endif -%}
|
|
68
68
|
{%- if forloop.last %}</ul>{% endif -%}
|
|
69
69
|
{%- endfor -%}
|
|
70
70
|
{%- endcapture -%}
|
|
71
71
|
{%- if i.url == searchurl -%}
|
|
72
|
-
{% include menuitem.html name=i.name url=i.url
|
|
72
|
+
{% include menuitem.html name=i.name url=i.url hide=i.hide insub=insub current=true submenu=submenu %}
|
|
73
73
|
{%- else -%}
|
|
74
|
-
{% include menuitem.html name=i.name url=i.url
|
|
74
|
+
{% include menuitem.html name=i.name url=i.url hide=i.hide insub=insub current=false submenu=submenu %}
|
|
75
75
|
{%- endif -%}
|
|
76
76
|
{%- if forloop.last %}</ul></nav>{% endif -%}
|
|
77
77
|
{%- endfor -%}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<button class="showhidebutton button-icon button-small" data-target="{{ include.target }}" aria-expanded="{% if include.default=="show" %}true{% else %}false{% endif %}" data-showtext="{{ include.showtext | xml_escape }}" data-hidetext="{{ include.hidetext | xml_escape }}">{% if include.default=="show" %}{{ include.hidetext }}{% else %}{{ include.showtext }}{% endif %}</button>
|
data/_includes/toc.html
CHANGED
|
@@ -4,7 +4,21 @@
|
|
|
4
4
|
<header id="tocheading" class="box-h box-h-simple{% for class in classes %} box-h-{{ class }}{% endfor %}{% if input.icon %} box-h-icon{% endif %}">{% if input.icon %} {% include_cached icon.html name=input.icon %}{% endif %} {{ include.title}}</header>
|
|
5
5
|
<div class="box-i">
|
|
6
6
|
{% endif %}
|
|
7
|
-
{% if
|
|
7
|
+
{% if include.type == 'end' %}
|
|
8
8
|
</div>
|
|
9
9
|
</nav>
|
|
10
|
+
{% endif %}
|
|
11
|
+
{% if (include.type != 'start') and (include.type != 'end') %}
|
|
12
|
+
{::nomarkdown}
|
|
13
|
+
{% include toc.html type="start" title="Page Contents" %}
|
|
14
|
+
{:/}
|
|
15
|
+
|
|
16
|
+
{% if include.levels %}{::options toc_levels="{{include.levels}}" /}{% endif %}
|
|
17
|
+
|
|
18
|
+
- This will be replaced by an automatically generated TOC when using Markdown formatting.
|
|
19
|
+
{:toc}
|
|
20
|
+
|
|
21
|
+
{::nomarkdown}
|
|
22
|
+
{% include toc.html type="end" %}
|
|
23
|
+
{:/}
|
|
10
24
|
{% endif %}
|
data/_includes/video-link.html
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{%- assign classes = include.class | split: " " -%}
|
|
2
|
-
<a href="{{ include.href | relative_url }}" class="video-link{% for class in classes %} video-link-{{ class }}{% endfor %}
|
|
2
|
+
<a href="{{ include.href | relative_url }}" class="video-link{% for class in classes %} video-link-{{ class }}{% endfor %}">
|
|
3
3
|
<img src="{{ include.src | relative_url }}" alt="">
|
|
4
4
|
<span>{{ include.title }}</span>
|
|
5
5
|
</a>
|
data/_includes/video-player.html
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{%- assign langs = site.data.lang -%}
|
|
2
2
|
<div class="video-container" data-video-type="" dir="ltr">
|
|
3
|
-
<video preload="metadata" data-youtube-id="{{include.yt-id}}" data-youtube-nocookie="true" width="450">
|
|
3
|
+
<video preload="metadata" data-youtube-id="{{include.yt-id}}" data-youtube-nocookie="true" data-description-audible="false" width="450">
|
|
4
4
|
{%- assign captions = include.captions | split: ',' -%}
|
|
5
5
|
{%- for caption in captions -%}
|
|
6
6
|
{%- assign c = caption | split: '|' -%}
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
</div>
|
|
27
27
|
{% if include.yt-id-ad %}
|
|
28
28
|
<div class="video-container" data-video-type="audio-described">
|
|
29
|
-
<video preload="metadata" data-youtube-id="{{include.yt-id-ad}}" data-youtube-nocookie="true" width="450">
|
|
29
|
+
<video preload="metadata" data-youtube-id="{{include.yt-id-ad}}" data-youtube-nocookie="true" data-description-audible="false" width="450">
|
|
30
30
|
{%- assign captions = include.captions-ad | split: ',' -%}
|
|
31
31
|
{%- for caption in captions -%}
|
|
32
32
|
{%- assign c = caption | split: '|' -%}
|
|
@@ -168,6 +168,20 @@
|
|
|
168
168
|
this.useDescriptionsButton = true;
|
|
169
169
|
}
|
|
170
170
|
|
|
171
|
+
// Silence audio description
|
|
172
|
+
// set to "false" if the sole purposes of the WebVTT descriptions file
|
|
173
|
+
// is to display description text visibly and to integrate it into the transcript
|
|
174
|
+
if ($(media).data('descriptions-audible') !== undefined && $(media).data('descriptions-audible') === false) {
|
|
175
|
+
this.exposeTextDescriptions = false;
|
|
176
|
+
}
|
|
177
|
+
else if ($(media).data('description-audible') !== undefined && $(media).data('description-audible') === false) {
|
|
178
|
+
// support both singular and plural spelling of attribute
|
|
179
|
+
this.exposeTextDescriptions = false;
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
this.exposeTextDescriptions = true;
|
|
183
|
+
}
|
|
184
|
+
|
|
171
185
|
// Headings
|
|
172
186
|
// By default, an off-screen heading is automatically added to the top of the media player
|
|
173
187
|
// It is intelligently assigned a heading level based on context, via misc.js > getNextHeadingLevel()
|
|
@@ -189,6 +203,19 @@
|
|
|
189
203
|
// 3. "popup" - Automatically generated, written to a draggable, resizable popup window that can be toggled on/off with a button
|
|
190
204
|
// If data-include-transcript="false", there is no "popup" transcript
|
|
191
205
|
|
|
206
|
+
if ($(media).data('transcript-div') !== undefined && $(media).data('transcript-div') !== "") {
|
|
207
|
+
this.transcriptDivLocation = $(media).data('transcript-div');
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
this.transcriptDivLocation = null;
|
|
211
|
+
}
|
|
212
|
+
if ($(media).data('include-transcript') !== undefined && $(media).data('include-transcript') === false) {
|
|
213
|
+
this.hideTranscriptButton = true;
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
this.hideTranscriptButton = null;
|
|
217
|
+
}
|
|
218
|
+
|
|
192
219
|
this.transcriptType = null;
|
|
193
220
|
if ($(media).data('transcript-src') !== undefined) {
|
|
194
221
|
this.transcriptSrc = $(media).data('transcript-src');
|
|
@@ -198,15 +225,9 @@
|
|
|
198
225
|
}
|
|
199
226
|
else if ($(media).find('track[kind="captions"], track[kind="subtitles"]').length > 0) {
|
|
200
227
|
// required tracks are present. COULD automatically generate a transcript
|
|
201
|
-
|
|
202
|
-
this.transcriptDivLocation = $(media).data('transcript-div');
|
|
228
|
+
if (this.transcriptDivLocation) {
|
|
203
229
|
this.transcriptType = 'external';
|
|
204
230
|
}
|
|
205
|
-
else if ($(media).data('include-transcript') !== undefined) {
|
|
206
|
-
if ($(media).data('include-transcript') !== false) {
|
|
207
|
-
this.transcriptType = 'popup';
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
231
|
else {
|
|
211
232
|
this.transcriptType = 'popup';
|
|
212
233
|
}
|
|
@@ -258,18 +279,6 @@
|
|
|
258
279
|
this.defaultChapter = null;
|
|
259
280
|
}
|
|
260
281
|
|
|
261
|
-
// Previous/Next buttons
|
|
262
|
-
// valid values of data-prevnext-unit are 'playlist' and 'chapter'; will also accept 'chapters'
|
|
263
|
-
if ($(media).data('prevnext-unit') === 'chapter' || $(media).data('prevnext-unit') === 'chapters') {
|
|
264
|
-
this.prevNextUnit = 'chapter';
|
|
265
|
-
}
|
|
266
|
-
else if ($(media).data('prevnext-unit') === 'playlist') {
|
|
267
|
-
this.prevNextUnit = 'playlist';
|
|
268
|
-
}
|
|
269
|
-
else {
|
|
270
|
-
this.prevNextUnit = false;
|
|
271
|
-
}
|
|
272
|
-
|
|
273
282
|
// Slower/Faster buttons
|
|
274
283
|
// valid values of data-speed-icons are 'animals' (default) and 'arrows'
|
|
275
284
|
// 'animals' uses turtle and rabbit; 'arrows' uses up/down arrows
|
|
@@ -757,7 +766,7 @@
|
|
|
757
766
|
svg[1] = 'M7.839 1.536c0.501-0.501 0.911-0.331 0.911 0.378v16.172c0 0.709-0.41 0.879-0.911 0.378l-4.714-4.713h-3.125v-7.5h3.125l4.714-4.714zM18.75 12.093v1.657h-1.657l-2.093-2.093-2.093 2.093h-1.657v-1.657l2.093-2.093-2.093-2.093v-1.657h1.657l2.093 2.093 2.093-2.093h1.657v1.657l-2.093 2.093z';
|
|
758
767
|
break;
|
|
759
768
|
|
|
760
|
-
case 'volume-
|
|
769
|
+
case 'volume-soft':
|
|
761
770
|
svg[0] = '0 0 20 20';
|
|
762
771
|
svg[1] = 'M10.723 14.473c-0.24 0-0.48-0.092-0.663-0.275-0.366-0.366-0.366-0.96 0-1.326 1.584-1.584 1.584-4.161 0-5.745-0.366-0.366-0.366-0.96 0-1.326s0.96-0.366 1.326 0c2.315 2.315 2.315 6.082 0 8.397-0.183 0.183-0.423 0.275-0.663 0.275zM7.839 1.536c0.501-0.501 0.911-0.331 0.911 0.378v16.172c0 0.709-0.41 0.879-0.911 0.378l-4.714-4.713h-3.125v-7.5h3.125l4.714-4.714z';
|
|
763
772
|
break;
|
|
@@ -984,7 +993,7 @@
|
|
|
984
993
|
this.iconType = 'image';
|
|
985
994
|
}
|
|
986
995
|
if (this.debug) {
|
|
987
|
-
|
|
996
|
+
|
|
988
997
|
}
|
|
989
998
|
if (typeof $tempButton !== 'undefined') {
|
|
990
999
|
$tempButton.remove();
|
|
@@ -1144,11 +1153,10 @@
|
|
|
1144
1153
|
thisObj.showSearchResults();
|
|
1145
1154
|
|
|
1146
1155
|
// Go ahead and load media, without user requesting it
|
|
1147
|
-
//
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
if (thisObj.player === 'html5'
|
|
1151
|
-
(thisObj.isIOS() || thisObj.startTime > 0 || thisObj.autoplay || thisObj.okToPlay)) {
|
|
1156
|
+
// Ideally, we would wait until user clicks play, rather than unnecessarily consume their bandwidth
|
|
1157
|
+
// However, the media needs to load before the 'loadedmetadata' event is fired
|
|
1158
|
+
// and until that happens we can't get the media's duration
|
|
1159
|
+
if (thisObj.player === 'html5') {
|
|
1152
1160
|
thisObj.$media[0].load();
|
|
1153
1161
|
}
|
|
1154
1162
|
// refreshControls is called twice building/initializing the player
|
|
@@ -1571,7 +1579,7 @@
|
|
|
1571
1579
|
});
|
|
1572
1580
|
prefs.push({
|
|
1573
1581
|
'name': 'prefDescFormat', // audio description default state
|
|
1574
|
-
'label':
|
|
1582
|
+
'label': null,
|
|
1575
1583
|
'group': 'descriptions',
|
|
1576
1584
|
'default': 'video'
|
|
1577
1585
|
});
|
|
@@ -1630,7 +1638,7 @@
|
|
|
1630
1638
|
var available, thisObj, $prefsDiv, formTitle, introText,
|
|
1631
1639
|
$prefsIntro,$prefsIntroP2,p3Text,$prefsIntroP3,i, j,
|
|
1632
1640
|
$fieldset, fieldsetClass, fieldsetId,
|
|
1633
|
-
$
|
|
1641
|
+
$descFieldset, $descLegend, $legend,
|
|
1634
1642
|
thisPref, $thisDiv, thisClass, thisId, $thisLabel, $thisField,
|
|
1635
1643
|
$div1,id1,$radio1,$label1,
|
|
1636
1644
|
$div2,id2,$radio2,$label2,
|
|
@@ -1728,35 +1736,17 @@
|
|
|
1728
1736
|
$prefsDiv.append($prefsIntro);
|
|
1729
1737
|
}
|
|
1730
1738
|
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
$descFieldset1.addClass(fieldsetClass).attr('id',fieldsetId);
|
|
1739
|
-
$descLegend1 = $('<legend>' + this.tt.prefDescFormat + '</legend>');
|
|
1740
|
-
$descFieldset1.append($descLegend1);
|
|
1741
|
-
|
|
1742
|
-
// Fieldset 2
|
|
1743
|
-
$descFieldset2 = $('<fieldset>');
|
|
1744
|
-
fieldsetClass = 'able-prefs-' + form + '2';
|
|
1745
|
-
fieldsetId = this.mediaId + '-prefs-' + form + '2';
|
|
1746
|
-
$descFieldset2.addClass(fieldsetClass).attr('id',fieldsetId);
|
|
1747
|
-
$descLegend2 = $('<legend>' + this.tt.prefHeadingTextDescription + '</legend>');
|
|
1748
|
-
$descFieldset2.append($descLegend2);
|
|
1739
|
+
$fieldset = $('<fieldset>');
|
|
1740
|
+
fieldsetClass = 'able-prefs-' + form;
|
|
1741
|
+
fieldsetId = this.mediaId + '-prefs-' + form;
|
|
1742
|
+
$fieldset.addClass(fieldsetClass).attr('id',fieldsetId);
|
|
1743
|
+
if (form === 'keyboard') {
|
|
1744
|
+
$legend = $('<legend>' + this.tt.prefHeadingKeyboard1 + '</legend>');
|
|
1745
|
+
$fieldset.append($legend);
|
|
1749
1746
|
}
|
|
1750
|
-
else {
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
fieldsetClass = 'able-prefs-' + form;
|
|
1754
|
-
fieldsetId = this.mediaId + '-prefs-' + form;
|
|
1755
|
-
$fieldset.addClass(fieldsetClass).attr('id',fieldsetId);
|
|
1756
|
-
if (form === 'keyboard') {
|
|
1757
|
-
$legend = $('<legend>' + this.tt.prefHeadingKeyboard1 + '</legend>');
|
|
1758
|
-
$fieldset.append($legend);
|
|
1759
|
-
}
|
|
1747
|
+
else if (form === 'descriptions') {
|
|
1748
|
+
$legend = $('<legend>' + this.tt.prefHeadingTextDescription + '</legend>');
|
|
1749
|
+
$fieldset.append($legend);
|
|
1760
1750
|
}
|
|
1761
1751
|
for (i=0; i<available.length; i++) {
|
|
1762
1752
|
|
|
@@ -1766,48 +1756,9 @@
|
|
|
1766
1756
|
thisPref = available[i]['name'];
|
|
1767
1757
|
thisClass = 'able-' + thisPref;
|
|
1768
1758
|
thisId = this.mediaId + '_' + thisPref;
|
|
1769
|
-
|
|
1770
|
-
$thisDiv = $('<div>').addClass(thisClass);
|
|
1771
|
-
}
|
|
1759
|
+
$thisDiv = $('<div>').addClass(thisClass);
|
|
1772
1760
|
|
|
1773
|
-
|
|
1774
|
-
if (thisPref == 'prefDescFormat') {
|
|
1775
|
-
|
|
1776
|
-
// option 1 radio button
|
|
1777
|
-
$div1 = $('<div>');
|
|
1778
|
-
id1 = thisId + '_1';
|
|
1779
|
-
$label1 = $('<label>')
|
|
1780
|
-
.attr('for',id1)
|
|
1781
|
-
.text(this.capitalizeFirstLetter(this.tt.prefDescFormatOption1))
|
|
1782
|
-
$radio1 = $('<input>',{
|
|
1783
|
-
type: 'radio',
|
|
1784
|
-
name: thisPref,
|
|
1785
|
-
id: id1,
|
|
1786
|
-
value: 'video'
|
|
1787
|
-
});
|
|
1788
|
-
if (this.prefDescFormat === 'video') {
|
|
1789
|
-
$radio1.prop('checked',true);
|
|
1790
|
-
};
|
|
1791
|
-
$div1.append($radio1,$label1);
|
|
1792
|
-
|
|
1793
|
-
// option 2 radio button
|
|
1794
|
-
$div2 = $('<div>');
|
|
1795
|
-
id2 = thisId + '_2';
|
|
1796
|
-
$label2 = $('<label>')
|
|
1797
|
-
.attr('for',id2)
|
|
1798
|
-
.text(this.capitalizeFirstLetter(this.tt.prefDescFormatOption2));
|
|
1799
|
-
$radio2 = $('<input>',{
|
|
1800
|
-
type: 'radio',
|
|
1801
|
-
name: thisPref,
|
|
1802
|
-
id: id2,
|
|
1803
|
-
value: 'text'
|
|
1804
|
-
});
|
|
1805
|
-
if (this.prefDescFormat === 'text') {
|
|
1806
|
-
$radio2.prop('checked',true);
|
|
1807
|
-
};
|
|
1808
|
-
$div2.append($radio2,$label2);
|
|
1809
|
-
}
|
|
1810
|
-
else if (form === 'captions') {
|
|
1761
|
+
if (form === 'captions') {
|
|
1811
1762
|
$thisLabel = $('<label for="' + thisId + '"> ' + available[i]['label'] + '</label>');
|
|
1812
1763
|
$thisField = $('<select>',{
|
|
1813
1764
|
name: thisPref,
|
|
@@ -1899,25 +1850,11 @@
|
|
|
1899
1850
|
}
|
|
1900
1851
|
$thisDiv.append($thisField,$thisLabel);
|
|
1901
1852
|
}
|
|
1902
|
-
|
|
1903
|
-
if (thisPref === 'prefDescFormat') {
|
|
1904
|
-
$descFieldset1.append($div1,$div2);
|
|
1905
|
-
}
|
|
1906
|
-
else {
|
|
1907
|
-
$descFieldset2.append($thisDiv);
|
|
1908
|
-
}
|
|
1909
|
-
}
|
|
1910
|
-
else {
|
|
1911
|
-
$fieldset.append($thisDiv);
|
|
1912
|
-
}
|
|
1853
|
+
$fieldset.append($thisDiv);
|
|
1913
1854
|
}
|
|
1914
1855
|
}
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
}
|
|
1918
|
-
else {
|
|
1919
|
-
$prefsDiv.append($fieldset);
|
|
1920
|
-
}
|
|
1856
|
+
$prefsDiv.append($fieldset);
|
|
1857
|
+
|
|
1921
1858
|
if (form === 'captions') {
|
|
1922
1859
|
// add a sample closed caption div to prefs dialog
|
|
1923
1860
|
if (this.mediaType === 'video') {
|
|
@@ -1946,6 +1883,14 @@
|
|
|
1946
1883
|
kbLabels.push(this.tt.restart);
|
|
1947
1884
|
keys.push('s');
|
|
1948
1885
|
}
|
|
1886
|
+
else if (this.controls[i] === 'previous') {
|
|
1887
|
+
kbLabels.push(this.tt.prevTrack);
|
|
1888
|
+
keys.push('b'); // b = back
|
|
1889
|
+
}
|
|
1890
|
+
else if (this.controls[i] === 'next') {
|
|
1891
|
+
kbLabels.push(this.tt.nextTrack);
|
|
1892
|
+
keys.push('n');
|
|
1893
|
+
}
|
|
1949
1894
|
else if (this.controls[i] === 'rewind') {
|
|
1950
1895
|
kbLabels.push(this.tt.rewind);
|
|
1951
1896
|
keys.push('r');
|
|
@@ -2096,15 +2041,7 @@
|
|
|
2096
2041
|
available = this.getAvailablePreferences();
|
|
2097
2042
|
for (i=0; i<available.length; i++) {
|
|
2098
2043
|
prefName = available[i]['name'];
|
|
2099
|
-
if (prefName
|
|
2100
|
-
if (this[prefName] === 'text') {
|
|
2101
|
-
$('input[value="text"]').prop('checked',true);
|
|
2102
|
-
}
|
|
2103
|
-
else {
|
|
2104
|
-
$('input[value="video"]').prop('checked',true);
|
|
2105
|
-
}
|
|
2106
|
-
}
|
|
2107
|
-
else if ((prefName.indexOf('Captions') !== -1) && (prefName !== 'prefCaptions')) {
|
|
2044
|
+
if ((prefName.indexOf('Captions') !== -1) && (prefName !== 'prefCaptions')) {
|
|
2108
2045
|
// this is a caption-related select box
|
|
2109
2046
|
$('select[name="' + prefName + '"]').val(cookie.preferences[prefName]);
|
|
2110
2047
|
}
|
|
@@ -2137,8 +2074,10 @@
|
|
|
2137
2074
|
if (available[i]['label']) {
|
|
2138
2075
|
var prefName = available[i]['name'];
|
|
2139
2076
|
if (prefName == 'prefDescFormat') {
|
|
2140
|
-
|
|
2141
|
-
|
|
2077
|
+
// As of v4.0.10, prefDescFormat is no longer a choice
|
|
2078
|
+
// this.prefDescFormat = $('input[name="' + prefName + '"]:checked').val();
|
|
2079
|
+
this.prefDescFormat = 'video';
|
|
2080
|
+
if (this.prefDescFormat !== cookie.preferences['prefDescFormat']) { // user's preference has changed
|
|
2142
2081
|
cookie.preferences['prefDescFormat'] = this.prefDescFormat;
|
|
2143
2082
|
numChanges++;
|
|
2144
2083
|
}
|
|
@@ -2292,10 +2231,10 @@
|
|
|
2292
2231
|
errString += 'Column: ' + parserState.column + '\n';
|
|
2293
2232
|
errString += err;
|
|
2294
2233
|
if (console.warn) {
|
|
2295
|
-
|
|
2234
|
+
|
|
2296
2235
|
}
|
|
2297
2236
|
else if (console.log) {
|
|
2298
|
-
|
|
2237
|
+
|
|
2299
2238
|
}
|
|
2300
2239
|
}
|
|
2301
2240
|
return parserState;
|
|
@@ -2481,10 +2420,10 @@
|
|
|
2481
2420
|
errString += 'Column: ' + state.column + '\n';
|
|
2482
2421
|
errString += 'Expected cue timing for cueId \''+cueId+'\' but found: ' + nextLine + '\n';
|
|
2483
2422
|
if (console.warn) {
|
|
2484
|
-
|
|
2423
|
+
|
|
2485
2424
|
}
|
|
2486
2425
|
else if (console.log) {
|
|
2487
|
-
|
|
2426
|
+
|
|
2488
2427
|
}
|
|
2489
2428
|
return; // Return leaving line for parseCuesAndComments to handle
|
|
2490
2429
|
}
|
|
@@ -3187,10 +3126,14 @@
|
|
|
3187
3126
|
// create a div for exposing description
|
|
3188
3127
|
// description will be exposed via role="alert" & announced by screen readers
|
|
3189
3128
|
this.$descDiv = $('<div>',{
|
|
3190
|
-
'class': 'able-descriptions'
|
|
3191
|
-
'aria-live': 'assertive',
|
|
3192
|
-
'aria-atomic': 'true'
|
|
3129
|
+
'class': 'able-descriptions'
|
|
3193
3130
|
});
|
|
3131
|
+
if (this.exposeTextDescriptions) {
|
|
3132
|
+
this.$descDiv.attr({
|
|
3133
|
+
'aria-live': 'assertive',
|
|
3134
|
+
'aria-atomic': 'true'
|
|
3135
|
+
});
|
|
3136
|
+
}
|
|
3194
3137
|
// Start off with description hidden.
|
|
3195
3138
|
// It will be exposed conditionally within description.js > initDescription()
|
|
3196
3139
|
this.$descDiv.hide();
|
|
@@ -3843,6 +3786,11 @@
|
|
|
3843
3786
|
'br': []
|
|
3844
3787
|
}
|
|
3845
3788
|
|
|
3789
|
+
if (this.hasPlaylist) {
|
|
3790
|
+
controlLayout['ur'].push('previous');
|
|
3791
|
+
controlLayout['ur'].push('next');
|
|
3792
|
+
}
|
|
3793
|
+
|
|
3846
3794
|
// test for browser support for volume before displaying volume button
|
|
3847
3795
|
if (this.browserSupportsVolume()) {
|
|
3848
3796
|
// volume buttons are: 'mute','volume-soft','volume-medium','volume-loud'
|
|
@@ -3874,7 +3822,7 @@
|
|
|
3874
3822
|
bll.push('descriptions'); //audio description
|
|
3875
3823
|
}
|
|
3876
3824
|
}
|
|
3877
|
-
if (this.transcriptType === 'popup') {
|
|
3825
|
+
if (this.transcriptType === 'popup' && !(this.hideTranscriptButton)) {
|
|
3878
3826
|
bll.push('transcript');
|
|
3879
3827
|
}
|
|
3880
3828
|
|
|
@@ -3955,7 +3903,7 @@
|
|
|
3955
3903
|
$controllerSpan.append($sliderDiv);
|
|
3956
3904
|
if (typeof this.duration === 'undefined' || this.duration === 0) {
|
|
3957
3905
|
// set arbitrary starting duration, and change it when duration is known
|
|
3958
|
-
this.duration =
|
|
3906
|
+
this.duration = 60;
|
|
3959
3907
|
// also set elapsed to 0
|
|
3960
3908
|
this.elapsed = 0;
|
|
3961
3909
|
}
|
|
@@ -4720,6 +4668,12 @@
|
|
|
4720
4668
|
else if (control === 'restart') {
|
|
4721
4669
|
return this.tt.restart;
|
|
4722
4670
|
}
|
|
4671
|
+
else if (control === 'previous') {
|
|
4672
|
+
return this.tt.prevTrack;
|
|
4673
|
+
}
|
|
4674
|
+
else if (control === 'next') {
|
|
4675
|
+
return this.tt.nextTrack;
|
|
4676
|
+
}
|
|
4723
4677
|
else if (control === 'rewind') {
|
|
4724
4678
|
return this.tt.rewind;
|
|
4725
4679
|
}
|
|
@@ -4781,7 +4735,7 @@
|
|
|
4781
4735
|
// return the name of the control with first letter in upper case
|
|
4782
4736
|
// ultimately will need to get a translated label from this.tt
|
|
4783
4737
|
if (this.debug) {
|
|
4784
|
-
|
|
4738
|
+
|
|
4785
4739
|
}
|
|
4786
4740
|
return control.charAt(0).toUpperCase() + control.slice(1);
|
|
4787
4741
|
}
|
|
@@ -5159,7 +5113,7 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
5159
5113
|
$tempDiv.load(src, function (trackText, status, req) {
|
|
5160
5114
|
if (status === 'error') {
|
|
5161
5115
|
if (thisObj.debug) {
|
|
5162
|
-
|
|
5116
|
+
|
|
5163
5117
|
}
|
|
5164
5118
|
deferred.fail();
|
|
5165
5119
|
}
|
|
@@ -5531,7 +5485,7 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
5531
5485
|
deferred.resolve();
|
|
5532
5486
|
})
|
|
5533
5487
|
.fail(function(){
|
|
5534
|
-
|
|
5488
|
+
|
|
5535
5489
|
});
|
|
5536
5490
|
}
|
|
5537
5491
|
else {
|
|
@@ -5662,8 +5616,8 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
5662
5616
|
// Should still proceed, but with captions disabled
|
|
5663
5617
|
// The specific error, if needed: reason.result.error.message
|
|
5664
5618
|
// If no captions, the error is: "The video identified by the <code>videoId</code> parameter could not be found."
|
|
5665
|
-
|
|
5666
|
-
|
|
5619
|
+
|
|
5620
|
+
|
|
5667
5621
|
thisObj.hasCaptions = false;
|
|
5668
5622
|
thisObj.usingYouTubeCaptions = false;
|
|
5669
5623
|
deferred.resolve();
|
|
@@ -5766,7 +5720,7 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
5766
5720
|
}
|
|
5767
5721
|
},
|
|
5768
5722
|
error: function(xhr, status) {
|
|
5769
|
-
|
|
5723
|
+
|
|
5770
5724
|
deferred.resolve();
|
|
5771
5725
|
}
|
|
5772
5726
|
});
|
|
@@ -6505,7 +6459,7 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
6505
6459
|
|
|
6506
6460
|
AblePlayer.prototype.refreshVolumeButton = function(volume) {
|
|
6507
6461
|
|
|
6508
|
-
var volumeName, volumePct, volumeLabel, volumeIconClass, volumeImg;
|
|
6462
|
+
var volumeName, volumePct, volumeLabel, volumeIconClass, volumeImg, newSvgData;
|
|
6509
6463
|
|
|
6510
6464
|
volumeName = this.getVolumeName(volume);
|
|
6511
6465
|
volumePct = (volume/10) * 100;
|
|
@@ -6516,10 +6470,18 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
6516
6470
|
this.$volumeButton.find('span').first().removeClass().addClass(volumeIconClass);
|
|
6517
6471
|
this.$volumeButton.find('span.able-clipped').text(volumeLabel);
|
|
6518
6472
|
}
|
|
6519
|
-
else {
|
|
6473
|
+
else if (this.iconType === 'image') {
|
|
6520
6474
|
volumeImg = this.imgPath + 'volume-' + volumeName + '.png';
|
|
6521
6475
|
this.$volumeButton.find('img').attr('src',volumeImg);
|
|
6522
6476
|
}
|
|
6477
|
+
else if (this.iconType === 'svg') {
|
|
6478
|
+
if (volumeName !== 'mute') {
|
|
6479
|
+
volumeName = 'volume-' + volumeName;
|
|
6480
|
+
}
|
|
6481
|
+
newSvgData = this.getSvgData(volumeName);
|
|
6482
|
+
this.$volumeButton.find('svg').attr('viewBox',newSvgData[0]);
|
|
6483
|
+
this.$volumeButton.find('path').attr('d',newSvgData[1]);
|
|
6484
|
+
}
|
|
6523
6485
|
};
|
|
6524
6486
|
|
|
6525
6487
|
AblePlayer.prototype.moveVolumeHead = function(y) {
|
|
@@ -6617,6 +6579,7 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
6617
6579
|
};
|
|
6618
6580
|
|
|
6619
6581
|
AblePlayer.prototype.handleMute = function() {
|
|
6582
|
+
|
|
6620
6583
|
if (this.isMuted()) {
|
|
6621
6584
|
this.setMute(false);
|
|
6622
6585
|
}
|
|
@@ -7095,17 +7058,20 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
7095
7058
|
|
|
7096
7059
|
// The following variables are applicable to delivery of description:
|
|
7097
7060
|
// prefDesc == 1 if user wants description (i.e., Description button is on); else 0
|
|
7098
|
-
// prefDescFormat == either 'video' or 'text'
|
|
7061
|
+
// prefDescFormat == either 'video' or 'text' (as of v4.0.10, prefDescFormat is always 'video')
|
|
7099
7062
|
// prefDescPause == 1 to pause video when description starts; else 0
|
|
7100
7063
|
// prefVisibleDesc == 1 to visibly show text-based description area; else 0
|
|
7101
7064
|
// hasOpenDesc == true if a described version of video is available via data-desc-src attribute
|
|
7102
7065
|
// hasClosedDesc == true if a description text track is available
|
|
7103
7066
|
// this.useDescFormat == either 'video' or 'text'; the format ultimately delivered
|
|
7104
7067
|
// descOn == true if description of either type is on
|
|
7068
|
+
// exposeTextDescriptions == true if text description is to be announced audibly; otherwise false
|
|
7105
7069
|
|
|
7106
7070
|
var thisObj = this;
|
|
7107
|
-
|
|
7108
|
-
|
|
7071
|
+
if (this.refreshingDesc) {
|
|
7072
|
+
this.prevDescFormat = this.useDescFormat;
|
|
7073
|
+
}
|
|
7074
|
+
else {
|
|
7109
7075
|
// this is the initial build
|
|
7110
7076
|
// first, check to see if there's an open-described version of this video
|
|
7111
7077
|
// checks only the first source since if a described version is provided,
|
|
@@ -7125,12 +7091,15 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
7125
7091
|
}
|
|
7126
7092
|
}
|
|
7127
7093
|
}
|
|
7094
|
+
|
|
7128
7095
|
// update this.useDescFormat based on media availability & user preferences
|
|
7129
7096
|
if (this.prefDesc) {
|
|
7130
7097
|
if (this.hasOpenDesc && this.hasClosedDesc) {
|
|
7131
|
-
// both formats are available.
|
|
7098
|
+
// both formats are available. Always use 'video'
|
|
7132
7099
|
this.useDescFormat = this.prefDescFormat;
|
|
7133
7100
|
this.descOn = true;
|
|
7101
|
+
// Do not pause during descriptions when playing described video
|
|
7102
|
+
this.prefDescPause = false;
|
|
7134
7103
|
}
|
|
7135
7104
|
else if (this.hasOpenDesc) {
|
|
7136
7105
|
this.useDescFormat = 'video';
|
|
@@ -7142,14 +7111,8 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
7142
7111
|
}
|
|
7143
7112
|
}
|
|
7144
7113
|
else { // description button is off
|
|
7145
|
-
|
|
7146
|
-
|
|
7147
|
-
this.useDescFormat = false;
|
|
7148
|
-
this.descOn = false;
|
|
7149
|
-
}
|
|
7150
|
-
else { // desc has always been off
|
|
7151
|
-
this.useDescFormat = false;
|
|
7152
|
-
}
|
|
7114
|
+
this.useDescFormat = false;
|
|
7115
|
+
this.descOn = false;
|
|
7153
7116
|
}
|
|
7154
7117
|
|
|
7155
7118
|
if (this.useDescFormat === 'text') {
|
|
@@ -7181,22 +7144,21 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
7181
7144
|
}
|
|
7182
7145
|
}
|
|
7183
7146
|
if (this.descOn) {
|
|
7184
|
-
|
|
7185
7147
|
if (this.useDescFormat === 'video') {
|
|
7186
7148
|
if (!this.usingAudioDescription()) {
|
|
7187
7149
|
// switched from non-described to described version
|
|
7188
7150
|
this.swapDescription();
|
|
7189
7151
|
}
|
|
7190
|
-
// hide description div
|
|
7191
|
-
this.$descDiv.hide();
|
|
7192
|
-
this.$descDiv.removeClass('able-clipped');
|
|
7193
7152
|
}
|
|
7194
|
-
|
|
7195
|
-
this
|
|
7196
|
-
|
|
7153
|
+
if (this.hasClosedDesc) {
|
|
7154
|
+
if (this.prefVisibleDesc) {
|
|
7155
|
+
// make description text visible
|
|
7156
|
+
// New in v4.0.10: Do this regardless of useDescFormat
|
|
7157
|
+
this.$descDiv.show();
|
|
7197
7158
|
this.$descDiv.removeClass('able-clipped');
|
|
7198
7159
|
}
|
|
7199
|
-
else {
|
|
7160
|
+
else {
|
|
7161
|
+
// keep it visible to screen readers, but hide it visibly
|
|
7200
7162
|
this.$descDiv.addClass('able-clipped');
|
|
7201
7163
|
}
|
|
7202
7164
|
if (!this.swappingSrc) {
|
|
@@ -7205,7 +7167,6 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
7205
7167
|
}
|
|
7206
7168
|
}
|
|
7207
7169
|
else { // description is off.
|
|
7208
|
-
|
|
7209
7170
|
if (this.prevDescFormat === 'video') { // user was previously using description via video
|
|
7210
7171
|
if (this.usingAudioDescription()) {
|
|
7211
7172
|
this.swapDescription();
|
|
@@ -7235,7 +7196,6 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
7235
7196
|
};
|
|
7236
7197
|
|
|
7237
7198
|
AblePlayer.prototype.swapDescription = function() {
|
|
7238
|
-
|
|
7239
7199
|
// swap described and non-described source media, depending on which is playing
|
|
7240
7200
|
// this function is only called in two circumstances:
|
|
7241
7201
|
// 1. Swapping to described version when initializing player (based on user prefs & availability)
|
|
@@ -7358,7 +7318,7 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
7358
7318
|
// there's a lot of redundancy between this function and showCaptions
|
|
7359
7319
|
// Trying to combine them ended up in a mess though. Keeping as is for now.
|
|
7360
7320
|
|
|
7361
|
-
if (this.swappingSrc) {
|
|
7321
|
+
if (this.swappingSrc || !this.descOn) {
|
|
7362
7322
|
return;
|
|
7363
7323
|
}
|
|
7364
7324
|
|
|
@@ -7398,7 +7358,10 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
7398
7358
|
// temporarily remove aria-live from $status in order to prevent description from being interrupted
|
|
7399
7359
|
this.$status.removeAttr('aria-live');
|
|
7400
7360
|
descText = flattenComponentForDescription(cues[thisDescription].components);
|
|
7401
|
-
if (
|
|
7361
|
+
if (
|
|
7362
|
+
this.exposeTextDescriptions &&
|
|
7363
|
+
typeof this.synth !== 'undefined' &&
|
|
7364
|
+
typeof this.descVoiceIndex !== 'undefined') {
|
|
7402
7365
|
// browser supports speech synthesis and a voice has been selected in initDescription()
|
|
7403
7366
|
// use the web speech API
|
|
7404
7367
|
msg = new SpeechSynthesisUtterance();
|
|
@@ -7414,7 +7377,7 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
7414
7377
|
if (thisObj.pausedForDescription) {
|
|
7415
7378
|
thisObj.playMedia();
|
|
7416
7379
|
}
|
|
7417
|
-
|
|
7380
|
+
};
|
|
7418
7381
|
this.synth.speak(msg);
|
|
7419
7382
|
if (this.prefVisibleDesc) {
|
|
7420
7383
|
// write description to the screen for sighted users
|
|
@@ -7427,7 +7390,7 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
7427
7390
|
// load the new description into the container div for screen readers to read
|
|
7428
7391
|
this.$descDiv.html(descText);
|
|
7429
7392
|
}
|
|
7430
|
-
if (this.prefDescPause) {
|
|
7393
|
+
if (this.prefDescPause && this.exposeTextDescriptions) {
|
|
7431
7394
|
this.pauseMedia();
|
|
7432
7395
|
this.pausedForDescription = true;
|
|
7433
7396
|
}
|
|
@@ -7520,11 +7483,11 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
7520
7483
|
this.userAgent.os = "Linux";
|
|
7521
7484
|
}
|
|
7522
7485
|
if (this.debug) {
|
|
7523
|
-
|
|
7524
|
-
|
|
7525
|
-
|
|
7526
|
-
|
|
7527
|
-
|
|
7486
|
+
|
|
7487
|
+
|
|
7488
|
+
|
|
7489
|
+
|
|
7490
|
+
|
|
7528
7491
|
}
|
|
7529
7492
|
};
|
|
7530
7493
|
|
|
@@ -7532,7 +7495,7 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
7532
7495
|
|
|
7533
7496
|
var userAgent = navigator.userAgent.toLowerCase();
|
|
7534
7497
|
if (this.debug) {
|
|
7535
|
-
|
|
7498
|
+
|
|
7536
7499
|
}
|
|
7537
7500
|
if (userAgent.indexOf(which.toLowerCase()) !== -1) {
|
|
7538
7501
|
return true;
|
|
@@ -8163,30 +8126,27 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
8163
8126
|
if (typeof this.$elapsedTimeContainer !== 'undefined') {
|
|
8164
8127
|
this.$elapsedTimeContainer.text(this.formatSecondsAsColonTime(displayElapsed));
|
|
8165
8128
|
}
|
|
8166
|
-
|
|
8167
8129
|
// Update seekbar width.
|
|
8168
8130
|
// To do this, we need to calculate the width of all buttons surrounding it.
|
|
8169
8131
|
if (this.seekBar) {
|
|
8170
8132
|
widthUsed = 0;
|
|
8171
|
-
seekbarSpacer = 40; // adjust for discrepancies in browsers' calculated button widths
|
|
8172
|
-
|
|
8173
8133
|
leftControls = this.seekBar.wrapperDiv.parent().prev('div.able-left-controls');
|
|
8174
8134
|
rightControls = leftControls.next('div.able-right-controls');
|
|
8175
8135
|
leftControls.children().each(function () {
|
|
8176
8136
|
if ($(this).prop('tagName')=='BUTTON') {
|
|
8177
|
-
widthUsed += $(this).
|
|
8137
|
+
widthUsed += $(this).outerWidth(true); // true = include margin
|
|
8178
8138
|
}
|
|
8179
8139
|
});
|
|
8180
8140
|
rightControls.children().each(function () {
|
|
8181
8141
|
if ($(this).prop('tagName')=='BUTTON') {
|
|
8182
|
-
widthUsed += $(this).
|
|
8142
|
+
widthUsed += $(this).outerWidth(true);
|
|
8183
8143
|
}
|
|
8184
8144
|
});
|
|
8185
8145
|
if (this.fullscreen) {
|
|
8186
|
-
seekbarWidth = $(window).width() - widthUsed
|
|
8146
|
+
seekbarWidth = $(window).width() - widthUsed;
|
|
8187
8147
|
}
|
|
8188
8148
|
else {
|
|
8189
|
-
seekbarWidth = this.$ableWrapper.width() - widthUsed
|
|
8149
|
+
seekbarWidth = this.$ableWrapper.width() - widthUsed;
|
|
8190
8150
|
}
|
|
8191
8151
|
// Sometimes some minor fluctuations based on browser weirdness, so set a threshold.
|
|
8192
8152
|
if (Math.abs(seekbarWidth - this.seekBar.getWidth()) > 5) {
|
|
@@ -8437,7 +8397,7 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
8437
8397
|
|
|
8438
8398
|
// Don't change play/pause button display while using the seek bar (or if YouTube stopped)
|
|
8439
8399
|
if (!thisObj.seekBar.tracking && !thisObj.stoppingYouTube) {
|
|
8440
|
-
if (currentState === 'paused' || currentState === 'stopped') {
|
|
8400
|
+
if (currentState === 'paused' || currentState === 'stopped' || currentState === 'ended') {
|
|
8441
8401
|
thisObj.$playpauseButton.attr('aria-label',thisObj.tt.play);
|
|
8442
8402
|
|
|
8443
8403
|
if (thisObj.iconType === 'font') {
|
|
@@ -8538,6 +8498,34 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
8538
8498
|
this.seekTo(0);
|
|
8539
8499
|
};
|
|
8540
8500
|
|
|
8501
|
+
AblePlayer.prototype.handlePrevTrack = function() {
|
|
8502
|
+
|
|
8503
|
+
if (this.playlistIndex === 0) {
|
|
8504
|
+
// currently on the first track
|
|
8505
|
+
// wrap to bottom and play the last track
|
|
8506
|
+
this.playlistIndex = this.$playlist.length - 1;
|
|
8507
|
+
}
|
|
8508
|
+
else {
|
|
8509
|
+
this.playlistIndex--;
|
|
8510
|
+
}
|
|
8511
|
+
this.cueingPlaylistItem = true; // stopgap to prevent multiple firings
|
|
8512
|
+
this.cuePlaylistItem(this.playlistIndex);
|
|
8513
|
+
};
|
|
8514
|
+
|
|
8515
|
+
AblePlayer.prototype.handleNextTrack = function() {
|
|
8516
|
+
|
|
8517
|
+
if (this.playlistIndex === this.$playlist.length - 1) {
|
|
8518
|
+
// currently on the last track
|
|
8519
|
+
// wrap to top and play the forst track
|
|
8520
|
+
this.playlistIndex = 0;
|
|
8521
|
+
}
|
|
8522
|
+
else {
|
|
8523
|
+
this.playlistIndex++;
|
|
8524
|
+
}
|
|
8525
|
+
this.cueingPlaylistItem = true; // stopgap to prevent multiple firings
|
|
8526
|
+
this.cuePlaylistItem(this.playlistIndex);
|
|
8527
|
+
};
|
|
8528
|
+
|
|
8541
8529
|
AblePlayer.prototype.handleRewind = function() {
|
|
8542
8530
|
|
|
8543
8531
|
var targetTime;
|
|
@@ -8616,7 +8604,7 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
8616
8604
|
currentRate = this.getPlaybackRate();
|
|
8617
8605
|
index = rates.indexOf(currentRate);
|
|
8618
8606
|
if (index === -1) {
|
|
8619
|
-
|
|
8607
|
+
|
|
8620
8608
|
}
|
|
8621
8609
|
else {
|
|
8622
8610
|
index += dir;
|
|
@@ -8763,6 +8751,9 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
8763
8751
|
this.descOn = !this.descOn;
|
|
8764
8752
|
this.prefDesc = + this.descOn; // convert boolean to integer
|
|
8765
8753
|
this.updateCookie('prefDesc');
|
|
8754
|
+
if (!this.$descDiv.is(':hidden')) {
|
|
8755
|
+
this.$descDiv.hide();
|
|
8756
|
+
}
|
|
8766
8757
|
this.refreshingDesc = true;
|
|
8767
8758
|
this.initDescription();
|
|
8768
8759
|
this.refreshControls('descriptions');
|
|
@@ -9511,15 +9502,15 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
9511
9502
|
switch (error.name) {
|
|
9512
9503
|
case 'InvalidTrackLanguageError':
|
|
9513
9504
|
// no track was available with the specified language
|
|
9514
|
-
|
|
9505
|
+
|
|
9515
9506
|
break;
|
|
9516
9507
|
case 'InvalidTrackError':
|
|
9517
9508
|
// no track was available with the specified language and kind
|
|
9518
|
-
|
|
9509
|
+
|
|
9519
9510
|
break;
|
|
9520
9511
|
default:
|
|
9521
9512
|
// some other error occurred
|
|
9522
|
-
|
|
9513
|
+
|
|
9523
9514
|
break;
|
|
9524
9515
|
}
|
|
9525
9516
|
});
|
|
@@ -10279,6 +10270,7 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
10279
10270
|
if (!this.transcriptType) {
|
|
10280
10271
|
// previously set transcriptType to null since there are no <track> elements
|
|
10281
10272
|
// check again to see if captions have been collected from other sources (e.g., YouTube)
|
|
10273
|
+
|
|
10282
10274
|
if (this.captions.length && (!(this.usingYouTubeCaptions || this.usingVimeoCaptions))) {
|
|
10283
10275
|
// captions are possible! Use the default type (popup)
|
|
10284
10276
|
// if other types ('external' and 'manual') were desired, transcriptType would not be null here
|
|
@@ -11136,19 +11128,14 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
11136
11128
|
(function ($) {
|
|
11137
11129
|
// Media events
|
|
11138
11130
|
AblePlayer.prototype.onMediaUpdateTime = function (duration, elapsed) {
|
|
11139
|
-
|
|
11140
11131
|
// duration and elapsed are passed from callback functions of Vimeo API events
|
|
11141
11132
|
// duration is expressed as sss.xxx
|
|
11142
11133
|
// elapsed is expressed as sss.xxx
|
|
11143
11134
|
var thisObj = this;
|
|
11144
11135
|
|
|
11145
11136
|
this.getMediaTimes(duration,elapsed).then(function(mediaTimes) {
|
|
11146
|
-
|
|
11147
|
-
|
|
11148
|
-
}
|
|
11149
|
-
if (typeof elapsed === 'undefined') {
|
|
11150
|
-
thisObj.elapsed = mediaTimes['elapsed'];
|
|
11151
|
-
}
|
|
11137
|
+
thisObj.duration = mediaTimes['duration'];
|
|
11138
|
+
thisObj.elapsed = mediaTimes['elapsed'];
|
|
11152
11139
|
if (thisObj.swappingSrc && (typeof thisObj.swapTime !== 'undefined')) {
|
|
11153
11140
|
if (thisObj.swapTime === thisObj.elapsed) {
|
|
11154
11141
|
// described version been swapped and media has scrubbed to time of previous version
|
|
@@ -11190,7 +11177,6 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
11190
11177
|
};
|
|
11191
11178
|
|
|
11192
11179
|
AblePlayer.prototype.onMediaComplete = function () {
|
|
11193
|
-
|
|
11194
11180
|
// if there's a playlist, advance to next item and start playing
|
|
11195
11181
|
if (this.hasPlaylist && !this.cueingPlaylistItem) {
|
|
11196
11182
|
if (this.playlistIndex === (this.$playlist.length - 1)) {
|
|
@@ -11200,6 +11186,10 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
11200
11186
|
this.cueingPlaylistItem = true; // stopgap to prevent multiple firings
|
|
11201
11187
|
this.cuePlaylistItem(0);
|
|
11202
11188
|
}
|
|
11189
|
+
else {
|
|
11190
|
+
this.playing = false;
|
|
11191
|
+
this.paused = true;
|
|
11192
|
+
}
|
|
11203
11193
|
}
|
|
11204
11194
|
else {
|
|
11205
11195
|
// this is not the last track. Play the next one.
|
|
@@ -11231,9 +11221,9 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
11231
11221
|
this.playMedia();
|
|
11232
11222
|
}
|
|
11233
11223
|
this.swappingSrc = false; // swapping is finished
|
|
11234
|
-
this.refreshControls('init');
|
|
11235
11224
|
}
|
|
11236
11225
|
}
|
|
11226
|
+
this.refreshControls('init');
|
|
11237
11227
|
};
|
|
11238
11228
|
|
|
11239
11229
|
// End Media events
|
|
@@ -11325,12 +11315,21 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
11325
11315
|
// TODO: This is super-fragile since we need to know the length of the class name to split off; update this to other way of dispatching?
|
|
11326
11316
|
var whichButton = $(el).attr('class').split(' ')[0].substr(20);
|
|
11327
11317
|
if (whichButton === 'play') {
|
|
11318
|
+
this.clickedPlay = true;
|
|
11328
11319
|
this.handlePlay();
|
|
11329
11320
|
}
|
|
11330
11321
|
else if (whichButton === 'restart') {
|
|
11331
11322
|
this.seekTrigger = 'restart';
|
|
11332
11323
|
this.handleRestart();
|
|
11333
11324
|
}
|
|
11325
|
+
else if (whichButton === 'previous') {
|
|
11326
|
+
this.seekTrigger = 'previous';
|
|
11327
|
+
this.handlePrevTrack();
|
|
11328
|
+
}
|
|
11329
|
+
else if (whichButton === 'next') {
|
|
11330
|
+
this.seekTrigger = 'next';
|
|
11331
|
+
this.handleNextTrack();
|
|
11332
|
+
}
|
|
11334
11333
|
else if (whichButton === 'rewind') {
|
|
11335
11334
|
this.seekTrigger = 'rewind';
|
|
11336
11335
|
this.handleRewind();
|
|
@@ -11427,6 +11426,7 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
11427
11426
|
e.target.tagName === 'TEXTAREA' ||
|
|
11428
11427
|
e.target.tagName === 'SELECT'
|
|
11429
11428
|
)){
|
|
11429
|
+
|
|
11430
11430
|
if (which === 27) { // escape
|
|
11431
11431
|
this.closePopups();
|
|
11432
11432
|
}
|
|
@@ -11482,6 +11482,16 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
11482
11482
|
this.handleRewind();
|
|
11483
11483
|
}
|
|
11484
11484
|
}
|
|
11485
|
+
else if (which === 98) { // b = back (previous track)
|
|
11486
|
+
if (this.usingModifierKeys(e)) {
|
|
11487
|
+
this.handlePrevTrack();
|
|
11488
|
+
}
|
|
11489
|
+
}
|
|
11490
|
+
else if (which === 110) { // n = next track
|
|
11491
|
+
if (this.usingModifierKeys(e)) {
|
|
11492
|
+
this.handleNextTrack();
|
|
11493
|
+
}
|
|
11494
|
+
}
|
|
11485
11495
|
else if (which === 101) { // e = preferences
|
|
11486
11496
|
if (this.usingModifierKeys(e)) {
|
|
11487
11497
|
this.handlePrefsClick();
|
|
@@ -11514,6 +11524,8 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
11514
11524
|
// do something
|
|
11515
11525
|
})
|
|
11516
11526
|
.on('loadedmetadata',function() {
|
|
11527
|
+
// should be able to get duration now
|
|
11528
|
+
thisObj.duration = thisObj.media.duration;
|
|
11517
11529
|
thisObj.onMediaNewSourceLoad();
|
|
11518
11530
|
})
|
|
11519
11531
|
.on('canplay',function() {
|
|
@@ -11642,23 +11654,23 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
11642
11654
|
.on('volumechange',function() {
|
|
11643
11655
|
thisObj.volume = thisObj.getVolume();
|
|
11644
11656
|
if (thisObj.debug) {
|
|
11645
|
-
|
|
11657
|
+
|
|
11646
11658
|
}
|
|
11647
11659
|
})
|
|
11648
11660
|
.on('error',function() {
|
|
11649
11661
|
if (thisObj.debug) {
|
|
11650
11662
|
switch (thisObj.media.error.code) {
|
|
11651
11663
|
case 1:
|
|
11652
|
-
|
|
11664
|
+
|
|
11653
11665
|
break;
|
|
11654
11666
|
case 2:
|
|
11655
|
-
|
|
11667
|
+
|
|
11656
11668
|
break;
|
|
11657
11669
|
case 3:
|
|
11658
|
-
|
|
11670
|
+
|
|
11659
11671
|
break;
|
|
11660
11672
|
case 4:
|
|
11661
|
-
|
|
11673
|
+
|
|
11662
11674
|
break;
|
|
11663
11675
|
}
|
|
11664
11676
|
}
|
|
@@ -12779,7 +12791,7 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
12779
12791
|
this.signFile = this.$sources.first().attr('data-sign-src');
|
|
12780
12792
|
if (this.signFile) {
|
|
12781
12793
|
if (this.debug) {
|
|
12782
|
-
|
|
12794
|
+
|
|
12783
12795
|
}
|
|
12784
12796
|
this.hasSignLanguage = true;
|
|
12785
12797
|
this.injectSignPlayerCode();
|
|
@@ -13891,7 +13903,7 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
13891
13903
|
else {
|
|
13892
13904
|
msg = lang + ' is not currently supported. Using default language (' + this.lang + ')';
|
|
13893
13905
|
if (this.debug) {
|
|
13894
|
-
|
|
13906
|
+
|
|
13895
13907
|
}
|
|
13896
13908
|
}
|
|
13897
13909
|
}
|
|
@@ -15507,7 +15519,7 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
15507
15519
|
deferred.resolve();
|
|
15508
15520
|
})
|
|
15509
15521
|
.fail(function(){
|
|
15510
|
-
|
|
15522
|
+
|
|
15511
15523
|
});
|
|
15512
15524
|
}
|
|
15513
15525
|
else {
|
|
@@ -15669,4 +15681,4 @@ if (thisObj.useTtml && (trackSrc.endsWith('.xml') || trackText.startsWith('<?xml
|
|
|
15669
15681
|
return false;
|
|
15670
15682
|
};
|
|
15671
15683
|
|
|
15672
|
-
})(jQuery);
|
|
15684
|
+
})(jQuery);
|