io-8.x-1.x-dev/modules/io_browser/js/src/io-browser.media.js

modules/io_browser/js/src/io-browser.media.js
/**
 * @file
 * Provides IO Browser media switch utilitiy functions.
 *
 * This can be used for both IO Browsers and widgets.
 */

(function ($, Drupal, _d, _win) {

  'use strict';

  var _nick = 'ib';
  var _isNick = 'is-' + _nick;
  var _root = '.' + _nick;
  var _rootForm = '.form--' + _nick;
  var _idMedia = _nick + '-media';
  var _onMedia = _idMedia + '--on';
  var _selPlayer = '.media--player';
  var _element = _root + ' ' + _selPlayer + ':not(.' + _onMedia + ')';
  var _isPlaying = 'is-playing';
  var _isZoom = _isNick + '-zoom';
  var _isZoomed = _isNick + '-zoomed';
  var _cZoom = _nick + '__zoom';
  var _icon = '.media__icon';

  Drupal.ioBrowser = Drupal.ioBrowser || {};

  /**
   * IO Browser media utility functions.
   *
   * @param {HTMLElement} media
   *   The media player HTML element.
   */
  function fnMedia(media) {
    var $media = $(media);
    var $form = $media.closest(_rootForm);
    var $ib = $form.length ? $form : $media.closest(_root);
    var $zoom = $('.' + _cZoom, $ib);
    var $body = $ib.closest('body');
    var $wParent = _win.parent.document;
    // var id = 'ib-target';
    var wpad = Math.round((($(_win).height() / $(_win).width()) * 100), 2) + '%';

    // Only when form is preset, the zoom is not available.
    if (!$zoom.length && $form.length) {
      $form.append('<div class="' + _cZoom + '" />');
      $zoom = $('.' + _cZoom, $form);
    }

    /**
     * Play the media.
     *
     * @param {jQuery.Event} e
     *   The event triggered by a `click` event.
     */
    function play(e) {
      var $btn = $(e.currentTarget);
      var $current = $btn.closest(_selPlayer);

      $body.addClass(_isZoom);
      $ib.addClass(_isZoomed);

      setTimeout(function () {
        if ($zoom.length && !$(_selPlayer, $zoom).length) {
          var $clone = $current.clone(true, true);
          $clone.appendTo($zoom);
          $clone.find('img').remove();
          $clone.css('padding-bottom', wpad);
          $current.find('iframe').remove();
        }

        if ($form.length) {
          $('.ui-dialog:visible', $wParent).addClass('ui-dialog--zoom');
        }
        // else {
        // Drupal.ioBrowser.jump(id);
        // }
      });
    }

    /**
     * Close the media.
     *
     * @param {jQuery.Event} e
     *   The event triggered by a `click` event.
     */
    function stop(e) {
      $('.' + _isPlaying).removeClass(_isPlaying);

      $zoom.empty();
      $body.removeClass(_isZoom);
      $ib.removeClass(_isZoomed);

      if ($form.length) {
        $('.ui-dialog:visible', $wParent).removeClass('ui-dialog--zoom');
      }
    }

    var cPlay = 'click.ibMediaPlay';
    var cStop = 'click.ibMediaClose';
    $media.off(cPlay).on(cPlay, _icon + '--play', play);
    $media.off(cStop).on(cStop, _icon + '--close', stop);
    $media.addClass(_onMedia);
  }

  /**
   * Attaches IO Browser media behavior to HTML element.
   *
   * @type {Drupal~behavior}
   */
  Drupal.behaviors.ioBrowserMedia = {
    attach: function (context) {
      _d.once(fnMedia, _idMedia, _element, context);
    },
    detach: function (context, setting, trigger) {
      if (trigger === 'unload') {
        _d.once.removeSafely(_idMedia, _element, context);
      }
    }
  };

})(jQuery, Drupal, dBlazy, this);

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc