Skip to content

Commit

Permalink
FLUID-4853: Merged in master and resolved conflicts.
Browse files Browse the repository at this point in the history
  • Loading branch information
cindyli committed Feb 4, 2013
2 parents 88a08b9 + 3c10edd commit 4f74e83
Show file tree
Hide file tree
Showing 12 changed files with 134 additions and 297 deletions.
31 changes: 17 additions & 14 deletions css/VideoPlayer.css
Expand Up @@ -6,36 +6,39 @@
:-moz-full-screen .fl-videoPlayer-main {
height: 100%;
width: 100%;
padding-bottom: 2em;
}

:-moz-full-screen .fl-videoPlayer-video-element, :-moz-full-screen .fl-videoPlayer-overlay {
:-moz-full-screen .fl-videoPlayer-video-element {
position: absolute;
height: 100%;
width: 80%;
}
:-moz-full-screen .fl-videoPlayer-overlay {
width: auto;
}
:-moz-full-screen .fl-videoPlayer-transcriptArea {
position: absolute;
left: 80%;
width: 20%;
max-width: 25em;
float: left;
max-width: 25em;
}

:-webkit-full-screen.fl-videoPlayer-main {
height: 100%;
width: auto;
width: 100%;
position: absolute;
}
:-webkit-full-screen .fl-videoPlayer-container,
:-webkit-full-screen .fl-videoPlayer-video-element {
width: inherit;
height: inherit;
:-webkit-full-screen .fl-videoPlayer-video {
height: 100%;
width: 80%;
}
:-webkit-full-screen .fl-videoPlayer-video-element {
float: right;
width: 100%;
}
:-webkit-full-screen .fl-videoPlayer-overlay {
width: 100%;
float: left;
width: 80%;
}
:-webkit-full-screen .fl-videoPlayer-transcriptArea {
width: 20%;
width: 19.8%;
max-width: 25em;
}

Expand Down
86 changes: 45 additions & 41 deletions js/VideoPlayer.js
Expand Up @@ -143,51 +143,43 @@ https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt
options: {
model: "{videoPlayer}.model",
applier: "{videoPlayer}.applier",
components: {
intervalEventsConductor: {
type: "fluid.videoPlayer.intervalEventsConductor",
options: {
events: {
onTimeChange: "{videoPlayer}.events.onTimeChange",
onIntervalChange: "{videoPlayer}.events.onIntervalChange"
}
}
},
transcript: {
type: "fluid.videoPlayer.transcript",
container: "{videoPlayer}.dom.transcript",
options: {
// TODO (long term) - should not share entire model and applier with transcripts
model: "{videoPlayer}.model",
applier: "{videoPlayer}.applier",
transcripts: "{videoPlayer}.options.video.transcripts",
components: {
transcriptInterval: {
type: "fluid.videoPlayer.intervalEventsConductor",
options: {
events: {
onIntervalChange: "{transcript}.events.onIntervalChange"
}
}
}
},
events: {
onCurrentTranscriptChanged: "{videoPlayer}.events.onCurrentTranscriptChanged",
onTranscriptHide: "{videoPlayer}.events.onTranscriptHide",
onTranscriptShow: "{videoPlayer}.events.onTranscriptShow",
onTranscriptElementChange: "{videoPlayer}.events.onTranscriptElementChange",
onTranscriptsLoaded: "{videoPlayer}.events.onTranscriptsLoaded"
}
}
}
},
events: {
onLoadedMetadata: "{videoPlayer}.events.onLoadedMetadata",
onReady: "{videoPlayer}.events.onMediaReady"
},
sources: "{videoPlayer}.options.video.sources"
}
},
transcript: {
type: "fluid.videoPlayer.transcript",
container: "{videoPlayer}.dom.transcript",
createOnEvent: "onIntervalEventsConductorReady",
options: {
model: "{videoPlayer}.model",
applier: "{videoPlayer}.applier",
transcripts: "{videoPlayer}.options.video.transcripts",
events: {
onCurrentTranscriptChanged: "{videoPlayer}.events.onCurrentTranscriptChanged",
onTranscriptHide: "{videoPlayer}.events.onTranscriptHide",
onTranscriptShow: "{videoPlayer}.events.onTranscriptShow",
onTranscriptElementChange: "{videoPlayer}.events.onTranscriptElementChange",
onTranscriptsLoaded: "{videoPlayer}.events.onTranscriptsLoaded"
}
}
},
intervalEventsConductor: {
type: "fluid.videoPlayer.intervalEventsConductor",
createOnEvent: "onMediaReady",
options: {
events: {
onTimeUpdate: "{videoPlayer}.events.onTimeUpdate",
onIntervalChange: "{transcript}.events.onIntervalChange"
},
listeners: {
"{transcript}.events.onTranscriptsLoaded": "{intervalEventsConductor}.setIntervalList"
}
}
},
controllers: {
type: "fluid.videoPlayer.controllers",
container: "{videoPlayer}.dom.controllers",
Expand Down Expand Up @@ -254,12 +246,12 @@ https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt
},

// public, time events
onTimeChange: null,
onIntervalChange: null,
onTimeUpdate: null,

// The following events are private
onCreateControllersReady: null,
onCreateMediaReady: null,
onIntervalEventsConductorReady: null,
onHTML5BrowserDetected: null,

// private events used for associating menus with what they control via ARIA
Expand Down Expand Up @@ -639,7 +631,7 @@ https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt
listeners: {
"{videoPlayer}.events.onScrub": "{media}.setTime",
"{videoPlayer}.events.onViewReady": "{media}.refresh",
"{videoPlayer}.events.onTimeChange": "{media}.updateCurrentTime",
"{videoPlayer}.events.onTimeUpdate": "{media}.updateCurrentTime",
"{videoPlayer}.events.onTranscriptElementChange": "{media}.setTime"
}
}
Expand Down Expand Up @@ -718,4 +710,16 @@ https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt
funcName: "fluid.videoPlayer.hideControllersSimple",
args: ["{videoPlayer}"]
});

