Example #1
0
export default function SettingsContentItem(name, content, action) {
    let active;
    const contentItemElement = createElement(ContentItemTemplate(content));
    const contentItemUI = new UI(contentItemElement);
    contentItemUI.on('click tap enter', () => {
        action();
    });

    const instance = {
        activate() {
            toggleClass(contentItemElement, 'jw-settings-item-active', true);
            contentItemElement.setAttribute('aria-checked', 'true');
            active = true;
        },
        deactivate() {
            toggleClass(contentItemElement, 'jw-settings-item-active', false);
            contentItemElement.setAttribute('aria-checked', 'false');
            active = false;
        },
        element() {
            return contentItemElement;
        },
        destroy() {
            this.deactivate();
            contentItemUI.destroy();
        }
    };

    Object.defineProperty(instance, 'active', {
        enumerable: true,
        get: () => active
    });

    return instance;
}
Example #2
0
    function updateContainerStyles(width, height) {
        const audioMode = isAudioMode(_model);
        // Set timeslider flags
        if (_.isNumber(width) && _.isNumber(height)) {
            const breakpoint = getBreakpoint(width);
            setBreakpoint(_playerElement, breakpoint);

            const smallPlayer = breakpoint < 2;
            toggleClass(_playerElement, 'jw-flag-small-player', smallPlayer);
            toggleClass(_playerElement, 'jw-orientation-portrait', (height > width));
        }
        toggleClass(_playerElement, 'jw-flag-audio-player', audioMode);
        _model.set('audioMode', audioMode);
    }
Example #3
0
 function onAspectRatioChange(model, aspectratio) {
     toggleClass(_playerElement, 'jw-flag-aspect-mode', !!aspectratio);
     const aspectRatioContainer = _playerElement.querySelector('.jw-aspect');
     style(aspectRatioContainer, {
         paddingTop: aspectratio || null
     });
 }
Example #4
0
            tap: () => {
                _this.trigger(DISPLAY_CLICK);
                if (settingsMenuVisible()) {
                    _controls.settingsMenu.close();
                }
                const state = model.get('state');

                if (controls &&
                    ((state === STATE_IDLE || state === STATE_COMPLETE) ||
                    (model.get('instream') && state === STATE_PAUSED))) {
                    api.playToggle(reasonInteraction());
                }

                if (controls && state === STATE_PAUSED) {
                    // Toggle visibility of the controls when tapping the media
                    // Do not add mobile toggle "jw-flag-controls-hidden" in these cases
                    if (model.get('instream') || model.get('castActive') || (model.get('mediaType') === 'audio')) {
                        return;
                    }
                    toggleClass(_playerElement, 'jw-flag-controls-hidden');
                    _captionsRenderer.renderCues(true);
                } else if (_controls) {
                    if (!_controls.showing) {
                        _controls.userActive();
                    } else {
                        _controls.userInactive();
                    }
                }
            },
Example #5
0
    function updateContainerStyles(width, height) {
        // Set responsive player classes
        if (isNumber(width) && isNumber(height)) {
            const breakpoint = getBreakpoint(width);
            setBreakpoint(_playerElement, breakpoint);

            const smallPlayer = breakpoint < 2;
            toggleClass(_playerElement, 'jw-flag-small-player', smallPlayer);
            toggleClass(_playerElement, 'jw-orientation-portrait', (height > width));
        }
        // Only change audio player mode when controls are enabled
        if (_model.get('controls')) {
            const audioMode = isAudioMode(_model);
            toggleClass(_playerElement, 'jw-flag-audio-player', audioMode);
            _model.set('audioMode', audioMode);
        }
    }
Example #6
0
    const redraw = (opened) => {
        if (opened && instance.dirty) {
            replaceInnerHtml(textElement, instance.text);
            instance.dirty = false;
        }

        instance.opened = opened;
        toggleClass(tooltipElement, 'jw-open', opened);
    };
Example #7
0
    function _toggleDOMFullscreen(playerElement, fullscreenState) {
        toggleClass(playerElement, 'jw-flag-fullscreen', fullscreenState);
        style(document.body, { overflowY: (fullscreenState) ? 'hidden' : '' });

        if (fullscreenState && _controls) {
            // When going into fullscreen, we want the control bar to fade after a few seconds
            _controls.userActive();
        }

        _resizeMedia();
        _responsiveListener();
    }
Example #8
0
    function _onMediaTypeChange(model, val) {
        const isAudioFile = (val === 'audio');
        const provider = model.get('provider');

        toggleClass(_playerElement, 'jw-flag-media-audio', isAudioFile);

        const isFlash = (provider && provider.name.indexOf('flash') === 0);
        const element = (isAudioFile && !isFlash) ? _videoLayer : _videoLayer.nextSibling;
        // Put the preview element before the media element in order to display browser captions
        // otherwise keep it on top of the media element to display captions with the captions renderer
        _playerElement.insertBefore(_preview.el, element);
    }
