sitewide_alerts-1.0.0/js/sitewide_alerts.js

js/sitewide_alerts.js
(function ($, Drupal, cookies) {
  Drupal.behaviors.sitewide_alerts = {
    attach: function (context, drupalSettings) {
      // Make sure we have proper settings.
      if (drupalSettings.sitewide_alerts && drupalSettings.sitewide_alerts.dismissedKeys && drupalSettings.sitewide_alerts.cookieExpiration) {

        // Get site alerts.
        let $siteAlerts = $('.c-site-alert', context);

        // Preview mode, so we will stop here.
        // Just need to show alerts.
        if (drupalSettings.sitewide_alerts.previewMode) {
          $siteAlerts.each(function () {
            let $siteAlert = $(this);
            $siteAlert.show();
          });
          return;
        }

        // Since the key is updated every time the configuration form is saved,
        // we can ensure users don't miss newly added or changed alerts.
        let dismissedKeysCookie = cookies.get('Drupal.visitor.sitewide_alerts_dismissed');
        let userDismissedKeys = dismissedKeysCookie ? JSON.parse(dismissedKeysCookie) : Array();

        // Loop through each site alert.
        $siteAlerts.each(function () {
          let $siteAlert = $(this);
          let showAlert = true;
          $.each(userDismissedKeys, function (indexKey, dismissedKey) {
            if (dismissedKey === $siteAlert.attr('data-dismiss-key')) {
              showAlert = false;
            }
          });
          if (showAlert) {
            $siteAlert.show();
            // Trigger custom event.
            $.event.trigger({
              type: "onSiteAlertShow",
              siteAlert: $siteAlert
            });
          }
        });

        // Close event or site alert click event
        $(once('sitewide_alerts', '.c-site-alert .c-site-alert__close', context)).on('click', function (e) {
          // Do not perform default action.
          e.preventDefault();

          // Get site alert.
          let $siteAlert = $(this).closest('.c-site-alert');

          // Add dismissed key to cookie.
          userDismissedKeys.push($siteAlert.attr('data-dismiss-key'));

          var options = {};
          var expiration = drupalSettings.sitewide_alerts.cookieExpiration;
          // If the expiration value is "default", we don't need to set the expires property
          // as $.cookie will default to a session based cookie.
          if (expiration !== 'default') {
            options.expires = expiration;
          }
          options.path = drupalSettings.path.baseUrl;
          cookies.set('Drupal.visitor.sitewide_alerts_dismissed', JSON.stringify(userDismissedKeys), options);

          // Remove alert.
          if ($siteAlert.hasClass('position-top')) {
            $siteAlert.slideUp('normal', function () {
              $(this).remove();
              // Trigger custom event.
              $.event.trigger({
                type: "onSiteAlertClose",
                siteAlert: $siteAlert
              });
            });
          } else {
            $siteAlert.slideDown('normal', function () {
              $(this).remove();
              // Trigger custom event.
              $.event.trigger({
                type: "onSiteAlertClose",
                siteAlert: $siteAlert
              });
            });
          }
        });
      }
    }
  }
})(jQuery, Drupal, window.Cookies);

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

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