compose-8.x-1.x-dev/js/compose-tabs.js

js/compose-tabs.js
(function ($, Drupal, displace, window, drupalSettings) {
  Drupal.behaviors.composeTabs = {
    attach: function (context, settings) {

      // Do these once on intial page load
      $('body').once().each(function () {

        // Make tabs
        $('#compose-tabs').tabs().promise().done(function (){
          // Show tabs with errors on page load
          showErrorsOnTabs();
          if ($('#compose-tabs .compose-tabs li.ui-state-error').length > 0) {
            // Load first tab with error
            $('#compose-tabs').tabs('option', 'active', $('#compose-tabs .compose-tabs li.ui-state-error:first').index());
          }
        });

        // Add css identifier to body
        $('body').addClass('compose-edit-mode');

      });

      // Validate on form blur
      $('form[data-compose="compose-form"] .required', context).blur(function (event) {
        composeValidateElement($(this));
      });

      function composeValidateElement(element) {
        var region = $(element).closest('.compose-tab-region').data('region');

        if (element.is('select')) {
          if (element.val() == '_none') {
            element[0].setCustomValidity('Selection must be made');
          }
          else {
            element[0].setCustomValidity('');
          }
        }

        if (element[0].checkValidity()) {
          $(element).removeClass('error');
          $(element).closest('.form-item')
            .removeClass('has-error')
            .removeClass('error');
        }
        else {
          $(element).addClass('error');
          $(element).closest('.form-item')
            .addClass('has-error')
            .addClass('error');
        }

        showErrorsOnTabs();
        setValidationMessage(checkFormErrorsExist());
      }

      function showErrorsOnTabs() {
        $('.compose-tab-region').each(function (){
          var region = $(this).data('region');

          if ($(this).find('.error').length > 0) {
            $('.compose-tab-' + region).addClass('ui-state-error');
          }
          else {
            $('.compose-tab-' + region).removeClass('ui-state-error');
          }
        });
      }

      function checkFormErrorsExist() {
        if ($('.error').length > 0) {
          return false;
        }
        else {
          return true;
        }
      }

      function setValidationMessage(form_valid) {
        if ($('div[data-drupal-messages] .messages__wrapper').children().length == 0) {
          if (form_valid) {
            $('#compose-validation-message', context).text('')
              .removeClass('messages')
              .removeClass('messages--error');
          }
          else {
            $('#compose-validation-message', context)
              .text('There are validation errors on this form. See highlighted tabs below.')
              .addClass('messages')
              .addClass('messages--error');
          }
        }
      }

    }
  };

  Drupal.behaviors.composeDialogTabs = {
    attach: function(context, settings) {
      $('.compose-dialog-tabs', context).once('composeDialogTabs').each(function() {
        $(this).tabs();
      })
    }
  }

  Drupal.behaviors.composeTasksOffset = {
    attach: function(context, settings) {
      if (!displace) {
        return;
      }

      $('.compose-tasks', context).once('composeTasksOffset').each(function() {
        var $this = $(this);
        var sentinel = $('<div>').css({
          position: 'absolute',
          height: '1px',
          visibility: 'hidden'
        }).insertBefore($this).get(0);
        const observer = new window.IntersectionObserver(function(entries) {
          console.log('intersecting', entries[0].isIntersecting);
          if (!entries[0].isIntersecting) {
            $this.attr('data-offset-top', '');
          }
          else {
            $this.attr('data-offset-top', null);
          }
          $(window).trigger('resize.drupalDisplace');
        });
        observer.observe(sentinel);
      });
    }
  }
})(jQuery, Drupal, Drupal.displace, window, drupalSettings);

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

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