/** * @file * Provides a fullscreen video view for Intense, ElevateZoomPlus, etc. * * @todo provide Native Fullscreen API toggler with an optional polyfill. */ (function ($, Drupal, _win, _doc) { 'use strict'; var _context = _doc; var _id = 'blazybox'; var _idOnce = _id; var _element = '.' + _id; var _elContent = _element + '__content'; var _isOpened = 'is-' + _id + '--open'; var _visualyHidden = 'visually-hidden'; var _ariaHidden = 'aria-hidden'; /** * Blazybox public methods. * * @namespace */ Drupal.blazyBox = { el: null, $el: null, options: { hideCloseBtn: false }, /** * Open the blazyBox. * * @param {HTMLElement|string} settings * The link HTMLElement to extract video/ media data, or video embed url. */ open: function (settings) { var me = Drupal.blazyBox; var $el = me.$el; var content = Drupal.theme('blazyBoxMedia', { data: settings }); Drupal.attachBehaviors($el[0]); $el.removeClass(_visualyHidden) .attr(_ariaHidden, false) .find(_elContent).innerHTML = content; $.addClass(_doc.body, _isOpened); me.check(); }, /** * Close the blazyBox. * * @param {Event} e * The mouse event triggering the close. */ close: function (e) { var me = Drupal.blazyBox; var $el = me.$el; // Allows calling this directly. if (!$.isUnd(e)) { e.preventDefault(); } $el.addClass(_visualyHidden) .attr(_ariaHidden, true) .find(_elContent).innerHTML = ''; $.removeClass(_doc.body, _isOpened); Drupal.detachBehaviors($el[0]); }, check: function () { var me = this; if (me.options.hideCloseBtn) { var close = me.$el.find(_element + '__close'); if ($.isElm(close)) { $.addClass(close, _visualyHidden); } } }, /** * Attach the blazyBox. */ attach: function () { if (!$.isElm($.find(_doc.body, _element))) { $.append(_doc.body, Drupal.theme('blazyBox')); } }, isOpened: function () { var me = Drupal.blazyBox; return !me.$el.hasClass(_visualyHidden); } }; /** * Theme function for a fullscreen lightbox video container. * * @return {String} * Returns a html string. */ Drupal.theme.blazyBox = function () { var html; html = '
'; return $.template(html, { id: _id }); }; /** * Theme function for a standalone fullscreen video. * * @param {Object} settings * An object containing the embed url, or media object. * * @return {String} * Returns a html string. */ Drupal.theme.blazyBoxMedia = function (settings) { var data = settings.data; var oembedUrl = data; var html = ''; html = '