123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- /* global $, APP, interfaceConfig, config*/
-
- import UIEvents from "../../../service/UI/UIEvents";
- import UIUtil from "../util/UIUtil";
-
- const thumbAspectRatio = 16.0 / 9.0;
-
- const FilmStrip = {
- /**
- *
- * @param eventEmitter the {EventEmitter} through which {FilmStrip} is to
- * emit/fire {UIEvents} (such as {UIEvents.TOGGLED_FILM_STRIP}).
- */
- init (eventEmitter) {
- this.filmStrip = $('#remoteVideos');
- this.eventEmitter = eventEmitter;
- },
-
- /**
- * Toggles the visibility of the film strip.
- *
- * @param visible optional {Boolean} which specifies the desired visibility
- * of the film strip. If not specified, the visibility will be flipped
- * (i.e. toggled); otherwise, the visibility will be set to the specified
- * value.
- */
- toggleFilmStrip (visible) {
- if (typeof visible === 'boolean'
- && this.isFilmStripVisible() == visible) {
- return;
- }
-
- this.filmStrip.toggleClass("hidden");
-
- // Emit/fire UIEvents.TOGGLED_FILM_STRIP.
- var eventEmitter = this.eventEmitter;
- if (eventEmitter) {
- eventEmitter.emit(
- UIEvents.TOGGLED_FILM_STRIP,
- this.isFilmStripVisible());
- }
- },
-
- isFilmStripVisible () {
- return !this.filmStrip.hasClass('hidden');
- },
-
- setupFilmStripOnly () {
- this.filmStrip.css({
- padding: "0px 0px 18px 0px",
- right: 0
- });
- },
-
- getFilmStripHeight () {
- if (this.isFilmStripVisible()) {
- return this.filmStrip.outerHeight();
- } else {
- return 0;
- }
- },
-
- getFilmStripWidth () {
- return this.filmStrip.innerWidth()
- - parseInt(this.filmStrip.css('paddingLeft'), 10)
- - parseInt(this.filmStrip.css('paddingRight'), 10);
- },
-
- /**
- * Calculates the thumbnail size.
- * @param videoAreaAvailableWidth the currently available video area width
- * that we want to take into account when calculating the film strip width.
- */
- calculateThumbnailSize (isSideBarVisible) {
- // Calculate the available height, which is the inner window height
- // minus 39px for the header minus 2px for the delimiter lines on the
- // top and bottom of the large video, minus the 36px space inside the
- // remoteVideos container used for highlighting shadow.
- let availableHeight = 100;
-
- let numvids = this.getThumbs(true).length;
-
- let localVideoContainer = $("#localVideoContainer");
-
- /**
- * If the videoAreaAvailableWidth is set we use this one to calculate
- * the filmStrip width, because we're probably in a state where the
- * film strip size hasn't been updated yet, but it will be.
- */
- let videoAreaAvailableWidth
- = UIUtil.getAvailableVideoWidth(isSideBarVisible)
- - parseInt(this.filmStrip.css('right'), 10)
- - parseInt(this.filmStrip.css('paddingLeft'), 10)
- - parseInt(this.filmStrip.css('paddingRight'), 10)
- - parseInt(this.filmStrip.css('borderLeftWidth'), 10)
- - parseInt(this.filmStrip.css('borderRightWidth'), 10) - 5;
-
- let availableWidth = Math.floor(
- (videoAreaAvailableWidth - numvids * (
- parseInt(localVideoContainer.css('borderLeftWidth'), 10)
- + parseInt(localVideoContainer.css('borderRightWidth'), 10)
- + parseInt(localVideoContainer.css('paddingLeft'), 10)
- + parseInt(localVideoContainer.css('paddingRight'), 10)
- + parseInt(localVideoContainer.css('marginLeft'), 10)
- + parseInt(localVideoContainer.css('marginRight'), 10)))
- / numvids);
-
- let maxHeight
- // If the MAX_HEIGHT property hasn't been specified
- // we have the static value.
- = Math.min( interfaceConfig.FILM_STRIP_MAX_HEIGHT || 160,
- availableHeight);
-
- availableHeight
- = Math.min( maxHeight,
- availableWidth / thumbAspectRatio,
- window.innerHeight - 18);
-
- if (availableHeight < availableWidth / thumbAspectRatio) {
- availableWidth = Math.floor(availableHeight * thumbAspectRatio);
- }
-
- return {
- thumbWidth: availableWidth,
- thumbHeight: availableHeight
- };
- },
-
- resizeThumbnails (thumbWidth, thumbHeight,
- animate = false, forceUpdate = false) {
-
- return new Promise(resolve => {
- this.getThumbs(!forceUpdate).animate({
- height: thumbHeight,
- width: thumbWidth
- }, {
- queue: false,
- duration: animate ? 500 : 0,
- complete: resolve
- });
-
- this.filmStrip.animate({
- // adds 2 px because of small video 1px border
- height: thumbHeight + 2
- }, {
- queue: false,
- duration: animate ? 500 : 0
- });
-
- if (!animate) {
- resolve();
- }
- });
- },
-
- getThumbs (only_visible = false) {
- let selector = 'span';
- if (only_visible) {
- selector += ':visible';
- }
-
- return this.filmStrip.children(selector);
- }
- };
-
- export default FilmStrip;
|