123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- /* global $, APP, interfaceConfig, config*/
-
- import UIUtil from "../util/UIUtil";
-
- const thumbAspectRatio = 16.0 / 9.0;
-
- const FilmStrip = {
- init () {
- this.filmStrip = $('#remoteVideos');
- },
-
- toggleFilmStrip () {
- this.filmStrip.toggleClass("hidden");
- },
-
- 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 (videoAreaAvailableWidth) {
- // 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 filmStripWidth = videoAreaAvailableWidth
- ? videoAreaAvailableWidth
- - 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)
- : this.getFilmStripWidth();
-
-
- let availableWidth = Math.floor(
- (filmStripWidth - 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) - numvids*10;
-
- 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;
|