/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * This file contains patched methods for twitter bootstrap.js
 */

/**
 * Fixes error when <code>destroy</code> method called more than one time.
 * For more info check https://github.com/twbs/bootstrap/issues/20511
 */
if($&&$.fn&&$.fn.tooltip&&$.fn.tooltip.Constructor)
$.fn.tooltip.Constructor.prototype.destroy = function() {
  var that = this
  clearTimeout(this.timeout)
  this.hide(function () {
    if (that.$element !== null) {
      that.$element.off('.' + that.type).removeData('bs.' + that.type)
    }
    if (that.$tip) {
      that.$tip.detach()
    }
    that.$tip = null
    that.$arrow = null
    that.$viewport = null
    that.$element = null
  })
};

// function required for clearMenus
var getParent = function($this) {
  var selector = $this.attr('data-target');

  if (!selector) {
    selector = $this.attr('href');
    selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7;
  }

  var $parent = selector && $(selector);

  return $parent && $parent.length ? $parent : $this.parent();
};

// new exclusion added, clicking on elements with class checkbox-label should be ignored to close dropdown
var clearMenus = function (e) {
  if (e && e.which === 3) return;
  $('.dropdown-backdrop').remove();
  $('[data-toggle="dropdown"]').each(function () {
    var $this = $(this);
    var $parent = getParent($this);
    var relatedTarget = {relatedTarget: this};

    if (!$parent.hasClass('open')) return;

    if (e && e.type == 'click' && (/input|textarea/i.test(e.target.tagName) || e.target.className.contains('checkbox-label')) && $.contains($parent[0], e.target)) return;

    $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget));

    if (e.isDefaultPrevented()) return;

    $this.attr('aria-expanded', 'false');
    $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget));
  });
};

$(document).off('click.bs.dropdown.data-api');
$(document).on('click.bs.dropdown.data-api', clearMenus);
$(document).on('click.bs.dropdown.data-api', '.dropdown form', function (e) {
  e.stopPropagation()
});
if($&&$.fn&&$.fn.tooltip&&$.fn.tooltip.Constructor)
$(document).on('click.bs.dropdown.data-api', '[data-toggle="dropdown"]', $.fn.dropdown.Constructor.prototype.toggle);

