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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

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);