/***************************************************************************************************
* The wiring up of the onTimeUpdate event btw timer component "media" and intervalEventsConductor *
***************************************************************************************************/
fluid.demands("fluid.videoPlayer.media", ["fluid.videoPlayer.intervalEventsConductor", "fluid.videoPlayer"], {
options: {
events: {
onTimeUpdate: "{intervalEventsConductor}.events.onTimeUpdate"
}
}
});

})(jQuery);
1 change: 0 additions & 1 deletion js/VideoPlayer_controllers.js
Expand Up @@ -142,7 +142,6 @@ https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt
finalInitFunction: "fluid.videoPlayer.controllers.finalInit",
events: {
onStartTimeChange: null,
onTimeChange: null,
afterTimeChange: null,
onMarkupReady: null,
onScrub: null,
Expand Down
71 changes: 23 additions & 48 deletions js/VideoPlayer_intervalEventsConductor.js
Expand Up @@ -17,17 +17,6 @@ https://source.fluidproject.org/svn/LICENSE.txt

(function ($) {

/*************************************************************************************
* The wiring up of the onTick event btw timer component and intervalEventsConductor *
*************************************************************************************/
fluid.demands("fluid.videoPlayer.html5MediaTimer", ["fluid.videoPlayer.intervalEventsConductor"], {
options: {
events: {
onTick: "{intervalEventsConductor}.events.onTick"
}
}
});

/*********************************************************************************
* fluid.videoPlayer.intervalEventsConductor *
* *
Expand All @@ -38,13 +27,18 @@ https://source.fluidproject.org/svn/LICENSE.txt
fluid.defaults("fluid.videoPlayer.intervalEventsConductor", {
gradeNames: ["fluid.eventedComponent", "fluid.modelComponent", "autoInit"],
events: {
onTimeChange: null,
onTimeUpdate: null,
onIntervalChange: null,
onTick: null
onReady: {
events: {
onCreate: "onCreate"
},
args: ["{intervalEventsConductor}"]
}
},
listeners: {
onTick: {
listener: "fluid.videoPlayer.intervalEventsConductor.handleTicks",
onTimeUpdate: {
listener: "fluid.videoPlayer.intervalEventsConductor.handleTimeUpdate",
args: ["{fluid.videoPlayer.intervalEventsConductor}", "{arguments}.0", "{arguments}.1"]
}
},
Expand All @@ -54,7 +48,7 @@ https://source.fluidproject.org/svn/LICENSE.txt
args: ["{fluid.videoPlayer.intervalEventsConductor}", "{arguments}.0"]
}
},

preInitFunction: "fluid.videoPlayer.intervalEventsConductor.preInit",
// An array of the time intervals with all the begin and end time in millisecond
// Example: Array[intervalID] = {begin: beginTimeInMilli, end: endTimeInMilli}
intervalList: [],
Expand All @@ -65,6 +59,17 @@ https://source.fluidproject.org/svn/LICENSE.txt
}
});

fluid.videoPlayer.intervalEventsConductor.preInit = function (that) {
/*
* Work around for FLUID-4709
* These methods are overwritten by the framework after initComponent executes.
* This preInit function guarantees that functions which forward to the overwritten versions are available during the event binding phase.
*/
that.setIntervalList = function (intervalList) {
that.setIntervalList(intervalList);
};
};

fluid.videoPlayer.intervalEventsConductor.setIntervalList = function (that, intervalList) {
that.options.intervalList = intervalList;
};
Expand Down Expand Up @@ -102,47 +107,17 @@ https://source.fluidproject.org/svn/LICENSE.txt
/**
* The main process to re-wire the events
*/
fluid.videoPlayer.intervalEventsConductor.handleTicks = function (that, currentTime, buffered) {
that.events.onTimeChange.fire(currentTime, buffered);

fluid.videoPlayer.intervalEventsConductor.handleTimeUpdate = function (that, currentTime, buffered) {
if (that.options.intervalList) {
var previousInterval = that.options.model.previousIntervalId;
var currentInterval = fluid.videoPlayer.intervalEventsConductor.findCurrentInterval(currentTime, that.options.intervalList, previousInterval);

if (currentInterval !== previousInterval) {
that.applier.requestChange("previousIntervalId", currentInterval);

that.events.onIntervalChange.fire(currentInterval, previousInterval);
}
}
};

/*********************************************************************************
* Timer component for HTML5 media element *
* *
* The timer component fires the onTick event with the argument of "currentTime" *
* when the time change occurs. *
*********************************************************************************/

fluid.defaults("fluid.videoPlayer.html5MediaTimer", {
gradeNames: ["fluid.eventedComponent", "autoInit"],
finalInitFunction: "fluid.videoPlayer.html5MediaTimer.finalInit",
mediaElement: null,
events: {
onTick: null
}
});

fluid.videoPlayer.html5MediaTimer.finalInit = function (that) {
var media = that.options.mediaElement;

if (!media) {
fluid.fail("Undefined mediaElement option in " + that.typeName + ".");
}
media.bind("timeupdate", function (ev) {
var currentTime = ev.currentTarget.currentTime;

that.events.onTick.fire(currentTime);
});
};

})(jQuery);
16 changes: 5 additions & 11 deletions js/VideoPlayer_media.js
Expand Up @@ -31,20 +31,13 @@ https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt
mediaEventBinder: {
type: "fluid.videoPlayer.eventBinder",
createOnEvent: "onEventBindingReady"
},
intervalEventsConductor: {
type: "fluid.videoPlayer.intervalEventsConductor",
createOnEvent: "onEventBindingReady"
},
transcript: {
type: "fluid.videoPlayer.transcript",
createOnEvent: "onEventBindingReady"
}
},
finalInitFunction: "fluid.videoPlayer.media.finalInit",
preInitFunction: "fluid.videoPlayer.media.preInit",
events: {
onEventBindingReady: null,
onTimeUpdate: null, // picked up by intervalEventsConductor.events.onTimeUpdate
onReady: {
events: {
eventBindingReady: "onEventBindingReady",
Expand All @@ -57,7 +50,9 @@ https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt
onMediaElementLoadedMetadata: null,
onMediaElementVolumeChange: null,
onMediaElementEnded: null,
onMediaElementTimeUpdate: null
onMediaElementTimeUpdate: null,

onLoadedMetadata: null
},
invokers: {
renderSources: { funcName: "fluid.videoPlayer.media.renderSources", args: ["{media}"] },
Expand Down Expand Up @@ -179,8 +174,7 @@ https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt

var buffered = that.model.mediaElementVideo.buffered || 0;

that.intervalEventsConductor.events.onTick.fire(currentTime, buffered);
that.transcript.transcriptInterval.events.onTick.fire(currentTime);
that.events.onTimeUpdate.fire(currentTime, buffered);
};

fluid.videoPlayer.media.updateStartTime = function (that) {
Expand Down
19 changes: 1 addition & 18 deletions js/VideoPlayer_transcript.js
Expand Up @@ -31,16 +31,6 @@ https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt
preInitFunction: "fluid.videoPlayer.transcript.preInit",
finalInitFunction: "fluid.videoPlayer.transcript.finalInit",
produceTree: "fluid.videoPlayer.transcript.produceTree",
components: {
transcriptInterval: {
type: "fluid.videoPlayer.intervalEventsConductor",
createOnEvent: "onReady"
},
transcriptEventBinder: {
type: "fluid.videoPlayer.eventBinder",
createOnEvent: "onReady"
}
},
events: {
onTranscriptsLoaded: null,
onLoadTranscriptError: null,
Expand Down Expand Up @@ -380,16 +370,9 @@ https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt
that.events.onCurrentTranscriptChanged.fire(currentTranscriptIndex);
});

that.events.onTranscriptsLoaded.addListener(function (intervalList) {
that.transcriptInterval.setIntervalList(intervalList);
});

that.events.onIntervalChange.addListener(function (currentInterval, previousInterval) {
if (currentInterval !== that.model.transcriptIntervalId) {
// TODO: use a better strategy for this, which was intended to prevent event pile-up
setTimeout(function () {
that.applier.requestChange("transcriptIntervalId", currentInterval);
}, 100);
that.applier.requestChange("transcriptIntervalId", currentInterval);
}
});
that.applier.modelChanged.addListener("transcriptIntervalId", that.updateTranscriptHighlight);
Expand Down
1 change: 0 additions & 1 deletion tests/all-tests.html
Expand Up @@ -22,7 +22,6 @@
"./html/VideoPlayerTranscript-test.html",
"./html/VideoPlayerTranscriptIntegration-test.html",
"./html/VideoPlayerIntervalEventsConductor-test.html",
"./html/VideoPlayerIntervalEventsConductorIntegration-test.html",
"./html/VideoPlayer-test.html",
"./html/VideoPlayerIntegration-test.html"
]);
Expand Down

0 comments on commit 4f74e83

Please sign in to comment.