monster_menus-9.0.x-dev/js/modal_dialog.js

js/modal_dialog.js
(function ($, Drupal, drupalSettings) {
$.extend(Drupal, {
  mmDialogActive: [],

  mmDialogClick: function(event) {
    var dialog, url = this.href || $(this).attr('rel');
    var frag = url.match(/#(.*)$/);

    if (frag && frag.length) {
      // Inline dialog.
      Drupal.mmDialogActive.unshift(frag[0]);
      dialog = $(frag[0]).dialog($.extend({}, event.data.settings, {
        title: $(this).attr('title'),
        modal: true,
        close: function() {
          dialog = undefined;
          Drupal.mmDialogActive.shift();
        }
      }));
    }
    else {
      // Load using AJAX.
      var instance = event.data.instance;
      var dialogSettings = $.extend({}, {
          title:    $(this).attr('title'),
          modal:    true,
          iframe:   false,
          fullSize: false,
          close:    function() {
            if (drupalSettings.MM.MMDialog[instance].tag) {
              drupalSettings.MM.MMDialog[instance].tag.remove();
              drupalSettings.MM.MMDialog[instance] = undefined;
            }
            dialog.dialog('destroy');
            dialog.remove();
            dialog = undefined;
            Drupal.mmDialogActive.shift();
          }
        },
        event.data.settings
      );

      if (dialogSettings.fullSize) {
        dialogSettings.width = window.innerWidth - 20;
        dialogSettings.height = window.innerHeight - 20;
        dialogSettings.draggable = false;
      }

      Drupal.mmDialogActive.unshift('#mm-dialog-dialog-' + instance);
      if (dialogSettings.iframe) {
        dialog = $('<div id="mm-dialog-dialog-' + instance + '" style="display: none" class="loading" />')
          .appendTo('body');
        $('<iframe id="mm-dialog-iframe-' + instance + '" scrolling="no" style="border: 0; margin: 0; width: 100%; height: 97%" src="' + url + '">' + Drupal.t('Loading...') + '</iframe>')
          .on('load', function() {
            dialog
              .removeClass('loading')
              .find('.skip-link').remove();
          })
          .appendTo(dialog);
        dialog.dialog(dialogSettings);
        if (dialogSettings.fullSize) {
          dialog.closest('.ui-dialog').css({position: 'fixed', top: 0});
          dialog.css({overflow: 'hidden'});
        }
        else {
          dialog.css({height: '97%'});
        }
      }
      else {
        dialog = $('<div id="mm-dialog-dialog-' + instance + '" style="display: none" class="loading">' + Drupal.t('Loading...') + '</div>');
        dialog.dialog(dialogSettings);
        // Limit to just body contents, without scripts or CSS
        $.get(url, function (data) {
          dialog.removeClass('loading');
          dialog.html(data).find('.skip-link').remove();
          Drupal.attachBehaviors(dialog[0], drupalSettings);
        });
      }
      Drupal.mmDialogResized = function(width, height) {
        dialog.closest('.ui-dialog').css({width: width + 'px', height: (height + dialog.siblings('.ui-dialog-titlebar').outerHeight() + 70) + 'px'});
      };
    }
    // Prevent browser from following the link.
    return false;
  },

  mmDialogOpen: function(obj) {
    var instance = obj.id.match(/-(\d+)$/)[1];
    Drupal.mmDialogClick.call(obj, {
      data: {
        instance: instance,
        settings: drupalSettings.MM.MMDialog[instance] || {}
      }
    });
    return false;
  },

  dialogInstance: 1000,

  mmDialogAdHoc: function(url, label, settings) {
    settings.tag = $('<a href="' + url + '" title="' + label + '" id="mm-dialog-' + Drupal.dialogInstance + '" />');
    Drupal.mmDialogInitOne(settings.tag, Drupal.dialogInstance++, settings);
    Drupal.mmDialogOpen(settings.tag[0]);
  },

  mmDialogClose: function() {
    $(Drupal.mmDialogActive[0]).dialog('close');
  },

  mmDialogInitOne: function(obj, instance, settings) {
    drupalSettings.MM.MMDialog[instance] = settings;
    $(obj).bind('click.mmDialog', {
      instance: instance,
      settings: settings
    }, Drupal.mmDialogClick);
  },

  mmDialogInit: function(context, instanceSettings) {
    $(once('mm-dialog', $('a,:button,:submit', context)))
      .filter('[rel="#close"]')
        .click(function() {
          Drupal.mmDialogActive.length ? Drupal.mmDialogClose() : parent.Drupal.mmDialogClose();
        })
        .end()
      .filter('[id^="mm-dialog"]')
        .each(function() {
          var instance = this.id.match(/-(\d+)$/)[1];
          Drupal.mmDialogInitOne(this, instance, instanceSettings[instance] || {});
        });
  }
});

Drupal.behaviors.MMDialog = {
  attach: function (context) {
    Drupal.mmDialogInit(context, drupalSettings.MM.MMDialog);
  }
};

if (drupalSettings.MM.useWidgetHandlerFixup) {
  Drupal.behaviors.FixDrupalWidgetHandler = {
    // The code in core/modules/ckeditor5/js/ckeditor5.dialog.fix.js causes an
    // error when event.target.classList is undefined, which it is during focus
    // events, so replace with our own version.
    attach: function (context) {
      if (!$.ui.dialog.prototype._mmFixed && $.ui.dialog.prototype._allowInteraction) {
        var _super = $.ui.dialog.prototype._allowInteraction;
        $.ui.dialog.prototype._allowInteraction = function (event) {
          return !event.target.classList || event.type === 'focusin' || event.target.classList.contains('ck') || _super(event);
        };
        $.ui.dialog.prototype._mmFixed = true;
      }
    }
  };
}
})(jQuery, Drupal, drupalSettings);

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

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