text: /**
   * @file
   * bootstrap.js
   *
   * Provides general enhancements and fixes to Bootstrap's JS files.
   */
  
  var Drupal = Drupal || {};
  
  (function($, Drupal){
    "use strict";
  
    Drupal.behaviors.bootstrap = {
      attach: function(context) {
        // Provide some Bootstrap tab/Drupal integration.
        $(context).find('.tabbable').once('bootstrap-tabs', function () {
          var $wrapper = $(this);
          var $tabs = $wrapper.find('.nav-tabs');
          var $content = $wrapper.find('.tab-content');
          var borderRadius = parseInt($content.css('borderBottomRightRadius'), 10);
          var bootstrapTabResize = function() {
            if ($wrapper.hasClass('tabs-left') || $wrapper.hasClass('tabs-right')) {
              $content.css('min-height', $tabs.outerHeight());
            }
          };
          // Add min-height on content for left and right tabs.
          bootstrapTabResize();
          // Detect tab switch.
          if ($wrapper.hasClass('tabs-left') || $wrapper.hasClass('tabs-right')) {
            $tabs.on('shown.bs.tab', 'a[data-toggle="tab"]', function (e) {
              bootstrapTabResize();
              if ($wrapper.hasClass('tabs-left')) {
                if ($(e.target).parent().is(':first-child')) {
                  $content.css('borderTopLeftRadius', '0');
                }
                else {
                  $content.css('borderTopLeftRadius', borderRadius + 'px');
                }
              }
              else {
                if ($(e.target).parent().is(':first-child')) {
                  $content.css('borderTopRightRadius', '0');
                }
                else {
                  $content.css('borderTopRightRadius', borderRadius + 'px');
                }
              }
            });
          }
        });
      }
    };
  
    /**
     * Behavior for .
     */
    Drupal.behaviors.bootstrapFormHasError = {
      attach: function (context, settings) {
        if (settings.bootstrap && settings.bootstrap.formHasError) {
          var $context = $(context);
          $context.find('.form-item.has-error:not(.form-type-password.has-feedback)').once('error', function () {
            var $formItem = $(this);
            var $input = $formItem.find(':input');
            $input.on('keyup focus blur', function () {
              var value = $input.val() || false;
              $formItem[value ? 'removeClass' : 'addClass']('has-error');
              $input[value ? 'removeClass' : 'addClass']('error');
            });
          });
        }
      }
    };
  
    /**
     * Bootstrap Popovers.
     */
    Drupal.behaviors.bootstrapPopovers = {
      attach: function (context, settings) {
        if (settings.bootstrap && settings.bootstrap.popoverEnabled) {
          var $currentPopover = $();
          if (settings.bootstrap.popoverOptions.triggerAutoclose) {
            $(document).on('click', function (e) {
              if ($currentPopover.length && !$(e.target).is('[data-toggle=popover]') && $(e.target).parents('.popover.in').length === 0) {
                $currentPopover.popover('hide');
                $currentPopover = $();
              }
            });
          }
          var elements = $(context).find('[data-toggle=popover]').toArray();
          for (var i = 0; i < elements.length; i++) {
            var $element = $(elements[i]);
            var options = $.extend({}, settings.bootstrap.popoverOptions, $element.data());
            if (!options.content) {
              options.content = function () {
                var target = $(this).data('target');
                return target && $(target) && $(target).length && $(target).clone().removeClass('element-invisible').wrap('<div/>').parent()[$(this).data('bs.popover').options.html ? 'html' : 'text']() || '';
              }
            }
            $element.popover(options).on('click', function (e) {
              e.preventDefault();
            });
            if (settings.bootstrap.popoverOptions.triggerAutoclose) {
              $element.on('show.bs.popover', function () {
                if ($currentPopover.length) {
                  $currentPopover.popover('hide');
                }
                $currentPopover = $(this);
              });
            }
          }
        }
      }
    };
  
    /**
     * Bootstrap Tooltips.
     */
    Drupal.behaviors.bootstrapTooltips = {
      attach: function (context, settings) {
        if (settings.bootstrap && settings.bootstrap.tooltipEnabled) {
          var elements = $(context).find('[data-toggle="tooltip"]').toArray();
          for (var i = 0; i < elements.length; i++) {
            var $element = $(elements[i]);
            var options = $.extend({}, settings.bootstrap.tooltipOptions, $element.data());
            $element.tooltip(options);
          }
        }
      }
    };
  
    /**
     * Anchor fixes.
     */
    var $scrollableElement = $();
    Drupal.behaviors.bootstrapAnchors = {
      attach: function(context, settings) {
        var i, elements = ['html', 'body'];
        if (!$scrollableElement.length) {
          for (i = 0; i < elements.length; i++) {
            var $element = $(elements[i]);
            if ($element.scrollTop() > 0) {
              $scrollableElement = $element;
              break;
            }
            else {
              $element.scrollTop(1);
              if ($element.scrollTop() > 0) {
                $element.scrollTop(0);
                $scrollableElement = $element;
                break;
              }
            }
          }
        }
        if (!settings.bootstrap || settings.bootstrap.anchorsFix !== '1') {
          return;
        }
        var anchors = $(context).find('a').toArray();
        for (i = 0; i < anchors.length; i++) {
          if (!anchors[i].scrollTo) {
            this.bootstrapAnchor(anchors[i]);
          }
        }
        $scrollableElement.once('bootstrap-anchors', function () {
          $scrollableElement.on('click.bootstrap-anchors', 'a[href*="#"]:not([data-toggle],[data-target],[data-slide])', function(e) {
            if (this.scrollTo) {
              this.scrollTo(e);
            }
          });
        });
      },
      bootstrapAnchor: function (element) {
        element.validAnchor = element.nodeName === 'A' && (location.hostname === element.hostname || !element.hostname) && (element.hash.replace(/#/,'').length > 0);
        element.scrollTo = function(event) {
          var attr = 'id';
          var $target = $(element.hash);
          // Check for anchors that use the name attribute instead.
          if (!$target.length) {
            attr = 'name';
            $target = $('[name="' + element.hash.replace('#', '') + '"]');
          }
          // Immediately stop if no anchors are found.
          if (!this.validAnchor && !$target.length) {
            return;
          }
          // Anchor is valid, continue if there is an offset.
          var offset = $target.offset().top - parseInt($scrollableElement.css('paddingTop'), 10) - parseInt($scrollableElement.css('marginTop'), 10);
          if (offset > 0) {
            if (event) {
              event.preventDefault();
            }
            var $fakeAnchor = $('<div/>')
              .addClass('element-invisible')
              .attr(attr, $target.attr(attr))
              .css({
                position: 'absolute',
                top: offset + 'px',
                zIndex: -1000
              })
              .appendTo($scrollableElement);
            $target.removeAttr(attr);
            var complete = function () {
              location.hash = element.hash;
              $fakeAnchor.remove();
              $target.attr(attr, element.hash.replace('#', ''));
            };
            if (Drupal.settings.bootstrap.anchorsSmoothScrolling) {
              $scrollableElement.animate({ scrollTop: offset, avoidTransforms: true }, 400, complete);
            }
            else {
              $scrollableElement.scrollTop(offset);
              complete();
            }
          }
        };
      }
    };
  
    /**
     * Tabledrag theming elements.
     */
    Drupal.theme.tableDragChangedMarker = function () {
      return '<span class="tabledrag-changed glyphicon glyphicon-warning-sign text-warning"></span>';
    };
  
    Drupal.theme.tableDragChangedWarning = function () {
      return '<div class="tabledrag-changed-warning alert alert-warning messages warning">' + Drupal.theme('tableDragChangedMarker') + ' ' + Drupal.t('Changes made in this table will not be saved until the form is submitted.') + '</div>';
    };
  
  })(jQuery, Drupal);
  ;
  