diff --git a/css/VideoPlayer.css b/css/VideoPlayer.css
index c11e65f..84749d8 100644
--- a/css/VideoPlayer.css
+++ b/css/VideoPlayer.css
@@ -41,6 +41,7 @@
.fl-videoPlayer-tooltip {
position : absolute;
padding : 3px 5px;
+ z-index : 1000; /* Tooltips should be always shown above any other videoPlayer html element */
}
.fl-theme-uio-yb .fl-videoPlayer-tooltip,
.fl-theme-uio-by .fl-videoPlayer-tooltip,
@@ -90,7 +91,7 @@
}
.fl-videoPlayer-controller-buttons * {
- display: inline;
+ display: inline-block;
}
.fl-videoPlayer-optional {
@@ -265,8 +266,8 @@ a.fl-videoPlayer-button-wrapper {
border-style: solid;
border-color: #c2c2c2;
position: absolute;
- bottom: 19px; /* 20px is right on FF */
- right: 1px; /* 5px is right on FF */
+ bottom: 30px;
+ right: 0px;
width: 25%;
background-color: #F2F2F2;
}
@@ -545,10 +546,10 @@ ul.fl-videoPlayer-transcripts-languageList li {
position: absolute;
width: 100%;
}
-.fl-theme-uio-yb .fl-videoPlayer-overlay,
-.fl-theme-uio-wb .fl-videoPlayer-overlay,
-.fl-theme-uio-by .fl-videoPlayer-overlay,
-.fl-theme-uio-bw .fl-videoPlayer-overlay {
+.fl-theme-uio-yb .fl-videoPlayer-overlay, .fl-theme-uio-yb .fl-videoPlayer-captionArea, .fl-theme-uio-yb .captionator-cue-canvas,
+.fl-theme-uio-wb .fl-videoPlayer-overlay, .fl-theme-uio-wb .fl-videoPlayer-captionArea, .fl-theme-uio-wb .captionator-cue-canvas,
+.fl-theme-uio-by .fl-videoPlayer-overlay, .fl-theme-uio-by .fl-videoPlayer-captionArea, .fl-theme-uio-by .captionator-cue-canvas,
+.fl-theme-uio-bw .fl-videoPlayer-overlay, .fl-theme-uio-bw .fl-videoPlayer-captionArea, .fl-theme-uio-bw .captionator-cue-canvas {
background-color: transparent !important;
}
.fl-videoPlayer-caption-captionText {
@@ -643,8 +644,14 @@ ul.fl-videoPlayer-transcripts-languageList li {
.captionator-cue-canvas {
pointer-events:none;
color: #FFFFFF;
+ position: relative !important;
+ font-size: inherit !important;
+ line-height: inherit !important;
}
+.captionator-cue {
+ line-height: inherit !important;
+}
/********************
* UIO theme styling
diff --git a/demos/Mammals.css b/demos/Mammals.css
index 941393a..f7e39a9 100644
--- a/demos/Mammals.css
+++ b/demos/Mammals.css
@@ -3,7 +3,6 @@ body {
font-family: "Helvetica Neue",Arial,"Liberation Sans",FreeSans,sans-serif;
color: #333333;
font-size: .9em;
- line-height: 1.4em;
}
nav li {
@@ -191,10 +190,6 @@ footer a {
max-width: 100%;
}
-.fl-videoPlayer-captionArea {
- background-color: #000000;
- color: #FFFFFF;
-}
.fl-videoPlayer-main {
border: 2px solid #808080;
diff --git a/demos/VideoPlayer.html b/demos/VideoPlayer.html
index d64d4e5..55d05aa 100644
--- a/demos/VideoPlayer.html
+++ b/demos/VideoPlayer.html
@@ -59,12 +59,19 @@
Infusion HTML 5 Video Player
+<
+<
+<
+<
+<
+<
+<
+---
+>
diff --git a/tests/html/TestCaption.en.json b/tests/html/TestCaption.en.json
index 767e94a..345d192 100644
--- a/tests/html/TestCaption.en.json
+++ b/tests/html/TestCaption.en.json
@@ -1,13 +1,13 @@
{
"captionCollection": [
{
- "inTime": "00:00:01.77",
- "outTime": "00:00:04.03",
+ "inTime": "00:00:01.777",
+ "outTime": "00:00:04.033",
"caption": "Eeny, meeny, miny, moe,"
},
{
- "inTime": "00:00:04.03",
- "outTime": "00:00:05.99",
+ "inTime": "00:00:04.033",
+ "outTime": "00:00:05.992",
"caption": "Catch a tiger by the toe"
}
]
diff --git a/tests/html/TestCaptions.en.vtt b/tests/html/TestCaptions.en.vtt
index b95e6b3..64fc91f 100644
--- a/tests/html/TestCaptions.en.vtt
+++ b/tests/html/TestCaptions.en.vtt
@@ -1,13 +1,5 @@
WEBVTT
1
-00:00:00.00 --> 00:00:04.03
+00:00:00.000 --> 00:00:04.030
English caption here
-
-2
-00:00:04.03 --> 00:00:05.99
-Catch a tiger by the toe
-
-3
-00:00:05.99 --> 00:00:08.05
-If he hollers let him go
\ No newline at end of file
diff --git a/tests/html/TestCaptions.fr.vtt b/tests/html/TestCaptions.fr.vtt
index 984cffb..5ee72fa 100644
--- a/tests/html/TestCaptions.fr.vtt
+++ b/tests/html/TestCaptions.fr.vtt
@@ -1,13 +1,5 @@
WEBVTT
1
-00:00:00.00 --> 00:00:04.03
+00:00:00.000 --> 00:00:04.030
French caption here
-
-2
-00:00:04.03 --> 00:00:05.99
-Catch un tigre par le gros orteil
-
-3
-00:00:05.99 --> 00:00:08.05
-S'il crie le laisser aller
\ No newline at end of file
diff --git a/tests/html/TestTranscripts.en.json b/tests/html/TestTranscripts.en.json
index b5a23d0..af05a5f 100644
--- a/tests/html/TestTranscripts.en.json
+++ b/tests/html/TestTranscripts.en.json
@@ -1,543 +1,543 @@
{
"transcriptCollection": [
{
- "inTime": "00:00:01.77",
- "outTime": "00:00:04.03",
+ "inTime": "00:00:01.777",
+ "outTime": "00:00:04.033",
"transcript": "Eeny, meeny, miny, moe,"
},
{
- "inTime": "00:00:04.03",
- "outTime": "00:00:05.99",
+ "inTime": "00:00:04.033",
+ "outTime": "00:00:05.992",
"transcript": "Catch a tiger by the toe"
},
{
- "inTime": "00:00:05.99",
- "outTime": "00:00:08.05",
+ "inTime": "00:00:05.992",
+ "outTime": "00:00:08.056",
"transcript": "If he hollers let him go"
},
{
- "inTime": "00:00:08.05",
- "outTime": "00:00:10.96",
+ "inTime": "00:00:08.056",
+ "outTime": "00:00:10.962",
"transcript": "Eeny, meeny, miny moe."
},
{
- "inTime": "00:00:12.70",
- "outTime": "00:00:14.64",
+ "inTime": "00:00:12.710",
+ "outTime": "00:00:14.644",
"transcript": "I'm Jutta Treviranus"
},
{
- "inTime": "00:00:14.64",
- "outTime": "00:00:16.04",
+ "inTime": "00:00:14.644",
+ "outTime": "00:00:16.041",
"transcript": "and I've come to wonder"
},
{
- "inTime": "00:00:16.04",
- "outTime": "00:00:18.38",
+ "inTime": "00:00:16.041",
+ "outTime": "00:00:18.387",
"transcript": "whether we have a chance to reorganize our future."
},
{
- "inTime": "00:00:18.38",
- "outTime": "00:00:23.23",
+ "inTime": "00:00:18.387",
+ "outTime": "00:00:23.231",
"transcript": "David Kelley says that the future of design is human centred."
},
{
- "inTime": "00:00:23.23",
- "outTime": "00:00:25.51",
+ "inTime": "00:00:23.231",
+ "outTime": "00:00:25.513",
"transcript": "Most experts agree."
},
{
- "inTime": "00:00:25.51",
- "outTime": "00:00:29.02",
+ "inTime": "00:00:25.513",
+ "outTime": "00:00:29.029",
"transcript": "That leaves the question - which human?"
},
{
- "inTime": "00:00:29.02",
- "outTime": "00:00:32.46",
+ "inTime": "00:00:29.029",
+ "outTime": "00:00:32.464",
"transcript": "An inevitable human condition is diversity."
},
{
- "inTime": "00:00:32.46",
- "outTime": "00:00:34.70",
+ "inTime": "00:00:32.464",
+ "outTime": "00:00:34.706",
"transcript": "There's no typical human,"
},
{
- "inTime": "00:00:34.70",
- "outTime": "00:00:37.33",
+ "inTime": "00:00:34.706",
+ "outTime": "00:00:37.331",
"transcript": "even clones and identical twins are not the same."
},
{
- "inTime": "00:00:37.33",
- "outTime": "00:00:40.42",
+ "inTime": "00:00:37.331",
+ "outTime": "00:00:40.421",
"transcript": "We differ from one to the next,"
},
{
- "inTime": "00:00:40.42",
- "outTime": "00:00:43.54",
+ "inTime": "00:00:40.421",
+ "outTime": "00:00:43.546",
"transcript": "but also from one moment to the next,"
},
{
- "inTime": "00:00:43.54",
- "outTime": "00:00:46.84",
+ "inTime": "00:00:43.546",
+ "outTime": "00:00:46.842",
"transcript": "from one context to the next."
},
{
- "inTime": "00:00:46.84",
- "outTime": "00:00:49.91",
+ "inTime": "00:00:46.842",
+ "outTime": "00:00:49.912",
"transcript": "But diversity and difference become overwhelming"
},
{
- "inTime": "00:00:49.91",
- "outTime": "00:00:52.94",
+ "inTime": "00:00:49.912",
+ "outTime": "00:00:52.948",
"transcript": "and we develop strategies to deal with this diversity."
},
{
- "inTime": "00:00:52.94",
- "outTime": "00:00:55.56",
+ "inTime": "00:00:52.948",
+ "outTime": "00:00:55.569",
"transcript": "We try to make things simpler,"
},
{
- "inTime": "00:00:55.60",
- "outTime": "00:00:57.50",
+ "inTime": "00:00:55.600",
+ "outTime": "00:00:57.500",
"transcript": "less complex, less chaotic"
},
{
- "inTime": "00:00:57.50",
- "outTime": "00:01:00.00",
+ "inTime": "00:00:57.500",
+ "outTime": "00:01:00.864",
"transcript": "Another part of the human condition is that"
},
{
- "inTime": "00:01:00.00",
- "outTime": "00:01:03.18",
+ "inTime": "00:01:00.864",
+ "outTime": "00:01:03.185",
"transcript": "we try to find commonality and connections."
},
{
- "inTime": "00:01:03.20",
- "outTime": "00:01:09.53",
+ "inTime": "00:01:03.200",
+ "outTime": "00:01:09.538",
"transcript": "We form groups informal and formal with implicit and explicit criteria."
},
{
- "inTime": "00:01:09.55",
- "outTime": "00:01:13.97",
+ "inTime": "00:01:09.554",
+ "outTime": "00:01:13.979",
"transcript": "We organize, we create categories, we filter, we label."
},
{
- "inTime": "00:01:13.97",
- "outTime": "00:01:19.67",
+ "inTime": "00:01:13.979",
+ "outTime": "00:01:19.679",
"transcript": "At our most insecure and overwhelmed we divide in two, we create binaries:"
},
{
- "inTime": "00:01:19.67",
- "outTime": "00:01:21.86",
+ "inTime": "00:01:19.679",
+ "outTime": "00:01:21.867",
"transcript": "male, female"
},
{
- "inTime": "00:01:21.86",
- "outTime": "00:01:24.21",
+ "inTime": "00:01:21.867",
+ "outTime": "00:01:24.215",
"transcript": "disabled, normal"
},
{
- "inTime": "00:01:24.21",
- "outTime": "00:01:27.03",
+ "inTime": "00:01:24.215",
+ "outTime": "00:01:27.031",
"transcript": "left, right"
},
{
- "inTime": "00:01:27.03",
- "outTime": "00:01:29.57",
+ "inTime": "00:01:27.031",
+ "outTime": "00:01:29.579",
"transcript": "us, them."
},
{
- "inTime": "00:01:29.57",
- "outTime": "00:01:34.98",
+ "inTime": "00:01:29.579",
+ "outTime": "00:01:34.982",
"transcript": "This all results in issues of who belongs and who is excluded."
},
{
- "inTime": "00:01:34.98",
- "outTime": "00:01:37.53",
+ "inTime": "00:01:34.982",
+ "outTime": "00:01:37.536",
"transcript": "Membership in groups can be self assigned,"
},
{
- "inTime": "00:01:37.53",
- "outTime": "00:01:40.46",
+ "inTime": "00:01:37.536",
+ "outTime": "00:01:40.467",
"transcript": "may be imposed, may even be policed."
},
{
- "inTime": "00:01:40.46",
- "outTime": "00:01:44.17",
+ "inTime": "00:01:40.467",
+ "outTime": "00:01:44.179",
"transcript": "Groups are used to assert or assign privileges and powers."
},
{
- "inTime": "00:01:44.17",
- "outTime": "00:01:46.92",
+ "inTime": "00:01:44.179",
+ "outTime": "00:01:46.929",
"transcript": "We use groups to judge"
},
{
- "inTime": "00:01:46.92",
- "outTime": "00:01:49.22",
+ "inTime": "00:01:46.929",
+ "outTime": "00:01:49.225",
"transcript": "values get assigned to groups"
},
{
- "inTime": "00:01:49.22",
- "outTime": "00:01:51.88",
+ "inTime": "00:01:49.225",
+ "outTime": "00:01:51.887",
"transcript": "often characteristics that have nothing to do with"
},
{
- "inTime": "00:01:51.88",
- "outTime": "00:01:53.35",
+ "inTime": "00:01:51.887",
+ "outTime": "00:01:53.356",
"transcript": "the original founding properties of groups"
},
{
- "inTime": "00:01:53.35",
- "outTime": "00:01:55.98",
+ "inTime": "00:01:53.356",
+ "outTime": "00:01:55.982",
"transcript": "are generalized to all individuals in the group."
},
{
- "inTime": "00:01:55.98",
- "outTime": "00:02:00.07",
+ "inTime": "00:01:55.982",
+ "outTime": "00:02:00.071",
"transcript": "Sometimes, people who are in an imposed group"
},
{
- "inTime": "00:02:00.07",
- "outTime": "00:02:02.00",
+ "inTime": "00:02:00.071",
+ "outTime": "00:02:02.831",
"transcript": "take ownership of the group and reform"
},
{
- "inTime": "00:02:02.00",
- "outTime": "00:02:04.42",
+ "inTime": "00:02:02.831",
+ "outTime": "00:02:04.423",
"transcript": "the classifications and values from within."
},
{
- "inTime": "00:02:04.42",
- "outTime": "00:02:08.44",
+ "inTime": "00:02:04.423",
+ "outTime": "00:02:08.446",
"transcript": "Occasionally, someone has the audacity"
},
{
- "inTime": "00:02:08.44",
- "outTime": "00:02:11.00",
+ "inTime": "00:02:08.446",
+ "outTime": "00:02:11.746",
"transcript": "to break out of the category we have put her in"
},
{
- "inTime": "00:02:11.00",
- "outTime": "00:02:16.90",
+ "inTime": "00:02:11.746",
+ "outTime": "00:02:16.910",
"transcript": "but to preserve our category, we may dismiss her as an anomaly."
},
{
- "inTime": "00:02:16.90",
- "outTime": "00:02:20.03",
+ "inTime": "00:02:16.910",
+ "outTime": "00:02:20.031",
"transcript": "Some groups are more fluid while others are more fixed."
},
{
- "inTime": "00:02:20.03",
- "outTime": "00:02:23.56",
+ "inTime": "00:02:20.031",
+ "outTime": "00:02:23.561",
"transcript": "We not only form groups, but groups of groups"
},
{
- "inTime": "00:02:23.56",
- "outTime": "00:02:25.66",
+ "inTime": "00:02:23.561",
+ "outTime": "00:02:25.662",
"transcript": "and groups, of groups, of groups."
},
{
- "inTime": "00:02:25.66",
- "outTime": "00:02:29.09",
+ "inTime": "00:02:25.662",
+ "outTime": "00:02:29.100",
"transcript": "Membership in one group can grant us membership in other groups."
},
{
- "inTime": "00:02:29.09",
- "outTime": "00:02:33.03",
+ "inTime": "00:02:29.100",
+ "outTime": "00:02:33.036",
"transcript": "But despite all this, we are diverse,"
},
{
- "inTime": "00:02:33.03",
- "outTime": "00:02:34.85",
+ "inTime": "00:02:33.036",
+ "outTime": "00:02:34.859",
"transcript": "we are complex,"
},
{
- "inTime": "00:02:34.85",
- "outTime": "00:02:36.45",
+ "inTime": "00:02:34.859",
+ "outTime": "00:02:36.452",
"transcript": "we are chaotic."
},
{
- "inTime": "00:02:36.45",
- "outTime": "00:02:38.81",
+ "inTime": "00:02:36.452",
+ "outTime": "00:02:38.818",
"transcript": "Individually we're different"
},
{
- "inTime": "00:02:38.81",
- "outTime": "00:02:40.44",
+ "inTime": "00:02:38.818",
+ "outTime": "00:02:40.441",
"transcript": "over time, in different contexts,"
},
{
- "inTime": "00:02:40.44",
- "outTime": "00:02:42.35",
+ "inTime": "00:02:40.441",
+ "outTime": "00:02:42.356",
"transcript": "in different roles, in different groups."
},
{
- "inTime": "00:02:42.35",
- "outTime": "00:02:45.42",
+ "inTime": "00:02:42.356",
+ "outTime": "00:02:45.429",
"transcript": "We need to assert our uniqueness,"
},
{
- "inTime": "00:02:45.42",
- "outTime": "00:02:47.86",
+ "inTime": "00:02:45.429",
+ "outTime": "00:02:47.864",
"transcript": "we need to form and refine our identity."
},
{
- "inTime": "00:02:47.86",
- "outTime": "00:02:50.91",
+ "inTime": "00:02:47.864",
+ "outTime": "00:02:50.914",
"transcript": "We struggle with the identity imposed on us."
},
{
- "inTime": "00:02:50.91",
- "outTime": "00:02:56.36",
+ "inTime": "00:02:50.914",
+ "outTime": "00:02:56.367",
"transcript": "Generally, people do not fit easily into assigned categories"
},
{
- "inTime": "00:02:56.36",
- "outTime": "00:02:58.98",
+ "inTime": "00:02:56.367",
+ "outTime": "00:02:58.982",
"transcript": "and yet we persist in assigning them."
},
{
- "inTime": "00:02:58.98",
- "outTime": "00:03:02.63",
+ "inTime": "00:02:58.982",
+ "outTime": "00:03:02.631",
"transcript": "And then, something new comes along"
},
{
- "inTime": "00:03:02.63",
- "outTime": "00:03:05.41",
+ "inTime": "00:03:02.631",
+ "outTime": "00:03:05.415",
"transcript": "and shakes up our groups, our categories and our rules,"
},
{
- "inTime": "00:03:05.41",
- "outTime": "00:03:08.26",
+ "inTime": "00:03:05.415",
+ "outTime": "00:03:08.266",
"transcript": "and we need to adjust, rebuild and rethink."
},
{
- "inTime": "00:03:08.26",
- "outTime": "00:03:12.53",
+ "inTime": "00:03:08.266",
+ "outTime": "00:03:12.533",
"transcript": "Something like, networks and digital stuff."
},
{
- "inTime": "00:03:12.53",
- "outTime": "00:03:15.47",
+ "inTime": "00:03:12.533",
+ "outTime": "00:03:15.471",
"transcript": "This new digital and connected world"
},
{
- "inTime": "00:03:15.47",
- "outTime": "00:03:17.87",
+ "inTime": "00:03:15.471",
+ "outTime": "00:03:17.875",
"transcript": "puts into question how we group things"
},
{
- "inTime": "00:03:17.87",
- "outTime": "00:03:20.75",
+ "inTime": "00:03:17.875",
+ "outTime": "00:03:20.759",
"transcript": "and challenges our excuses for leaving people out."
},
{
- "inTime": "00:03:20.75",
- "outTime": "00:03:25.46",
+ "inTime": "00:03:20.759",
+ "outTime": "00:03:25.469",
"transcript": "The digital changes our view of time, space and distance"
},
{
- "inTime": "00:03:25.46",
- "outTime": "00:03:31.08",
+ "inTime": "00:03:25.469",
+ "outTime": "00:03:31.085",
"transcript": "and by extension our view of design, what is possible and what things cost."
},
{
- "inTime": "00:03:31.08",
- "outTime": "00:03:36.04",
+ "inTime": "00:03:31.085",
+ "outTime": "00:03:36.048",
"transcript": "Digital things are plastic, mutable, malleable and adaptable."
},
{
- "inTime": "00:03:36.04",
- "outTime": "00:03:39.50",
+ "inTime": "00:03:36.048",
+ "outTime": "00:03:39.500",
"transcript": "Before, not everyone could fit,"
},
{
- "inTime": "00:03:39.50",
- "outTime": "00:03:42.16",
+ "inTime": "00:03:39.500",
+ "outTime": "00:03:42.167",
"transcript": "allowing someone in meant someone else was left out."
},
{
- "inTime": "00:03:42.16",
- "outTime": "00:03:46.06",
+ "inTime": "00:03:42.167",
+ "outTime": "00:03:46.067",
"transcript": "In the digital, room is very stretchy."
},
{
- "inTime": "00:03:46.06",
- "outTime": "00:03:49.76",
+ "inTime": "00:03:46.067",
+ "outTime": "00:03:49.767",
"transcript": "Before, what we created could not fit everyone"
},
{
- "inTime": "00:03:49.76",
- "outTime": "00:03:51.77",
+ "inTime": "00:03:49.767",
+ "outTime": "00:03:51.777",
"transcript": "so we made it fit the largest group."
},
{
- "inTime": "00:03:51.77",
- "outTime": "00:03:54.53",
+ "inTime": "00:03:51.777",
+ "outTime": "00:03:54.533",
"transcript": "We made it for the group called average or typical"
},
{
- "inTime": "00:03:54.53",
- "outTime": "00:03:58.26",
+ "inTime": "00:03:54.533",
+ "outTime": "00:03:58.267",
"transcript": "this left out everyone not average or typical."
},
{
- "inTime": "00:03:58.26",
- "outTime": "00:04:03.39",
+ "inTime": "00:03:58.267",
+ "outTime": "00:04:03.399",
"transcript": "In the digital reality the things we make can reconfigure, adapt"
},
{
- "inTime": "00:04:03.39",
- "outTime": "00:04:06.27",
+ "inTime": "00:04:03.399",
+ "outTime": "00:04:06.274",
"transcript": "and take a form that is best for each individual."
},
{
- "inTime": "00:04:06.27",
- "outTime": "00:04:11.90",
+ "inTime": "00:04:06.274",
+ "outTime": "00:04:11.900",
"transcript": "In the solid world, each copy cost almost the same as the original."
},
{
- "inTime": "00:04:11.90",
- "outTime": "00:04:14.35",
+ "inTime": "00:04:11.900",
+ "outTime": "00:04:14.351",
"transcript": "Consumption actually consumed."
},
{
- "inTime": "00:04:14.35",
- "outTime": "00:04:18.56",
+ "inTime": "00:04:14.351",
+ "outTime": "00:04:18.567",
"transcript": "In the digital world, we can copy almost without cost."
},
{
- "inTime": "00:04:18.56",
- "outTime": "00:04:21.00",
+ "inTime": "00:04:18.567",
+ "outTime": "00:04:21.000",
"transcript": "Consumption no longer consumes."
},
{
- "inTime": "00:04:21.00",
- "outTime": "00:04:24.52",
+ "inTime": "00:04:21.000",
+ "outTime": "00:04:24.522",
"transcript": "Before, it took a great deal of time and effort"
},
{
- "inTime": "00:04:24.52",
- "outTime": "00:04:27.23",
+ "inTime": "00:04:24.522",
+ "outTime": "00:04:27.233",
"transcript": "to deliver things, especially to people far away."
},
{
- "inTime": "00:04:27.23",
- "outTime": "00:04:30.93",
+ "inTime": "00:04:27.233",
+ "outTime": "00:04:30.933",
"transcript": "Now it is as easy to deliver things around the world"
},
{
- "inTime": "00:04:30.93",
- "outTime": "00:04:33.13",
+ "inTime": "00:04:30.933",
+ "outTime": "00:04:33.133",
"transcript": "as it is to deliver things next door."
},
{
- "inTime": "00:04:33.13",
- "outTime": "00:04:36.85",
+ "inTime": "00:04:33.133",
+ "outTime": "00:04:36.852",
"transcript": "Before, if we didn't place things in a fixed spot"
},
{
- "inTime": "00:04:36.85",
- "outTime": "00:04:39.53",
+ "inTime": "00:04:36.852",
+ "outTime": "00:04:39.533",
"transcript": "we would have a hard time finding them again."
},
{
- "inTime": "00:04:39.53",
- "outTime": "00:04:43.63",
+ "inTime": "00:04:39.533",
+ "outTime": "00:04:43.633",
"transcript": "Now we can place them anywhere on the network and"
},
{
- "inTime": "00:04:43.63",
- "outTime": "00:04:46.26",
+ "inTime": "00:04:43.633",
+ "outTime": "00:04:46.267",
"transcript": "retrieve them anywhere on the network."
},
{
- "inTime": "00:04:46.26",
- "outTime": "00:04:50.13",
+ "inTime": "00:04:46.267",
+ "outTime": "00:04:50.133",
"transcript": "Before, we needed to label things unambiguously and simply"
},
{
- "inTime": "00:04:50.13",
- "outTime": "00:04:52.80",
+ "inTime": "00:04:50.133",
+ "outTime": "00:04:52.800",
"transcript": "so we could recognize them and know what to do with them."
},
{
- "inTime": "00:04:52.80",
- "outTime": "00:04:56.44",
+ "inTime": "00:04:52.800",
+ "outTime": "00:04:56.449",
"transcript": "Now we can see a description of each person or thing"
},
{
- "inTime": "00:04:56.44",
- "outTime": "00:04:59.02",
+ "inTime": "00:04:56.449",
+ "outTime": "00:04:59.027",
"transcript": "that is useful and relevant to our purpose."
},
{
- "inTime": "00:04:59.02",
- "outTime": "00:05:03.01",
+ "inTime": "00:04:59.027",
+ "outTime": "00:05:03.020",
"transcript": "And by the way, we have learned that"
},
{
- "inTime": "00:05:03.01",
- "outTime": "00:05:06.36",
+ "inTime": "00:05:03.020",
+ "outTime": "00:05:06.367",
"transcript": "inclusion and equality are good for all of us."
},
{
- "inTime": "00:05:06.36",
- "outTime": "00:05:09.35",
+ "inTime": "00:05:06.367",
+ "outTime": "00:05:09.359",
"transcript": "We are all healthier, wealthier and wiser"
},
{
- "inTime": "00:05:09.35",
- "outTime": "00:05:12.19",
+ "inTime": "00:05:09.359",
+ "outTime": "00:05:12.200",
"transcript": "when our society is inclusive and equal."
},
{
- "inTime": "00:05:12.19",
- "outTime": "00:05:15.36",
+ "inTime": "00:05:12.200",
+ "outTime": "00:05:15.367",
"transcript": "We've also discovered that diverse groups"
},
{
- "inTime": "00:05:15.36",
- "outTime": "00:05:18.93",
+ "inTime": "00:05:15.367",
+ "outTime": "00:05:18.936",
"transcript": "are more innovative and creative, and better at planning and predicting."
},
{
- "inTime": "00:05:18.93",
- "outTime": "00:05:23.73",
+ "inTime": "00:05:18.936",
+ "outTime": "00:05:23.733",
"transcript": "We've experimented with new organization like"
},
{
- "inTime": "00:05:23.73",
- "outTime": "00:05:26.33",
+ "inTime": "00:05:23.733",
+ "outTime": "00:05:26.333",
"transcript": "most popular, to be ignored"
},
{
- "inTime": "00:05:26.33",
- "outTime": "00:05:28.69",
+ "inTime": "00:05:26.333",
+ "outTime": "00:05:28.700",
"transcript": "friend, not friend."
},
{
- "inTime": "00:05:28.69",
- "outTime": "00:05:31.03",
+ "inTime": "00:05:28.700",
+ "outTime": "00:05:31.033",
"transcript": "But we can do better."
},
{
- "inTime": "00:05:31.03",
- "outTime": "00:05:33.26",
+ "inTime": "00:05:31.033",
+ "outTime": "00:05:33.267",
"transcript": "We can afford to be generous in our design,"
},
{
- "inTime": "00:05:33.26",
- "outTime": "00:05:35.39",
+ "inTime": "00:05:33.267",
+ "outTime": "00:05:35.400",
"transcript": "we have fewer excuses to exclude."
},
{
- "inTime": "00:05:35.39",
- "outTime": "00:05:37.56",
+ "inTime": "00:05:35.400",
+ "outTime": "00:05:37.567",
"transcript": "We can be true to our diversity."
},
{
- "inTime": "00:05:37.56",
- "outTime": "00:05:43.06",
+ "inTime": "00:05:37.567",
+ "outTime": "00:05:43.067",
"transcript": "Perhaps now, we can find a way to make room for us all."
}
]
diff --git a/tests/html/TestTranscripts.fr.json b/tests/html/TestTranscripts.fr.json
index 84bd606..aa491a4 100644
--- a/tests/html/TestTranscripts.fr.json
+++ b/tests/html/TestTranscripts.fr.json
@@ -1,543 +1,543 @@
{
"transcriptCollection": [
{
- "inTime": "00:00:01.77",
- "outTime": "00:00:04.03",
+ "inTime": "00:00:01.777",
+ "outTime": "00:00:04.033",
"transcript": "Eeny, meeny, miny, moe,"
},
{
- "inTime": "00:00:04.03",
- "outTime": "00:00:05.99",
+ "inTime": "00:00:04.033",
+ "outTime": "00:00:05.992",
"transcript": "Attrape un tigre par son orteil"
},
{
- "inTime": "00:00:05.99",
- "outTime": "00:00:08.05",
+ "inTime": "00:00:05.992",
+ "outTime": "00:00:08.056",
"transcript": "S'il crie laisses le aller"
},
{
- "inTime": "00:00:08.05",
- "outTime": "00:00:10.96",
+ "inTime": "00:00:08.056",
+ "outTime": "00:00:10.962",
"transcript": "Eeny, meeny, miny moe."
},
{
- "inTime": "00:00:12.70",
- "outTime": "00:00:14.64",
+ "inTime": "00:00:12.710",
+ "outTime": "00:00:14.644",
"transcript": "Je suis Jutta Treviranus"
},
{
- "inTime": "00:00:14.64",
- "outTime": "00:00:16.04",
+ "inTime": "00:00:14.644",
+ "outTime": "00:00:16.041",
"transcript": "et je suis venu me demander"
},
{
- "inTime": "00:00:16.04",
- "outTime": "00:00:18.38",
+ "inTime": "00:00:16.041",
+ "outTime": "00:00:18.387",
"transcript": "si nous avons une chance de réorganiser notre futur."
},
{
- "inTime": "00:00:18.38",
- "outTime": "00:00:23.23",
+ "inTime": "00:00:18.387",
+ "outTime": "00:00:23.231",
"transcript": "David Kelley affirme que l'avenir du design est centré sur l'Homme."
},
{
- "inTime": "00:00:23.23",
- "outTime": "00:00:25.51",
+ "inTime": "00:00:23.231",
+ "outTime": "00:00:25.513",
"transcript": "La plupart des experts sont d'accord."
},
{
- "inTime": "00:00:25.51",
- "outTime": "00:00:29.02",
+ "inTime": "00:00:25.513",
+ "outTime": "00:00:29.029",
"transcript": "Reste la question - Quel Homme?"
},
{
- "inTime": "00:00:29.02",
- "outTime": "00:00:32.46",
+ "inTime": "00:00:29.029",
+ "outTime": "00:00:32.464",
"transcript": "Une condition humaine est inévitable, la diversité."
},
{
- "inTime": "00:00:32.46",
- "outTime": "00:00:34.70",
+ "inTime": "00:00:32.464",
+ "outTime": "00:00:34.706",
"transcript": "Il n'y a aucun humain générique."
},
{
- "inTime": "00:00:34.70",
- "outTime": "00:00:37.33",
+ "inTime": "00:00:34.706",
+ "outTime": "00:00:37.331",
"transcript": "Même les clones et les jumeaux ne sont pas les mêmes."
},
{
- "inTime": "00:00:37.33",
- "outTime": "00:00:40.42",
+ "inTime": "00:00:37.331",
+ "outTime": "00:00:40.421",
"transcript": "Nous différons de l'un à l'autre,"
},
{
- "inTime": "00:00:40.42",
- "outTime": "00:00:43.54",
+ "inTime": "00:00:40.421",
+ "outTime": "00:00:43.546",
"transcript": "mais aussi d'un moment à l'autre,"
},
{
- "inTime": "00:00:43.54",
- "outTime": "00:00:46.84",
+ "inTime": "00:00:43.546",
+ "outTime": "00:00:46.842",
"transcript": "d'un contexte à l'autre."
},
{
- "inTime": "00:00:46.84",
- "outTime": "00:00:49.91",
+ "inTime": "00:00:46.842",
+ "outTime": "00:00:49.912",
"transcript": "Mais la diversité et les différences deviennent écrasantes"
},
{
- "inTime": "00:00:49.91",
- "outTime": "00:00:52.94",
+ "inTime": "00:00:49.912",
+ "outTime": "00:00:52.948",
"transcript": "et nous développons des stratégies pour faire face à cette diversité."
},
{
- "inTime": "00:00:52.94",
- "outTime": "00:00:55.56",
+ "inTime": "00:00:52.948",
+ "outTime": "00:00:55.569",
"transcript": "Nous essayons de rendre les choses plus simples,"
},
{
- "inTime": "00:00:55.60",
- "outTime": "00:00:57.50",
+ "inTime": "00:00:55.600",
+ "outTime": "00:00:57.500",
"transcript": "moins complexe, moins chaotique."
},
{
- "inTime": "00:00:57.50",
- "outTime": "00:01:00.00",
+ "inTime": "00:00:57.500",
+ "outTime": "00:01:00.864",
"transcript": "Une autre partie de la condition humaine est que nous"
},
{
- "inTime": "00:01:00.00",
- "outTime": "00:01:03.18",
+ "inTime": "00:01:00.864",
+ "outTime": "00:01:03.185",
"transcript": "essayons de trouver des communités et des connexions."
},
{
- "inTime": "00:01:03.20",
- "outTime": "00:01:09.53",
+ "inTime": "00:01:03.200",
+ "outTime": "00:01:09.538",
"transcript": "Nous formons des groupes formels et informels avec des critères explicites et implicites."
},
{
- "inTime": "00:01:09.55",
- "outTime": "00:01:13.97",
+ "inTime": "00:01:09.554",
+ "outTime": "00:01:13.979",
"transcript": "Nous organisons, nous créons des catégories, nous filtrons, nous labélisons."
},
{
- "inTime": "00:01:13.97",
- "outTime": "00:01:19.67",
+ "inTime": "00:01:13.979",
+ "outTime": "00:01:19.679",
"transcript": "Dans nos moments les plus précaires nous divisons en deux, nous créons des binaires:"
},
{
- "inTime": "00:01:19.67",
- "outTime": "00:01:21.86",
+ "inTime": "00:01:19.679",
+ "outTime": "00:01:21.867",
"transcript": "masculin, féminin"
},
{
- "inTime": "00:01:21.86",
- "outTime": "00:01:24.21",
+ "inTime": "00:01:21.867",
+ "outTime": "00:01:24.215",
"transcript": "handicapés, normale"
},
{
- "inTime": "00:01:24.21",
- "outTime": "00:01:27.03",
+ "inTime": "00:01:24.215",
+ "outTime": "00:01:27.031",
"transcript": "gauche, droite"
},
{
- "inTime": "00:01:27.03",
- "outTime": "00:01:29.57",
+ "inTime": "00:01:27.031",
+ "outTime": "00:01:29.579",
"transcript": "nous, eux."
},
{
- "inTime": "00:01:29.57",
- "outTime": "00:01:34.98",
+ "inTime": "00:01:29.579",
+ "outTime": "00:01:34.982",
"transcript": "Cela se traduit dans les questions: \"Qui appartient?\" et \"Qui est exclu?\""
},
{
- "inTime": "00:01:34.98",
- "outTime": "00:01:37.53",
+ "inTime": "00:01:34.982",
+ "outTime": "00:01:37.536",
"transcript": "L'adhésion à des groupes peut être de son propre chef,"
},
{
- "inTime": "00:01:37.53",
- "outTime": "00:01:40.46",
+ "inTime": "00:01:37.536",
+ "outTime": "00:01:40.467",
"transcript": "peut être imposée, peut-être même policée."
},
{
- "inTime": "00:01:40.46",
- "outTime": "00:01:44.17",
+ "inTime": "00:01:40.467",
+ "outTime": "00:01:44.179",
"transcript": "Les groupes sont utilisés pour affirmer ou attribuer des privilèges et des pouvoirs."
},
{
- "inTime": "00:01:44.17",
- "outTime": "00:01:46.92",
+ "inTime": "00:01:44.179",
+ "outTime": "00:01:46.929",
"transcript": "Nous utilisons des groupes pour juger"
},
{
- "inTime": "00:01:46.92",
- "outTime": "00:01:49.22",
+ "inTime": "00:01:46.929",
+ "outTime": "00:01:49.225",
"transcript": "des valeurs sont attribuées à des groupes"
},
{
- "inTime": "00:01:49.22",
- "outTime": "00:01:51.88",
+ "inTime": "00:01:49.225",
+ "outTime": "00:01:51.887",
"transcript": "souvent des caractéristiques qui n'ont rien à voir avec"
},
{
- "inTime": "00:01:51.88",
- "outTime": "00:01:53.35",
+ "inTime": "00:01:51.887",
+ "outTime": "00:01:53.356",
"transcript": "les propriétés originales des fondateurs des groupes"
},
{
- "inTime": "00:01:53.35",
- "outTime": "00:01:55.98",
+ "inTime": "00:01:53.356",
+ "outTime": "00:01:55.982",
"transcript": "sont souvent généralisés à tous les individus du groupe."
},
{
- "inTime": "00:01:55.98",
- "outTime": "00:02:00.07",
+ "inTime": "00:01:55.982",
+ "outTime": "00:02:00.071",
"transcript": "Parfois, les gens qui sont dans un groupe contre leur grès"
},
{
- "inTime": "00:02:00.07",
- "outTime": "00:02:02.00",
+ "inTime": "00:02:00.071",
+ "outTime": "00:02:02.831",
"transcript": "prennent la propriété du groupe et le réforme"
},
{
- "inTime": "00:02:02.00",
- "outTime": "00:02:04.42",
+ "inTime": "00:02:02.831",
+ "outTime": "00:02:04.423",
"transcript": "ses classifications et ses valeurs."
},
{
- "inTime": "00:02:04.42",
- "outTime": "00:02:08.44",
+ "inTime": "00:02:04.423",
+ "outTime": "00:02:08.446",
"transcript": "Parfois, quelqu'un a l'audace"
},
{
- "inTime": "00:02:08.44",
- "outTime": "00:02:11.00",
+ "inTime": "00:02:08.446",
+ "outTime": "00:02:11.746",
"transcript": "de sortir de la catégorie que nous lui avons imposé"
},
{
- "inTime": "00:02:11.00",
- "outTime": "00:02:16.90",
+ "inTime": "00:02:11.746",
+ "outTime": "00:02:16.910",
"transcript": "mais pour préserver notre catégorie, nous pouvons la renvoyer comme une anomalie."
},
{
- "inTime": "00:02:16.90",
- "outTime": "00:02:20.03",
+ "inTime": "00:02:16.910",
+ "outTime": "00:02:20.031",
"transcript": "Certains groupes sont plus fluides tandis que d'autres sont plus fixes."
},
{
- "inTime": "00:02:20.03",
- "outTime": "00:02:23.56",
+ "inTime": "00:02:20.031",
+ "outTime": "00:02:23.561",
"transcript": "Nous ne créons pas seulement des groupes, mais des groupes de groupes"
},
{
- "inTime": "00:02:23.56",
- "outTime": "00:02:25.66",
+ "inTime": "00:02:23.561",
+ "outTime": "00:02:25.662",
"transcript": "et des groupes, de groupes, de groupes."
},
{
- "inTime": "00:02:25.66",
- "outTime": "00:02:29.09",
+ "inTime": "00:02:25.662",
+ "outTime": "00:02:29.100",
"transcript": "L'adhésion à un groupe peut nous accorder l'adhésion à d'autres groupes."
},
{
- "inTime": "00:02:29.09",
- "outTime": "00:02:33.03",
+ "inTime": "00:02:29.100",
+ "outTime": "00:02:33.036",
"transcript": "Mais malgré tout cela, nous sommes différents"
},
{
- "inTime": "00:02:33.03",
- "outTime": "00:02:34.85",
+ "inTime": "00:02:33.036",
+ "outTime": "00:02:34.859",
"transcript": "nous sommes complexe"
},
{
- "inTime": "00:02:34.85",
- "outTime": "00:02:36.45",
+ "inTime": "00:02:34.859",
+ "outTime": "00:02:36.452",
"transcript": "nous sommes chaotique."
},
{
- "inTime": "00:02:36.45",
- "outTime": "00:02:38.81",
+ "inTime": "00:02:36.452",
+ "outTime": "00:02:38.818",
"transcript": "Individuellement, nous sommes différents"
},
{
- "inTime": "00:02:38.81",
- "outTime": "00:02:40.44",
+ "inTime": "00:02:38.818",
+ "outTime": "00:02:40.441",
"transcript": "au fil du temps, dans des contextes différents"
},
{
- "inTime": "00:02:40.44",
- "outTime": "00:02:42.35",
+ "inTime": "00:02:40.441",
+ "outTime": "00:02:42.356",
"transcript": "dans des rôles différents, dans des groupes différents."
},
{
- "inTime": "00:02:42.35",
- "outTime": "00:02:45.42",
+ "inTime": "00:02:42.356",
+ "outTime": "00:02:45.429",
"transcript": "Nous devons affirmer notre spécificité"
},
{
- "inTime": "00:02:45.42",
- "outTime": "00:02:47.86",
+ "inTime": "00:02:45.429",
+ "outTime": "00:02:47.864",
"transcript": "nous avons besoin de former et de perfectionner notre identité."
},
{
- "inTime": "00:02:47.86",
- "outTime": "00:02:50.91",
+ "inTime": "00:02:47.864",
+ "outTime": "00:02:50.914",
"transcript": "Nous luttons contre l'identité qui nous est imposé."
},
{
- "inTime": "00:02:50.91",
- "outTime": "00:02:56.36",
+ "inTime": "00:02:50.914",
+ "outTime": "00:02:56.367",
"transcript": "Généralement, les gens ne s'intègrent pas facilement dans les catégories qu'on leurs assigne"
},
{
- "inTime": "00:02:56.36",
- "outTime": "00:02:58.98",
+ "inTime": "00:02:56.367",
+ "outTime": "00:02:58.982",
"transcript": "et pourtant nous persistons à les affecter."
},
{
- "inTime": "00:02:58.98",
- "outTime": "00:03:02.63",
+ "inTime": "00:02:58.982",
+ "outTime": "00:03:02.631",
"transcript": "Et puis, quelque chose de nouveau arrive"
},
{
- "inTime": "00:03:02.63",
- "outTime": "00:03:05.41",
+ "inTime": "00:03:02.631",
+ "outTime": "00:03:05.415",
"transcript": "et secoue nos groupes, nos catégories et nos règles"
},
{
- "inTime": "00:03:05.41",
- "outTime": "00:03:08.26",
+ "inTime": "00:03:05.415",
+ "outTime": "00:03:08.266",
"transcript": "et nous avons besoin d'ajuster, de reconstruire et de repenser."
},
{
- "inTime": "00:03:08.26",
- "outTime": "00:03:12.53",
+ "inTime": "00:03:08.266",
+ "outTime": "00:03:12.533",
"transcript": "Quelque chose comme: les réseaux, le numérique."
},
{
- "inTime": "00:03:12.53",
- "outTime": "00:03:15.47",
+ "inTime": "00:03:12.533",
+ "outTime": "00:03:15.471",
"transcript": "Ce nouveau monde numérique et connecté"
},
{
- "inTime": "00:03:15.47",
- "outTime": "00:03:17.87",
+ "inTime": "00:03:15.471",
+ "outTime": "00:03:17.875",
"transcript": "remet en question la façon dont nous groupons les choses"
},
{
- "inTime": "00:03:17.87",
- "outTime": "00:03:20.75",
+ "inTime": "00:03:17.875",
+ "outTime": "00:03:20.759",
"transcript": "et défi nos excuses pour ne pas laisser les gens sortir."
},
{
- "inTime": "00:03:20.75",
- "outTime": "00:03:25.46",
+ "inTime": "00:03:20.759",
+ "outTime": "00:03:25.469",
"transcript": "Le numérique change notre vision du temps, de l'espace et des distances"
},
{
- "inTime": "00:03:25.46",
- "outTime": "00:03:31.08",
+ "inTime": "00:03:25.469",
+ "outTime": "00:03:31.085",
"transcript": "et par extension notre point de vue du design, ce qui est possible et du coût des choses."
},
{
- "inTime": "00:03:31.08",
- "outTime": "00:03:36.04",
+ "inTime": "00:03:31.085",
+ "outTime": "00:03:36.048",
"transcript": "Les objets numériques sont plastique, mutable, malléable et adaptable."
},
{
- "inTime": "00:03:36.04",
- "outTime": "00:03:39.50",
+ "inTime": "00:03:36.048",
+ "outTime": "00:03:39.500",
"transcript": "Avant, tout le monde ne pouvait pas convenir"
},
{
- "inTime": "00:03:39.50",
- "outTime": "00:03:42.16",
+ "inTime": "00:03:39.500",
+ "outTime": "00:03:42.167",
"transcript": "autoriser quelqu'un signifiait mettre quelqu'un d'autre à l'écart."
},
{
- "inTime": "00:03:42.16",
- "outTime": "00:03:46.06",
+ "inTime": "00:03:42.167",
+ "outTime": "00:03:46.067",
"transcript": "Dans le numérique, tout est très extensible"
},
{
- "inTime": "00:03:46.06",
- "outTime": "00:03:49.76",
+ "inTime": "00:03:46.067",
+ "outTime": "00:03:49.767",
"transcript": "Avant, ce que nous créions ne pouvait pas convenir à tous."
},
{
- "inTime": "00:03:49.76",
- "outTime": "00:03:51.77",
+ "inTime": "00:03:49.767",
+ "outTime": "00:03:51.777",
"transcript": "Alors nous l'adaptions au plus grand groupe"
},
{
- "inTime": "00:03:51.77",
- "outTime": "00:03:54.53",
+ "inTime": "00:03:51.777",
+ "outTime": "00:03:54.533",
"transcript": "Nous l'avons fait pour le groupe appelé moyen ou typique"
},
{
- "inTime": "00:03:54.53",
- "outTime": "00:03:58.26",
+ "inTime": "00:03:54.533",
+ "outTime": "00:03:58.267",
"transcript": "Ceci laissait de côté tous ceux qui ne sont pas moyens ou typiques."
},
{
- "inTime": "00:03:58.26",
- "outTime": "00:04:03.39",
+ "inTime": "00:03:58.267",
+ "outTime": "00:04:03.399",
"transcript": "Dans la réalité numérique ce que nous faisons peut être reconfiguré, adapté"
},
{
- "inTime": "00:04:03.39",
- "outTime": "00:04:06.27",
+ "inTime": "00:04:03.399",
+ "outTime": "00:04:06.274",
"transcript": "et prendre une forme qui est la meilleur pour chaque individu."
},
{
- "inTime": "00:04:06.27",
- "outTime": "00:04:11.90",
+ "inTime": "00:04:06.274",
+ "outTime": "00:04:11.900",
"transcript": "Dans le monde solide, chaque copie coûte presque autant que l'original."
},
{
- "inTime": "00:04:11.90",
- "outTime": "00:04:14.35",
+ "inTime": "00:04:11.900",
+ "outTime": "00:04:14.351",
"transcript": "la consommation consommait en fait."
},
{
- "inTime": "00:04:14.35",
- "outTime": "00:04:18.56",
+ "inTime": "00:04:14.351",
+ "outTime": "00:04:18.567",
"transcript": "Dans le monde numérique, nous pouvons copier presque sans coût."
},
{
- "inTime": "00:04:18.56",
- "outTime": "00:04:21.00",
+ "inTime": "00:04:18.567",
+ "outTime": "00:04:21.000",
"transcript": "La consommation ne consomme plus."
},
{
- "inTime": "00:04:21.00",
- "outTime": "00:04:24.52",
+ "inTime": "00:04:21.000",
+ "outTime": "00:04:24.522",
"transcript": "Avant, il fallait beaucoup de temps et d'effort"
},
{
- "inTime": "00:04:24.52",
- "outTime": "00:04:27.23",
+ "inTime": "00:04:24.522",
+ "outTime": "00:04:27.233",
"transcript": "pour livrer des choses, surtout pour les gens très loin."
},
{
- "inTime": "00:04:27.23",
- "outTime": "00:04:30.93",
+ "inTime": "00:04:27.233",
+ "outTime": "00:04:30.933",
"transcript": "Maintenant, il est aussi facile de livrer des choses dans le monde"
},
{
- "inTime": "00:04:30.93",
- "outTime": "00:04:33.13",
+ "inTime": "00:04:30.933",
+ "outTime": "00:04:33.133",
"transcript": "que de le livrer juste à côté"
},
{
- "inTime": "00:04:33.13",
- "outTime": "00:04:36.85",
+ "inTime": "00:04:33.133",
+ "outTime": "00:04:36.852",
"transcript": "Avant, si on ne placait pas les choses dans un endroit fixe"
},
{
- "inTime": "00:04:36.85",
- "outTime": "00:04:39.53",
+ "inTime": "00:04:36.852",
+ "outTime": "00:04:39.533",
"transcript": "nous avions du mal à les retrouver."
},
{
- "inTime": "00:04:39.53",
- "outTime": "00:04:43.63",
+ "inTime": "00:04:39.533",
+ "outTime": "00:04:43.633",
"transcript": "Maintenant, nous pouvons les placer n'importe où sur le réseau et"
},
{
- "inTime": "00:04:43.63",
- "outTime": "00:04:46.26",
+ "inTime": "00:04:43.633",
+ "outTime": "00:04:46.267",
"transcript": "les récupérer n'importe où sur le réseau."
},
{
- "inTime": "00:04:46.26",
- "outTime": "00:04:50.13",
+ "inTime": "00:04:46.267",
+ "outTime": "00:04:50.133",
"transcript": "Avant, nous avions besoin d'étiqueter les choses clairement et simplement."
},
{
- "inTime": "00:04:50.13",
- "outTime": "00:04:52.80",
+ "inTime": "00:04:50.133",
+ "outTime": "00:04:52.800",
"transcript": "Afin de pouvoir les reconnaître et de savoir quoi faire avec elles."
},
{
- "inTime": "00:04:52.80",
- "outTime": "00:04:56.44",
+ "inTime": "00:04:52.800",
+ "outTime": "00:04:56.449",
"transcript": "Maintenant nous pouvons voir une description de chaque personne ou chose"
},
{
- "inTime": "00:04:56.44",
- "outTime": "00:04:59.02",
+ "inTime": "00:04:56.449",
+ "outTime": "00:04:59.027",
"transcript": "voir ce qui est util et pertinent à notre but."
},
{
- "inTime": "00:04:59.02",
- "outTime": "00:05:03.01",
+ "inTime": "00:04:59.027",
+ "outTime": "00:05:03.020",
"transcript": "Et en passant, nous avons appris que"
},
{
- "inTime": "00:05:03.01",
- "outTime": "00:05:06.36",
+ "inTime": "00:05:03.020",
+ "outTime": "00:05:06.367",
"transcript": "l'inclusion et l'égalité sont bons pour nous tous."
},
{
- "inTime": "00:05:06.36",
- "outTime": "00:05:09.35",
+ "inTime": "00:05:06.367",
+ "outTime": "00:05:09.359",
"transcript": "Nous sommes tous sains, plus riches et plus sage"
},
{
- "inTime": "00:05:09.35",
- "outTime": "00:05:12.19",
+ "inTime": "00:05:09.359",
+ "outTime": "00:05:12.200",
"transcript": "quand notre société est inclusive et égalitaire."
},
{
- "inTime": "00:05:12.19",
- "outTime": "00:05:15.36",
+ "inTime": "00:05:12.200",
+ "outTime": "00:05:15.367",
"transcript": "Nous avons également découvert que les divers groupes"
},
{
- "inTime": "00:05:15.36",
- "outTime": "00:05:18.93",
+ "inTime": "00:05:15.367",
+ "outTime": "00:05:18.936",
"transcript": "sont plus innovants et créatifs, et plus adapté à la planification et aux prévisions."
},
{
- "inTime": "00:05:18.93",
- "outTime": "00:05:23.73",
+ "inTime": "00:05:18.936",
+ "outTime": "00:05:23.733",
"transcript": "Nous avons expérimenté de nouvelles organisations comme"
},
{
- "inTime": "00:05:23.73",
- "outTime": "00:05:26.33",
+ "inTime": "00:05:23.733",
+ "outTime": "00:05:26.333",
"transcript": "la plus populaire, celui à ignorer"
},
{
- "inTime": "00:05:26.33",
- "outTime": "00:05:28.69",
+ "inTime": "00:05:26.333",
+ "outTime": "00:05:28.700",
"transcript": "ami, pas un ami."
},
{
- "inTime": "00:05:28.69",
- "outTime": "00:05:31.03",
+ "inTime": "00:05:28.700",
+ "outTime": "00:05:31.033",
"transcript": "Mais nous pouvons faire mieux."
},
{
- "inTime": "00:05:31.03",
- "outTime": "00:05:33.26",
+ "inTime": "00:05:31.033",
+ "outTime": "00:05:33.267",
"transcript": "Nous pouvons nous permettre d'être généreux dans notre conception"
},
{
- "inTime": "00:05:33.26",
- "outTime": "00:05:35.39",
+ "inTime": "00:05:33.267",
+ "outTime": "00:05:35.400",
"transcript": "nous avons moins d'excuses à exclure."
},
{
- "inTime": "00:05:35.39",
- "outTime": "00:05:37.56",
+ "inTime": "00:05:35.400",
+ "outTime": "00:05:37.567",
"transcript": "Nous pouvons être fidèles à notre diversité."
},
{
- "inTime": "00:05:37.56",
- "outTime": "00:05:43.06",
+ "inTime": "00:05:37.567",
+ "outTime": "00:05:43.067",
"transcript": "Peut-être maintenant, nous pouvons trouver un moyen de faire de la place pour tous."
}
]
diff --git a/tests/html/VideoPlayerAria-Test.html b/tests/html/VideoPlayerAria-Test.html
new file mode 100644
index 0000000..532ff8d
--- /dev/null
+++ b/tests/html/VideoPlayerAria-Test.html
@@ -0,0 +1,47 @@
+
+
+
+
+ Video Player ARIA Test Suite
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/html/VideoPlayerTranscript-test.html b/tests/html/VideoPlayerTranscript-test.html
index 409c8f9..c8e997c 100644
--- a/tests/html/VideoPlayerTranscript-test.html
+++ b/tests/html/VideoPlayerTranscript-test.html
@@ -7,7 +7,6 @@
-
diff --git a/tests/js/MenuButtonTests.js b/tests/js/MenuButtonTests.js
index 41476e1..c76bb42 100644
--- a/tests/js/MenuButtonTests.js
+++ b/tests/js/MenuButtonTests.js
@@ -86,10 +86,10 @@ fluid.registerNamespace("fluid.tests");
jqUnit.assertEquals("Initially, 'show/hide' option should have the correct text", that.options.strings.showLanguage, that.locate("showHide").text());
jqUnit.notVisible("The menu should be hidden by default", that.container);
- that.show();
- jqUnit.isVisible("show() shows the menu", that.container);
- that.hide();
- jqUnit.notVisible("hide() hides the menu", that.container);
+ that.showMenu();
+ jqUnit.isVisible("showMenu() shows the menu", that.container);
+ that.hideMenu();
+ jqUnit.notVisible("hideMenu() hides the menu", that.container);
that.container.fluid("selectable.select", that.locate("showHide"));
verifySelection("Selecting the 'show/hide' option", that, numLangs, 0);
@@ -104,7 +104,7 @@ fluid.registerNamespace("fluid.tests");
that.activate(1);
verifyActivation("Activating a new language", that, 1);
- that.show();
+ that.showMenu();
$(that.locate("language")[2]).click();
verifyActivation("Clicking a language", that, 2);
@@ -219,5 +219,34 @@ fluid.registerNamespace("fluid.tests");
});
});
+ menuButtonTests.asyncTest("Language Controls: ARIA", function () {
+ expect(8);
+ var testControls = fluid.tests.initLangControls({
+ listeners: {
+ onReady: {
+ listener: function (that) {
+ var button = that.button.locate("button");
+ var ariaOwns = button.attr("aria-owns");
+ var ariaControls = button.attr("aria-controls");
+ jqUnit.assertTrue("Button should have aria-owns attribute", !!ariaOwns);
+ jqUnit.assertEquals("Button should 'own' menu", that.menu.container.attr("id"), ariaOwns);
+ jqUnit.assertTrue("Button should have aria-haspopup attribute", !!button.attr("aria-haspopup"));
+ jqUnit.assertTrue("Menu should be aria-hidden", that.menu.container.attr("aria-hidden"));
+ jqUnit.assertTrue("Button should have aria-controls attribute", !!ariaControls);
+ jqUnit.assertEquals("Button should aria-controls the menu", that.menu.container.attr("id"), ariaControls);
+
+ that.menu.showMenu();
+ jqUnit.assertEquals("After show, menu should not be aria-hidden", "false", that.menu.container.attr("aria-hidden"));
+
+ that.menu.hideMenu();
+ jqUnit.assertEquals("After hide, menu should be aria-hidden", "true", that.menu.container.attr("aria-hidden"));
+ start();
+
+ }
+ }
+ }
+ });
+ });
+
});
})(jQuery);
diff --git a/tests/js/ToggleButtonTests.js b/tests/js/ToggleButtonTests.js
index fbe4e05..3b97cf1 100644
--- a/tests/js/ToggleButtonTests.js
+++ b/tests/js/ToggleButtonTests.js
@@ -125,12 +125,39 @@ fluid.registerNamespace("fluid.tests");
toggleButton.click();
toggleButton.blur().focus(); // tooltip not updated until 'requested' again
jqUnit.assertEquals("After click, Tooltip should contain '" + testStrings.release + "'", testStrings.release, tooltip.text());
-
+ toggleButton.blur();
start();
}
}
});
});
+ var myCustomText = "My custom text to replace default toggleButton's tooltip content behaviour";
+ fluid.tests.tooltipContentFunction = function () {
+ return myCustomText;
+ };
+
+ toggleButtonTests.asyncTest("Changing tooltipContentFunction", function () {
+ var testStrings = {
+ press: "press me",
+ release: "release me"
+ },
+ testComponent = fluid.tests.initToggleButton({
+ invokers: {
+ tooltipContentFunction: {
+ funcName: "fluid.tests.tooltipContentFunction"
+ }
+ },
+ strings: testStrings,
+ listeners: {
+ onReady: function (that) {
+ var toggleButton = that.locate("button"),
+ tooltip = fluid.testUtils.getTooltipCheckString(toggleButton, myCustomText);
+ start();
+ }
+ }
+ });
+ });
+
});
})(jQuery);
diff --git a/tests/js/VideoPlayerAriaTests.js b/tests/js/VideoPlayerAriaTests.js
new file mode 100644
index 0000000..cb8fee0
--- /dev/null
+++ b/tests/js/VideoPlayerAriaTests.js
@@ -0,0 +1,152 @@
+/*
+Copyright 2012 OCAD University
+
+Licensed under the Educational Community License (ECL), Version 2.0 or the New
+BSD license. You may not use this file except in compliance with one these
+Licenses.
+
+You may obtain a copy of the ECL 2.0 License and BSD License at
+https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt
+
+*/
+
+// Declare dependencies
+/*global fluid, jqUnit, expect, jQuery, start*/
+
+// JSLint options
+/*jslint white: true, funcinvoke: true, undef: true, newcap: true, nomen: true, regexp: true, bitwise: true, browser: true, forin: true, maxerr: 100, indent: 4 */
+
+(function ($) {
+ $(document).ready(function () {
+
+ fluid.registerNamespace("fluid.tests.videoPlayer");
+
+ var videoPlayerARIATests = new jqUnit.TestCase("Video Player ARIA Tests");
+
+ var baseOpts = {
+ video: {
+ sources: [
+ {
+ src: "TestVideo.mp4",
+ type: "video/mp4"
+ },
+ {
+ src: "../../demos/videos/ReorganizeFuture/ReorganizeFuture.webm",
+ type: "video/webm"
+ }
+ ],
+ captions: [
+ {
+ src: "TestCaptions.en.vtt",
+ type: "text/vtt",
+ srclang: "en",
+ label: "English"
+ },
+ {
+ src: "TestCaptions.fr.vtt",
+ type: "text/vtt",
+ srclang: "fr",
+ label: "French"
+ }
+ ],
+ transcripts: [
+ {
+ src: "TestTranscripts.en.json",
+ type: "JSONcc",
+ srclang: "en",
+ label: "English"
+ },
+ {
+ src: "TestTranscripts.fr.json",
+ type: "JSONcc",
+ srclang: "fr",
+ label: "French"
+ }
+ ]
+ },
+ templates: {
+ videoPlayer: {
+ forceCache: true,
+ href: "../../html/videoPlayer_template.html"
+ }
+ }
+ };
+
+ var initVideoPlayer = function () {
+ var opts = fluid.copy(baseOpts);
+ var container = arguments[0];
+ for (var index = 1; index < arguments.length; index++) {
+ $.extend(true, opts, arguments[index]);
+ }
+ return fluid.videoPlayer(container, opts);
+ };
+
+ fluid.tests.videoPlayer.checkAriaControlsAttr = function (controlsToTest) {
+ fluid.each(controlsToTest, function (spec, index) {
+ expect(2);
+ jqUnit.assertTrue(spec.controlName + " should have aria-controls attribute", !!$(spec.control).attr("aria-controls"));
+ jqUnit.assertEquals(spec.controlName + " should aria-controls " + spec.controlledName,
+ $(spec.controlled).attr("id"),
+ $(spec.control).attr("aria-controls"));
+ });
+ };
+
+ fluid.tests.videoPlayer.triggerTranscript = function (that) {
+ $(".flc-videoPlayer-transcripts-languageMenu li:eq(0)").click();
+ };
+
+ fluid.tests.videoPlayer.testAriaControlsAttrs = function (that) {
+ var controlsToTest = [{
+ controlName: "Caption menu",
+ control: ".flc-videoPlayer-captions-languageMenu",
+ controlledName: "captions area",
+ controlled: ".flc-videoPlayer-captionArea"
+ }, {
+ controlName: "Transcript menu",
+ control: ".flc-videoPlayer-transcripts-languageMenu",
+ controlledName: "transcript area",
+ controlled: ".flc-videoPlayer-transcript-text"
+ }];
+
+ var captionMenuLanguages = $(".flc-videoPlayer-captions-languageMenu .flc-videoPlayer-language");
+ for (var i = 0; i < captionMenuLanguages.length; i++) {
+ controlsToTest.push({
+ controlName: "Caption language " + i,
+ control: captionMenuLanguages[i],
+ controlledName: "captions area",
+ controlled: ".flc-videoPlayer-captionArea"
+ });
+ }
+ var transcriptMenuLanguages = $(".flc-videoPlayer-transcripts-languageMenu .flc-videoPlayer-language");
+ for (i = 0; i < transcriptMenuLanguages.length; i++) {
+ controlsToTest.push({
+ controlName: "Transcript language " + i,
+ control: transcriptMenuLanguages[i],
+ controlledName: "transcript area",
+ controlled: ".flc-videoPlayer-transcript-text"
+ });
+ }
+ fluid.tests.videoPlayer.checkAriaControlsAttr(controlsToTest);
+ start();
+ };
+
+ videoPlayerARIATests.asyncTest("aria-controls on language menus", function () {
+ var testOpts = {
+ listeners: {
+ onReady: "fluid.tests.videoPlayer.triggerTranscript"
+ },
+ components: {
+ transcript: {
+ options: {
+ listeners: {
+ onTranscriptsLoaded: "fluid.tests.videoPlayer.testAriaControlsAttrs"
+ }
+ }
+ }
+ }
+ };
+ initVideoPlayer($(".videoPlayer-aria"), testOpts);
+ });
+
+ });
+})(jQuery);
diff --git a/tests/js/VideoPlayerControlsTests.js b/tests/js/VideoPlayerControlsTests.js
index 88efb36..89efb0c 100644
--- a/tests/js/VideoPlayerControlsTests.js
+++ b/tests/js/VideoPlayerControlsTests.js
@@ -72,25 +72,37 @@ fluid.registerNamespace("fluid.tests");
};
videoPlayerControlsTests.asyncTest("Volume controls", function () {
- expect(4);
- var testVolumeControls = fluid.tests.initVolumeControls({
- listeners: {
- onReady: function (that) {
- var muteButton = that.locate("mute");
- var volumeSlider = that.locate("volumeControl");
-
- fluid.testUtils.verifyBasicButtonFunctions(muteButton, "Mute", "Mute", "Un-mute", "fl-videoPlayer-muted");
-
- jqUnit.assertEquals("There should be exactly one volume slider", 1, volumeSlider.length);
- var sliderHandle = that.locate("handle");
- jqUnit.assertEquals("The slider button should have role of 'slider'", "slider", sliderHandle.attr("role"));
- jqUnit.assertEquals("The slider button should have valuenow of '50'", "50", sliderHandle.attr("aria-valuenow"));
- jqUnit.notVisible("The slider should not be visible initially", volumeSlider);
-
- start();
+ expect(5);
+ var checkSlider = function(ariavaluenow, expectedValue) {
+ jqUnit.assertEquals("The slider button should have valuenow of " + expectedValue, expectedValue, ariavaluenow);
+ },
+ checkTooltipOnHover = function (element, expectedText) {
+ fluid.testUtils.getTooltipCheckString(element, expectedText);
+ element.mouseleave();
+ },
+ testVolumeControls = fluid.tests.initVolumeControls({
+ listeners: {
+ onReady: function (that) {
+ var muteButton = that.locate("mute"),
+ volumeSlider = that.locate("volumeControl"),
+ sliderHandle = that.locate("handle");
+
+ checkTooltipOnHover(volumeSlider, "Volume");
+ checkTooltipOnHover(muteButton, "Mute");
+ muteButton.click();
+ checkSlider(sliderHandle.attr("aria-valuenow"), "0");
+ checkTooltipOnHover(muteButton, "Un-mute");
+ muteButton.click();
+
+ jqUnit.assertEquals("There should be exactly one volume slider", 1, volumeSlider.length);
+ jqUnit.assertEquals("The slider button should have role of 'slider'", "slider", sliderHandle.attr("role"));
+ checkSlider(sliderHandle.attr("aria-valuenow"), "50");
+ jqUnit.notVisible("The slider should not be visible initially", volumeSlider);
+
+ start();
+ }
}
- }
- });
+ });
});
videoPlayerControlsTests.asyncTest("Volume controls integration", function () {
diff --git a/tests/js/VideoPlayerHTML5CaptionatorTests.js b/tests/js/VideoPlayerHTML5CaptionatorTests.js
index 6602fff..b7fa97d 100644
--- a/tests/js/VideoPlayerHTML5CaptionatorTests.js
+++ b/tests/js/VideoPlayerHTML5CaptionatorTests.js
@@ -138,6 +138,31 @@ https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt
displayCaptions: true
}
});
+
+ var testTrackShowing = function (trackEl) {
+ jqUnit.assertEquals(trackEl.track.label + " are showing", captionator.TextTrack.SHOWING, trackEl.track.mode);
+ };
+
+ var testTrackNotShowing = function (trackEl) {
+ jqUnit.assertEquals(trackEl.track.label + " are not showing", captionator.TextTrack.OFF, trackEl.track.mode);
+ };
+
+ // videoPlayer creation
+/*
+ var initVideoPlayer = function (container, options, callback) {
+ options = options || {};
+
+ fluid.merge(null, options, {
+ listeners: {
+ onReady: function (videoPlayer) {
+ callback(videoPlayer);
+ }
+ }
+ });
+
+ return fluid.videoPlayer(container, options);
+ };
+*/
// build optionsFullWithDisplayCaptionsOff based on optionsWithoutCurrentTrack but with displayCaptions set to false
fluid.merge(null, optionsFullWithDisplayCaptionsOff, optionsWithoutCurrentTrack);
@@ -149,6 +174,145 @@ https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt
displayCaptions: false
}
});
+
+ // A template function which checks captionator initalization depending on different provided options and config
+/*
+ var testInit = function (config) {
+ expect(2);
+
+ setupEnvironment(config.isHTML5);
+
+ config.testComponentFunc = config.hasComponent ? jqUnit.assertNotUndefined : jqUnit.assertUndefined;
+ config.componentStr = config.hasComponent ? "html5Captionator has been instantiated"
+ : "html5Captionator has NOT been instantiated";
+ config.domStr = config.hasDOMElement ? "Captionator DIV is present in the DOM"
+ : "Captionator DIV is NOT present in the DOM";
+
+ initVideoPlayer(container[config.testIndex], config.options, function (videoPlayer) {
+ config.testComponentFunc(config.componentStr, videoPlayer.html5Captionator);
+ jqUnit.assertEquals(config.domStr, (config.hasDOMElement)?1:0, $(captionatorSelector).length);
+ start();
+ });
+ };
+*/
+
+/*
+ videoPlayerCaptionatorTests.asyncTest("NO HTML5: html5Captionator was not initialized", function () {
+ testInit({
+ testIndex: 0,
+ options: optionsFull,
+ isHTML5: false,
+ hasComponent: false,
+ hasDOMElement: false
+ });
+ });
+
+
+ videoPlayerCaptionatorTests.asyncTest("HTML5: html5Captionator was initialized but without tracks", function () {
+ testInit({
+ testIndex: 1,
+ options: optionsNoCaptions,
+ isHTML5: true,
+ hasComponent: true,
+ hasDOMElement: false
+ });
+ });
+
+
+ videoPlayerCaptionatorTests.asyncTest("HTML5: html5Captionator was initialized", function () {
+ testInit({
+ testIndex: 2,
+ options: optionsFull,
+ isHTML5: true,
+ hasComponent: true,
+ hasDOMElement: true
+ });
+ });
+
+ videoPlayerCaptionatorTests.asyncTest("Changing and hiding tracks", function () {
+ var testIndex = 3;
+
+ expect(7);
+
+ setupEnvironment(true);
+
+ initVideoPlayer(container[testIndex], optionsFull, function (videoPlayer) {
+
+ var html5Captionator = videoPlayer.html5Captionator;
+ var tracks = $("track", html5Captionator.locate("video"));
+ var englishTrack = tracks[0];
+ var frenchTrack = tracks[1];
+
+ jqUnit.assertNotUndefined("html5Captionator has been instantiated", html5Captionator);
+
+ testTrackShowing(englishTrack);
+ testTrackNotShowing(frenchTrack);
+
+ fluid.videoPlayer.html5Captionator.showCurrentTrack([1], tracks, html5Captionator.options.captions);
+
+ testTrackNotShowing(englishTrack);
+ testTrackShowing(frenchTrack);
+
+ fluid.videoPlayer.html5Captionator.hideAllTracks(tracks);
+
+ testTrackNotShowing(englishTrack);
+ testTrackNotShowing(frenchTrack);
+
+ start();
+ });
+ });
+
+ // TEST FLUID-4618. Writing a test to verify that functions in preInit work properly
+ videoPlayerCaptionatorTests.asyncTest("html5Captionator displayCaptions test", function () {
+ var testIndex = 4;
+
+ expect(1);
+
+ setupEnvironment(true);
+
+ initVideoPlayer(container[testIndex], optionsFull, function (videoPlayer) {
+ var html5Captionator = videoPlayer.html5Captionator;
+
+ html5Captionator.refreshCaptions();
+
+ jqUnit.assertNotUndefined("html5Captionator has been instantiated", html5Captionator);
+
+ start();
+ });
+ });
+
+
+ videoPlayerCaptionatorTests.asyncTest("html5Captionator without currentTrack", function () {
+ var testIndex = 5;
+
+ expect(5);
+
+ setupEnvironment(true);
+
+ initVideoPlayer(container[testIndex], optionsNoCurrentTrack, function (videoPlayer) {
+
+ var html5Captionator = videoPlayer.html5Captionator;
+ var currentTracks = html5Captionator.model.currentTracks;
+
+ jqUnit.assertUndefined("currentTracks is empty in the model", optionsNoCurrentTrack.currentTracks);
+
+ jqUnit.assertNotUndefined("html5Captionator has been instantiated", html5Captionator);
+
+ jqUnit.assertEquals("Current track is also empty in the html5Captionator model",
+ 0, currentTracks.captions.length);
+ // Can't support this "self-modification" of the model of captionator since it may corrupt data belonging
+ // to others during startup
+ //jqUnit.assertEquals("And this element is the index for the first element in the array of captions",
+ // 0, currentTracks.captions[0]);
+
+ var tracks = $("track", html5Captionator.locate("video"));
+ testTrackNotShowing(tracks[0]);
+ testTrackNotShowing(tracks[1]);
+
+ start();
+ });
+ });
+*/
// Define tests declaratively
var testScenarios = {
@@ -295,5 +459,6 @@ https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt
// Running out tests
fluid.testUtils.runTestScenarios(testScenarios);
+
});
})(jQuery);
diff --git a/tests/js/VideoPlayerIntegrationTests.js b/tests/js/VideoPlayerIntegrationTests.js
index 949edb2..965d19e 100644
--- a/tests/js/VideoPlayerIntegrationTests.js
+++ b/tests/js/VideoPlayerIntegrationTests.js
@@ -31,36 +31,34 @@ https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt
{
src: "../../demos/videos/ReorganizeFuture/ReorganizeFuture.webm",
type: "video/webm"
- },
+ }
],
captions: [
{
src: "TestCaptions.en.vtt",
type: "text/vtt",
srclang: "en",
- label: "English",
+ label: "English"
},
{
src: "TestCaptions.fr.vtt",
type: "text/vtt",
srclang: "fr",
- label: "French",
+ label: "French"
}
],
transcripts: [
{
- // TODO: renamed to TestTranscript.en(fr).json once the pull request for transcript component
- // unit test (FLUID-4643) is merged into demo branch
- src: "../../demos/videos/ReorganizeFuture/ReorganizeFuture.transcripts.en.json",
+ src: "TestTranscripts.en.json",
type: "JSONcc",
srclang: "en",
- label: "English",
+ label: "English"
},
{
- src: "../../demos/videos/ReorganizeFuture/ReorganizeFuture.transcripts.fr.json",
+ src: "TestTranscripts.fr.json",
type: "JSONcc",
srclang: "fr",
- label: "French",
+ label: "French"
}
]
},
@@ -212,7 +210,7 @@ https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt
};
- fluid.videoPlayer.testTranscriptLoaded = function (intervalList, that) {
+ fluid.videoPlayer.testTranscriptLoaded = function (intervalList, id, that) {
var transcriptTextArea = $(".flc-videoPlayer-transcript-text");
// make sure the transcript text is switched when another option is selected from the language combo box
diff --git a/tests/js/VideoPlayerTests.js b/tests/js/VideoPlayerTests.js
index 697954e..7329949 100644
--- a/tests/js/VideoPlayerTests.js
+++ b/tests/js/VideoPlayerTests.js
@@ -167,5 +167,81 @@ https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt
});
});
+ var testVTTCaption = function (vttArray, index, captionObj) {
+ jqUnit.assertEquals("First line is empty", "", vttArray[index]);
+
+ var times = fluid.videoPlayer.secondsToHmsm(captionObj.start_time) + " --> " + fluid.videoPlayer.secondsToHmsm(captionObj.end_time);
+
+ jqUnit.assertEquals("Times are correctly specified", times, vttArray[index + 1]);
+ jqUnit.assertEquals("Caption is in the correct position", captionObj.text, vttArray[index + 2]);
+ };
+
+ videoPlayerTests.test("secondsToHmsm", function () {
+ expect(15);
+ jqUnit.assertEquals("0 seconds", "00:00:00.000", fluid.videoPlayer.secondsToHmsm(0));
+ jqUnit.assertEquals("1 milli seconds", "00:00:00.100", fluid.videoPlayer.secondsToHmsm(0.1));
+ jqUnit.assertEquals("1111 milli seconds", "00:00:00.111", fluid.videoPlayer.secondsToHmsm(0.1111));
+ jqUnit.assertEquals("10 seconds", "00:00:10.000", fluid.videoPlayer.secondsToHmsm(10));
+ jqUnit.assertEquals("1 minute", "00:01:00.000", fluid.videoPlayer.secondsToHmsm(60));
+ jqUnit.assertEquals("59 minutes", "00:59:00.000", fluid.videoPlayer.secondsToHmsm("3540"));
+ jqUnit.assertEquals("59 minutes and 59 seconds", "00:59:59.000", fluid.videoPlayer.secondsToHmsm(3599));
+ jqUnit.assertEquals("1 hour", "01:00:00.000", fluid.videoPlayer.secondsToHmsm(3600));
+ jqUnit.assertEquals("25 hours", "25:00:00.000", fluid.videoPlayer.secondsToHmsm(90000));
+ jqUnit.assertEquals("1 hour, 1 min, 1 sec", "01:01:01.000", fluid.videoPlayer.secondsToHmsm(3661));
+ jqUnit.assertEquals("7 minutes and 5 seconds", "00:07:05.000", fluid.videoPlayer.secondsToHmsm(425));
+ jqUnit.assertEquals("10 hours and 12 minutes", "10:12:00.000", fluid.videoPlayer.secondsToHmsm(36720));
+ jqUnit.assertEquals("100 hours", "100:00:00.000", fluid.videoPlayer.secondsToHmsm(360000));
+ jqUnit.assertEquals("Negative number - return 0", "00:00:00.000", fluid.videoPlayer.secondsToHmsm(-1));
+ jqUnit.assertEquals("letter - return 0", "00:00:00.000", fluid.videoPlayer.secondsToHmsm("x"));
+ });
+
+ videoPlayerTests.test("amaraJsonToVTT", function () {
+ var testJson = [{
+ "subtitle_id": "cseicmgnhp6334683",
+ "text": "Eeny, meeny, miny, moe,",
+ "start_time": 1.7769230769230799,
+ "end_time": 4.0330000000000004,
+ "sub_order": 1.0,
+ "start_of_paragraph": false
+ }, {
+ "subtitle_id": "mgnplxysgb6342310",
+ "text": "Catch a tiger by the toe",
+ "start_time": 4.0330000000000004,
+ "end_time": 5.9923076923076897,
+ "sub_order": 2.0,
+ "start_of_paragraph": false
+ }, {
+ "subtitle_id": "fdztnjtkic6348025",
+ "text": "If he hollers let him go",
+ "start_time": 5.9923076923076897,
+ "end_time": 8.0560769230769207,
+ "sub_order": 3.0,
+ "start_of_paragraph": false
+ }];
+
+ expect(2 + 3 * testJson.length);
+
+ var result = fluid.videoPlayer.amaraJsonToVTT(testJson);
+ var resultArray = result.split("\n");
+ jqUnit.assertEquals("Should be 10 lines in the VTT", 10, resultArray.length);
+ jqUnit.assertEquals("First line is WEBVTT", "WEBVTT", resultArray[0]);
+
+ for (var i = 0; i < testJson.length; i++) {
+ testVTTCaption(resultArray, i * 3 + 1, testJson[i]);
+ }
+ });
+
+ videoPlayerTests.asyncTest("fetchAmaraJson", function () {
+ expect(2);
+
+ fluid.fetchAmaraJsonCallback = function (data) {
+ jqUnit.assertTrue("Json was fetched", data.length > 0);
+ jqUnit.assertEquals("Checking the first caption text", "Eeny, meeny, miny, moe,", data[0].text);
+ start();
+ };
+
+ fluid.videoPlayer.fetchAmaraJson("http://www.youtube.com/watch?v=_VxQEPw1x9E&language=en", fluid.fetchAmaraJsonCallback);
+ });
+
});
})(jQuery);
diff --git a/tests/js/VideoPlayerTranscriptTests.js b/tests/js/VideoPlayerTranscriptTests.js
index 149594d..947bfc2 100644
--- a/tests/js/VideoPlayerTranscriptTests.js
+++ b/tests/js/VideoPlayerTranscriptTests.js
@@ -83,7 +83,7 @@ https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt
var initialTranscriptText;
- fluid.videoPlayer.testTranscriptLoaded = function (intervalList, that) {
+ fluid.videoPlayer.testTranscriptLoaded = function (intervalList, id, that) {
jqUnit.assertNotNull("The transcript text is filled in", $(".flc-videoPlayer-transcript-text").text());
jqUnit.assertTrue("Each transcript element is wrapped in a properly-named span",
($(".flc-videoPlayer-transcript-text").find('[id|="' + that.options.transcriptElementIdPrefix + '"]').length > 0));
@@ -149,14 +149,14 @@ https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt
var universalSubsOpts = {
transcripts: [
{
- src: "http://www.universalsubtitles.org/api/1.0/subtitles/?video_url=http://www.youtube.com/watch?v=_VxQEPw1x9E&language=en",
- type: "jsonp/vtt",
+ src: "http://www.youtube.com/watch?v=_VxQEPw1x9E&language=en",
+ type: "text/amarajson",
srclang: "en",
label: "English"
},
{
- src: "http://www.universalsubtitles.org/api/1.0/subtitles/?video_url=http://www.youtube.com/watch?v=_VxQEPw1x9E&language=fr",
- type: "jsonp/vtt",
+ src: "http://www.youtube.com/watch?v=_VxQEPw1x9E&language=fr",
+ type: "text/amarajson",
srclang: "fr",
label: "French"
}
@@ -170,5 +170,30 @@ https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt
testProcess(universalSubsOpts, "Universal Subtitle transcript files");
}, 500);
+ videoPlayerTranscriptTests.asyncTest("Drop-down aria-controls text area", function () {
+ var testOpts = {
+ listeners: {
+ onReady: function (that) {
+ var attr = that.locate("languageDropdown").attr("aria-controls");
+ jqUnit.assertTrue("Drop-down should have aria-controls attribute", !!attr);
+ jqUnit.assertEquals("aria-controls should reference the text area", that.locate("transcriptText").attr("id"), attr);
+ start();
+ }
+ }
+ };
+ var that = initTranscript(localTranscriptOpts, testOpts);
+ });
+
+ videoPlayerTranscriptTests.asyncTest("transcriptTextId", function () {
+ var testOpts = {
+ listeners: {
+ onReady: function (that) {
+ jqUnit.assertEquals("should be able to retrieve transcript id", that.locate("transcriptText").attr("id"), that.transcriptTextId());
+ start();
+ }
+ }
+ };
+ var that = initTranscript(localTranscriptOpts, testOpts);
+ });
});
})(jQuery);