Example #9
0
 function _errorHandler(model, evt) {
     if (!evt) {
         _title.playlistItem(model, model.get('playlistItem'));
         return;
     }
     const errorContainer = ErrorContainer(model, evt.message);
     if (ErrorContainer.cloneIcon) {
         errorContainer.querySelector('.jw-icon').appendChild(ErrorContainer.cloneIcon('error'));
     }
     _title.hide();
     _playerElement.appendChild(errorContainer.firstChild);
     toggleClass(_playerElement, 'jw-flag-audio-player', !!model.get('audioMode'));
 }
Example #10
0
 function onFlashBlockedChange(model, isBlocked) {
     toggleClass(_playerElement, 'jw-flag-flash-blocked', isBlocked);
 }
Example #11
0
 _model.on('change:playRejected', function (model, val) {
     toggleClass(_playerElement, 'jw-flag-play-rejected', val);
 });
Example #12
0
 _model.on('change:scrubbing', function (model, val) {
     toggleClass(_playerElement, 'jw-flag-dragging', val);
 });
Example #13
0
 closeSlider(evt) {
     super.closeTooltip(evt);
     toggleClass(this.horizontalContainer, this.openClass, false);
     this.horizontalContainer.blur();
 }
Example #14
0
export default function SettingsSubmenu(name, categoryButton, isDefault) {

    let active;
    let contentItems = [];
    const submenuElement = createElement(SubmenuTemplate(name));
    const categoryButtonElement = categoryButton.element();

    categoryButtonElement.setAttribute('name', name);
    categoryButtonElement.className += ' jw-submenu-' + name;
    categoryButton.show();

    // return focus to topbar element when tabbing after the first or last item
    const onFocus = function(evt) {
        const focus =
            categoryButtonElement &&
            evt.keyCode === 9 && (
                evt.srcElement === contentItems[0].element() && evt.shiftKey ||
                evt.srcElement === contentItems[contentItems.length - 1].element() && !evt.shiftKey
            );

        if (focus) {
            categoryButtonElement.focus();
        }
    };

    const instance = {
        addContent(items) {
            if (!items) {
                return;
            }
            items.forEach(item => {
                submenuElement.appendChild(item.element());
            });

            contentItems = items;

            contentItems[0].element().addEventListener('keydown', onFocus);
            contentItems[contentItems.length - 1].element().addEventListener('keydown', onFocus);
        },
        replaceContent(items) {
            instance.removeContent();
            this.addContent(items);
        },
        removeContent() {
            contentItems[0].element().removeEventListener('keydown', onFocus);
            contentItems[contentItems.length - 1].element().removeEventListener('keydown', onFocus);

            emptyElement(submenuElement);
            contentItems = [];
        },
        activate() {
            toggleClass(submenuElement, 'jw-settings-submenu-active', true);
            submenuElement.setAttribute('aria-expanded', 'true');
            categoryButtonElement.setAttribute('aria-checked', 'true');
            active = true;
        },
        deactivate() {
            toggleClass(submenuElement, 'jw-settings-submenu-active', false);
            submenuElement.setAttribute('aria-expanded', 'false');
            categoryButtonElement.setAttribute('aria-checked', 'false');
            active = false;
        },
        activateItem(itemOrdinal = 0) {
            const item = contentItems[itemOrdinal];
            if (!item || item.active) {
                return;
            }
            deactivateAllItems(contentItems);
            item.activate();
        },
        element() {
            return submenuElement;
        },
        destroy() {
            if (!contentItems) {
                return;
            }
            contentItems.forEach(item => {
                item.destroy();
            });
            this.removeContent();
        }
    };

    Object.defineProperties(instance,
        {
            name: {
                enumerable: true,
                get: () => name
            },
            active: {
                enumerable: true,
                get: () => active
            },
            categoryButtonElement: {
                enumerable: true,
                get: () => categoryButtonElement
            },
            isDefault: {
                enumerable: true,
                get: () => isDefault
            }
        }
    );

    return instance;
}
Example #15
0
 function _setLiveMode(model, streamType) {
     const live = (streamType === 'LIVE');
     toggleClass(_playerElement, 'jw-flag-live', live);
 }
Example #16
0
 _model.on('change:hideAdsControls', function (model, val) {
     toggleClass(_playerElement, 'jw-flag-ads-hide-controls', val);
 });
Example #17
0
 openSlider(evt) {
     super.openTooltip(evt);
     toggleClass(this.horizontalContainer, this.openClass, true);
 }