diff mbox series

[v2,4/4] toaster: Update bootstrap version to 3.4.1

Message ID 20231016160439.65034-1-marlon.rodriguez-garcia@savoirfairelinux.com
State Accepted, archived
Commit 046bbe22f7144efa02fc33fec9c933c2e97e0ba7
Headers show
Series None | expand

Commit Message

Marlon Rodriguez Garcia Oct. 16, 2023, 4:04 p.m. UTC
Update bootstrap version to 3.4.1 to fix incompatibility issues and security vulnerabilities
Files base, base_specific and js-unit-test were updated to match new versions of files

Changes in v2:
Update bootstrap version from 3.3.7 to 3.4.1 and explicit name version in files

Signed-off-by: Marlon Rodriguez Garcia <marlon.rodriguez-garcia@savoirfairelinux.com>
---
 .../js/{bootstrap.js => bootstrap-3.4.1.js}   | 431 +++++++++++++-----
 .../static/js/bootstrap-3.4.1.min.js          | Bin 0 -> 39680 bytes
 .../toastergui/static/js/bootstrap.min.js     | Bin 37049 -> 0 bytes
 lib/toaster/toastergui/templates/base.html    |   2 +-
 .../toastergui/templates/base_specific.html   |   4 +-
 .../toastergui/templates/js-unit-tests.html   |   2 +-
 6 files changed, 328 insertions(+), 111 deletions(-)
 rename lib/toaster/toastergui/static/js/{bootstrap.js => bootstrap-3.4.1.js} (84%)
 create mode 100644 lib/toaster/toastergui/static/js/bootstrap-3.4.1.min.js
 delete mode 100644 lib/toaster/toastergui/static/js/bootstrap.min.js

Comments

Tim Orling Oct. 16, 2023, 9:34 p.m. UTC | #1
On Mon, Oct 16, 2023 at 9:04 AM Marlon Rodriguez Garcia <
marlon.rodriguez-garcia@savoirfairelinux.com> wrote:

> Update bootstrap version to 3.4.1 to fix incompatibility issues and
> security vulnerabilities
>

The link to the nvd vulnerabilities that I included in the review would be
helpful here but I'll let it go.


> Files base, base_specific and js-unit-test were updated to match new
> versions of files
>
> Changes in v2:
> Update bootstrap version from 3.3.7 to 3.4.1 and explicit name version in
> files
>
> "Changes in v2" belongs below the --- line (which is right after your
Signed-off-by: in the email patch) as it is part of the review and we do
not want it in the final git history.


> Signed-off-by: Marlon Rodriguez Garcia <
> marlon.rodriguez-garcia@savoirfairelinux.com>
>
Reviewed-by: Tim Orling <tim.orling@konsulko.com>


> ---
>  .../js/{bootstrap.js => bootstrap-3.4.1.js}   | 431 +++++++++++++-----
>  .../static/js/bootstrap-3.4.1.min.js          | Bin 0 -> 39680 bytes
>  .../toastergui/static/js/bootstrap.min.js     | Bin 37049 -> 0 bytes
>  lib/toaster/toastergui/templates/base.html    |   2 +-
>  .../toastergui/templates/base_specific.html   |   4 +-
>  .../toastergui/templates/js-unit-tests.html   |   2 +-
>  6 files changed, 328 insertions(+), 111 deletions(-)
>  rename lib/toaster/toastergui/static/js/{bootstrap.js =>
> bootstrap-3.4.1.js} (84%)
>  create mode 100644 lib/toaster/toastergui/static/js/bootstrap-3.4.1.min.js
>  delete mode 100644 lib/toaster/toastergui/static/js/bootstrap.min.js
>
> diff --git a/lib/toaster/toastergui/static/js/bootstrap.js
> b/lib/toaster/toastergui/static/js/bootstrap-3.4.1.js
> similarity index 84%
> rename from lib/toaster/toastergui/static/js/bootstrap.js
> rename to lib/toaster/toastergui/static/js/bootstrap-3.4.1.js
> index d47d640f..170bd608 100644
> --- a/lib/toaster/toastergui/static/js/bootstrap.js
> +++ b/lib/toaster/toastergui/static/js/bootstrap-3.4.1.js
> @@ -1,6 +1,6 @@
>  /*!
> - * Bootstrap v3.3.6 (http://getbootstrap.com)
> - * Copyright 2011-2016 Twitter, Inc.
> + * Bootstrap v3.4.1 (https://getbootstrap.com/)
> + * Copyright 2011-2019 Twitter, Inc.
>   * Licensed under the MIT license
>   */
>
> @@ -11,16 +11,16 @@ if (typeof jQuery === 'undefined') {
>  +function ($) {
>    'use strict';
>    var version = $.fn.jquery.split(' ')[0].split('.')
> -  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 &&
> version[1] == 9 && version[2] < 1) || (version[0] > 2)) {
> -    throw new Error('Bootstrap\'s JavaScript requires jQuery version
> 1.9.1 or higher, but lower than version 3')
> +  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 &&
> version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
> +    throw new Error('Bootstrap\'s JavaScript requires jQuery version
> 1.9.1 or higher, but lower than version 4')
>    }
>  }(jQuery);
>
>  /*
> ========================================================================
> - * Bootstrap: transition.js v3.3.6
> - * http://getbootstrap.com/javascript/#transitions
> + * Bootstrap: transition.js v3.4.1
> + * https://getbootstrap.com/docs/3.4/javascript/#transitions
>   *
> ========================================================================
> - * Copyright 2011-2015 Twitter, Inc.
> + * Copyright 2011-2019 Twitter, Inc.
>   * Licensed under MIT (
> https://github.com/twbs/bootstrap/blob/master/LICENSE)
>   *
> ======================================================================== */
>
> @@ -28,7 +28,7 @@ if (typeof jQuery === 'undefined') {
>  +function ($) {
>    'use strict';
>
> -  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
> +  // CSS TRANSITION SUPPORT (Shoutout: https://modernizr.com/)
>    // ============================================================
>
>    function transitionEnd() {
> @@ -50,7 +50,7 @@ if (typeof jQuery === 'undefined') {
>      return false // explicit for ie8 (  ._.)
>    }
>
> -  // http://blog.alexmaccaw.com/css-transitions
> +  // https://blog.alexmaccaw.com/css-transitions
>    $.fn.emulateTransitionEnd = function (duration) {
>      var called = false
>      var $el = this
> @@ -77,10 +77,10 @@ if (typeof jQuery === 'undefined') {
>  }(jQuery);
>
>  /*
> ========================================================================
> - * Bootstrap: alert.js v3.3.6
> - * http://getbootstrap.com/javascript/#alerts
> + * Bootstrap: alert.js v3.4.1
> + * https://getbootstrap.com/docs/3.4/javascript/#alerts
>   *
> ========================================================================
> - * Copyright 2011-2015 Twitter, Inc.
> + * Copyright 2011-2019 Twitter, Inc.
>   * Licensed under MIT (
> https://github.com/twbs/bootstrap/blob/master/LICENSE)
>   *
> ======================================================================== */
>
> @@ -96,7 +96,7 @@ if (typeof jQuery === 'undefined') {
>      $(el).on('click', dismiss, this.close)
>    }
>
> -  Alert.VERSION = '3.3.6'
> +  Alert.VERSION = '3.4.1'
>
>    Alert.TRANSITION_DURATION = 150
>
> @@ -109,7 +109,8 @@ if (typeof jQuery === 'undefined') {
>        selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //
> strip for ie7
>      }
>
> -    var $parent = $(selector)
> +    selector    = selector === '#' ? [] : selector
> +    var $parent = $(document).find(selector)
>
>      if (e) e.preventDefault()
>
> @@ -172,10 +173,10 @@ if (typeof jQuery === 'undefined') {
>  }(jQuery);
>
>  /*
> ========================================================================
> - * Bootstrap: button.js v3.3.6
> - * http://getbootstrap.com/javascript/#buttons
> + * Bootstrap: button.js v3.4.1
> + * https://getbootstrap.com/docs/3.4/javascript/#buttons
>   *
> ========================================================================
> - * Copyright 2011-2015 Twitter, Inc.
> + * Copyright 2011-2019 Twitter, Inc.
>   * Licensed under MIT (
> https://github.com/twbs/bootstrap/blob/master/LICENSE)
>   *
> ======================================================================== */
>
> @@ -192,7 +193,7 @@ if (typeof jQuery === 'undefined') {
>      this.isLoading = false
>    }
>
> -  Button.VERSION  = '3.3.6'
> +  Button.VERSION  = '3.4.1'
>
>    Button.DEFAULTS = {
>      loadingText: 'loading...'
> @@ -214,10 +215,10 @@ if (typeof jQuery === 'undefined') {
>
>        if (state == 'loadingText') {
>          this.isLoading = true
> -        $el.addClass(d).attr(d, d)
> +        $el.addClass(d).attr(d, d).prop(d, true)
>        } else if (this.isLoading) {
>          this.isLoading = false
> -        $el.removeClass(d).removeAttr(d)
> +        $el.removeClass(d).removeAttr(d).prop(d, false)
>        }
>      }, this), 0)
>    }
> @@ -281,10 +282,15 @@ if (typeof jQuery === 'undefined') {
>
>    $(document)
>      .on('click.bs.button.data-api', '[data-toggle^="button"]', function
> (e) {
> -      var $btn = $(e.target)
> -      if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
> +      var $btn = $(e.target).closest('.btn')
>        Plugin.call($btn, 'toggle')
> -      if (!($(e.target).is('input[type="radio"]') ||
> $(e.target).is('input[type="checkbox"]'))) e.preventDefault()
> +      if (!($(e.target).is('input[type="radio"],
> input[type="checkbox"]'))) {
> +        // Prevent double click on radios, and the double selections (so
> cancellation) on checkboxes
> +        e.preventDefault()
> +        // The target component still receive the focus
> +        if ($btn.is('input,button')) $btn.trigger('focus')
> +        else
> $btn.find('input:visible,button:visible').first().trigger('focus')
> +      }
>      })
>      .on('focus.bs.button.data-api blur.bs.button.data-api',
> '[data-toggle^="button"]', function (e) {
>        $(e.target).closest('.btn').toggleClass('focus',
> /^focus(in)?$/.test(e.type))
> @@ -293,10 +299,10 @@ if (typeof jQuery === 'undefined') {
>  }(jQuery);
>
>  /*
> ========================================================================
> - * Bootstrap: carousel.js v3.3.6
> - * http://getbootstrap.com/javascript/#carousel
> + * Bootstrap: carousel.js v3.4.1
> + * https://getbootstrap.com/docs/3.4/javascript/#carousel
>   *
> ========================================================================
> - * Copyright 2011-2015 Twitter, Inc.
> + * Copyright 2011-2019 Twitter, Inc.
>   * Licensed under MIT (
> https://github.com/twbs/bootstrap/blob/master/LICENSE)
>   *
> ======================================================================== */
>
> @@ -324,7 +330,7 @@ if (typeof jQuery === 'undefined') {
>        .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
>    }
>
> -  Carousel.VERSION  = '3.3.6'
> +  Carousel.VERSION  = '3.4.1'
>
>    Carousel.TRANSITION_DURATION = 600
>
> @@ -438,7 +444,9 @@ if (typeof jQuery === 'undefined') {
>      var slidEvent = $.Event('slid.bs.carousel', { relatedTarget:
> relatedTarget, direction: direction }) // yes, "slid"
>      if ($.support.transition && this.$element.hasClass('slide')) {
>        $next.addClass(type)
> -      $next[0].offsetWidth // force reflow
> +      if (typeof $next === 'object' && $next.length) {
> +        $next[0].offsetWidth // force reflow
> +      }
>        $active.addClass(direction)
>        $next.addClass(direction)
>        $active
> @@ -500,10 +508,17 @@ if (typeof jQuery === 'undefined') {
>    // =================
>
>    var clickHandler = function (e) {
> -    var href
>      var $this   = $(this)
> -    var $target = $($this.attr('data-target') || (href =
> $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
> +    var href    = $this.attr('href')
> +    if (href) {
> +      href = href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
> +    }
> +
> +    var target  = $this.attr('data-target') || href
> +    var $target = $(document).find(target)
> +
>      if (!$target.hasClass('carousel')) return
> +
>      var options = $.extend({}, $target.data(), $this.data())
>      var slideIndex = $this.attr('data-slide-to')
>      if (slideIndex) options.interval = false
> @@ -531,13 +546,14 @@ if (typeof jQuery === 'undefined') {
>  }(jQuery);
>
>  /*
> ========================================================================
> - * Bootstrap: collapse.js v3.3.6
> - * http://getbootstrap.com/javascript/#collapse
> + * Bootstrap: collapse.js v3.4.1
> + * https://getbootstrap.com/docs/3.4/javascript/#collapse
>   *
> ========================================================================
> - * Copyright 2011-2015 Twitter, Inc.
> + * Copyright 2011-2019 Twitter, Inc.
>   * Licensed under MIT (
> https://github.com/twbs/bootstrap/blob/master/LICENSE)
>   *
> ======================================================================== */
>
> +/* jshint latedef: false */
>
>  +function ($) {
>    'use strict';
> @@ -561,7 +577,7 @@ if (typeof jQuery === 'undefined') {
>      if (this.options.toggle) this.toggle()
>    }
>
> -  Collapse.VERSION  = '3.3.6'
> +  Collapse.VERSION  = '3.4.1'
>
>    Collapse.TRANSITION_DURATION = 350
>
> @@ -668,7 +684,7 @@ if (typeof jQuery === 'undefined') {
>    }
>
>    Collapse.prototype.getParent = function () {
> -    return $(this.options.parent)
> +    return $(document).find(this.options.parent)
>        .find('[data-toggle="collapse"][data-parent="' +
> this.options.parent + '"]')
>        .each($.proxy(function (i, element) {
>          var $element = $(element)
> @@ -691,7 +707,7 @@ if (typeof jQuery === 'undefined') {
>      var target = $trigger.attr('data-target')
>        || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/,
> '') // strip for ie7
>
> -    return $(target)
> +    return $(document).find(target)
>    }
>
>
> @@ -743,10 +759,10 @@ if (typeof jQuery === 'undefined') {
>  }(jQuery);
>
>  /*
> ========================================================================
> - * Bootstrap: dropdown.js v3.3.6
> - * http://getbootstrap.com/javascript/#dropdowns
> + * Bootstrap: dropdown.js v3.4.1
> + * https://getbootstrap.com/docs/3.4/javascript/#dropdowns
>   *
> ========================================================================
> - * Copyright 2011-2015 Twitter, Inc.
> + * Copyright 2011-2019 Twitter, Inc.
>   * Licensed under MIT (
> https://github.com/twbs/bootstrap/blob/master/LICENSE)
>   *
> ======================================================================== */
>
> @@ -763,7 +779,7 @@ if (typeof jQuery === 'undefined') {
>      $(element).on('click.bs.dropdown', this.toggle)
>    }
>
> -  Dropdown.VERSION = '3.3.6'
> +  Dropdown.VERSION = '3.4.1'
>
>    function getParent($this) {
>      var selector = $this.attr('data-target')
> @@ -773,7 +789,7 @@ if (typeof jQuery === 'undefined') {
>        selector = selector && /#[A-Za-z]/.test(selector) &&
> selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
>      }
>
> -    var $parent = selector && $(selector)
> +    var $parent = selector !== '#' ? $(document).find(selector) : null
>
>      return $parent && $parent.length ? $parent : $this.parent()
>    }
> @@ -909,10 +925,10 @@ if (typeof jQuery === 'undefined') {
>  }(jQuery);
>
>  /*
> ========================================================================
> - * Bootstrap: modal.js v3.3.6
> - * http://getbootstrap.com/javascript/#modals
> + * Bootstrap: modal.js v3.4.1
> + * https://getbootstrap.com/docs/3.4/javascript/#modals
>   *
> ========================================================================
> - * Copyright 2011-2015 Twitter, Inc.
> + * Copyright 2011-2019 Twitter, Inc.
>   * Licensed under MIT (
> https://github.com/twbs/bootstrap/blob/master/LICENSE)
>   *
> ======================================================================== */
>
> @@ -924,15 +940,16 @@ if (typeof jQuery === 'undefined') {
>    // ======================
>
>    var Modal = function (element, options) {
> -    this.options             = options
> -    this.$body               = $(document.body)
> -    this.$element            = $(element)
> -    this.$dialog             = this.$element.find('.modal-dialog')
> -    this.$backdrop           = null
> -    this.isShown             = null
> -    this.originalBodyPad     = null
> -    this.scrollbarWidth      = 0
> +    this.options = options
> +    this.$body = $(document.body)
> +    this.$element = $(element)
> +    this.$dialog = this.$element.find('.modal-dialog')
> +    this.$backdrop = null
> +    this.isShown = null
> +    this.originalBodyPad = null
> +    this.scrollbarWidth = 0
>      this.ignoreBackdropClick = false
> +    this.fixedContent = '.navbar-fixed-top, .navbar-fixed-bottom'
>
>      if (this.options.remote) {
>        this.$element
> @@ -943,7 +960,7 @@ if (typeof jQuery === 'undefined') {
>      }
>    }
>
> -  Modal.VERSION  = '3.3.6'
> +  Modal.VERSION = '3.4.1'
>
>    Modal.TRANSITION_DURATION = 300
>    Modal.BACKDROP_TRANSITION_DURATION = 150
> @@ -960,7 +977,7 @@ if (typeof jQuery === 'undefined') {
>
>    Modal.prototype.show = function (_relatedTarget) {
>      var that = this
> -    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
> +    var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
>
>      this.$element.trigger(e)
>
> @@ -1050,7 +1067,9 @@ if (typeof jQuery === 'undefined') {
>      $(document)
>        .off('focusin.bs.modal') // guard against infinite focus loop
>        .on('focusin.bs.modal', $.proxy(function (e) {
> -        if (this.$element[0] !== e.target &&
> !this.$element.has(e.target).length) {
> +        if (document !== e.target &&
> +          this.$element[0] !== e.target &&
> +          !this.$element.has(e.target).length) {
>            this.$element.trigger('focus')
>          }
>        }, this))
> @@ -1152,7 +1171,7 @@ if (typeof jQuery === 'undefined') {
>      var modalIsOverflowing = this.$element[0].scrollHeight >
> document.documentElement.clientHeight
>
>      this.$element.css({
> -      paddingLeft:  !this.bodyIsOverflowing && modalIsOverflowing ?
> this.scrollbarWidth : '',
> +      paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ?
> this.scrollbarWidth : '',
>        paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ?
> this.scrollbarWidth : ''
>      })
>    }
> @@ -1177,11 +1196,26 @@ if (typeof jQuery === 'undefined') {
>    Modal.prototype.setScrollbar = function () {
>      var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
>      this.originalBodyPad = document.body.style.paddingRight || ''
> -    if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad +
> this.scrollbarWidth)
> +    var scrollbarWidth = this.scrollbarWidth
> +    if (this.bodyIsOverflowing) {
> +      this.$body.css('padding-right', bodyPad + scrollbarWidth)
> +      $(this.fixedContent).each(function (index, element) {
> +        var actualPadding = element.style.paddingRight
> +        var calculatedPadding = $(element).css('padding-right')
> +        $(element)
> +          .data('padding-right', actualPadding)
> +          .css('padding-right', parseFloat(calculatedPadding) +
> scrollbarWidth + 'px')
> +      })
> +    }
>    }
>
>    Modal.prototype.resetScrollbar = function () {
>      this.$body.css('padding-right', this.originalBodyPad)
> +    $(this.fixedContent).each(function (index, element) {
> +      var padding = $(element).data('padding-right')
> +      $(element).removeData('padding-right')
> +      element.style.paddingRight = padding ? padding : ''
> +    })
>    }
>
>    Modal.prototype.measureScrollbar = function () { // thx walsh
> @@ -1199,8 +1233,8 @@ if (typeof jQuery === 'undefined') {
>
>    function Plugin(option, _relatedTarget) {
>      return this.each(function () {
> -      var $this   = $(this)
> -      var data    = $this.data('bs.modal')
> +      var $this = $(this)
> +      var data = $this.data('bs.modal')
>        var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof
> option == 'object' && option)
>
>        if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
> @@ -1211,7 +1245,7 @@ if (typeof jQuery === 'undefined') {
>
>    var old = $.fn.modal
>
> -  $.fn.modal             = Plugin
> +  $.fn.modal = Plugin
>    $.fn.modal.Constructor = Modal
>
>
> @@ -1228,10 +1262,13 @@ if (typeof jQuery === 'undefined') {
>    // ==============
>
>    $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]',
> function (e) {
> -    var $this   = $(this)
> -    var href    = $this.attr('href')
> -    var $target = $($this.attr('data-target') || (href &&
> href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
> -    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({
> remote: !/#/.test(href) && href }, $target.data(), $this.data())
> +    var $this = $(this)
> +    var href = $this.attr('href')
> +    var target = $this.attr('data-target') ||
> +      (href && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
> +
> +    var $target = $(document).find(target)
> +    var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote:
> !/#/.test(href) && href }, $target.data(), $this.data())
>
>      if ($this.is('a')) e.preventDefault()
>
> @@ -1247,18 +1284,148 @@ if (typeof jQuery === 'undefined') {
>  }(jQuery);
>
>  /*
> ========================================================================
> - * Bootstrap: tooltip.js v3.3.6
> - * http://getbootstrap.com/javascript/#tooltip
> + * Bootstrap: tooltip.js v3.4.1
> + * https://getbootstrap.com/docs/3.4/javascript/#tooltip
>   * Inspired by the original jQuery.tipsy by Jason Frame
>   *
> ========================================================================
> - * Copyright 2011-2015 Twitter, Inc.
> + * Copyright 2011-2019 Twitter, Inc.
>   * Licensed under MIT (
> https://github.com/twbs/bootstrap/blob/master/LICENSE)
>   *
> ======================================================================== */
>
> -
>  +function ($) {
>    'use strict';
>
> +  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']
> +
> +  var uriAttrs = [
> +    'background',
> +    'cite',
> +    'href',
> +    'itemtype',
> +    'longdesc',
> +    'poster',
> +    'src',
> +    'xlink:href'
> +  ]
> +
> +  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i
> +
> +  var DefaultWhitelist = {
> +    // Global attributes allowed on any supplied element below.
> +    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
> +    a: ['target', 'href', 'title', 'rel'],
> +    area: [],
> +    b: [],
> +    br: [],
> +    col: [],
> +    code: [],
> +    div: [],
> +    em: [],
> +    hr: [],
> +    h1: [],
> +    h2: [],
> +    h3: [],
> +    h4: [],
> +    h5: [],
> +    h6: [],
> +    i: [],
> +    img: ['src', 'alt', 'title', 'width', 'height'],
> +    li: [],
> +    ol: [],
> +    p: [],
> +    pre: [],
> +    s: [],
> +    small: [],
> +    span: [],
> +    sub: [],
> +    sup: [],
> +    strong: [],
> +    u: [],
> +    ul: []
> +  }
> +
> +  /**
> +   * A pattern that recognizes a commonly useful subset of URLs that are
> safe.
> +   *
> +   * Shoutout to Angular 7
> https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
> +   */
> +  var SAFE_URL_PATTERN =
> /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi
> +
> +  /**
> +   * A pattern that matches safe data URLs. Only matches image, video and
> audio types.
> +   *
> +   * Shoutout to Angular 7
> https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
> +   */
> +  var DATA_URL_PATTERN =
> /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i
> +
> +  function allowedAttribute(attr, allowedAttributeList) {
> +    var attrName = attr.nodeName.toLowerCase()
> +
> +    if ($.inArray(attrName, allowedAttributeList) !== -1) {
> +      if ($.inArray(attrName, uriAttrs) !== -1) {
> +        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) ||
> attr.nodeValue.match(DATA_URL_PATTERN))
> +      }
> +
> +      return true
> +    }
> +
> +    var regExp = $(allowedAttributeList).filter(function (index, value) {
> +      return value instanceof RegExp
> +    })
> +
> +    // Check if a regular expression validates the attribute.
> +    for (var i = 0, l = regExp.length; i < l; i++) {
> +      if (attrName.match(regExp[i])) {
> +        return true
> +      }
> +    }
> +
> +    return false
> +  }
> +
> +  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
> +    if (unsafeHtml.length === 0) {
> +      return unsafeHtml
> +    }
> +
> +    if (sanitizeFn && typeof sanitizeFn === 'function') {
> +      return sanitizeFn(unsafeHtml)
> +    }
> +
> +    // IE 8 and below don't support createHTMLDocument
> +    if (!document.implementation ||
> !document.implementation.createHTMLDocument) {
> +      return unsafeHtml
> +    }
> +
> +    var createdDocument =
> document.implementation.createHTMLDocument('sanitization')
> +    createdDocument.body.innerHTML = unsafeHtml
> +
> +    var whitelistKeys = $.map(whiteList, function (el, i) { return i })
> +    var elements = $(createdDocument.body).find('*')
> +
> +    for (var i = 0, len = elements.length; i < len; i++) {
> +      var el = elements[i]
> +      var elName = el.nodeName.toLowerCase()
> +
> +      if ($.inArray(elName, whitelistKeys) === -1) {
> +        el.parentNode.removeChild(el)
> +
> +        continue
> +      }
> +
> +      var attributeList = $.map(el.attributes, function (el) { return el
> })
> +      var whitelistedAttributes = [].concat(whiteList['*'] || [],
> whiteList[elName] || [])
> +
> +      for (var j = 0, len2 = attributeList.length; j < len2; j++) {
> +        if (!allowedAttribute(attributeList[j], whitelistedAttributes)) {
> +          el.removeAttribute(attributeList[j].nodeName)
> +        }
> +      }
> +    }
> +
> +    return createdDocument.body.innerHTML
> +  }
> +
>    // TOOLTIP PUBLIC CLASS DEFINITION
>    // ===============================
>
> @@ -1274,7 +1441,7 @@ if (typeof jQuery === 'undefined') {
>      this.init('tooltip', element, options)
>    }
>
> -  Tooltip.VERSION  = '3.3.6'
> +  Tooltip.VERSION  = '3.4.1'
>
>    Tooltip.TRANSITION_DURATION = 150
>
> @@ -1291,7 +1458,10 @@ if (typeof jQuery === 'undefined') {
>      viewport: {
>        selector: 'body',
>        padding: 0
> -    }
> +    },
> +    sanitize : true,
> +    sanitizeFn : null,
> +    whiteList : DefaultWhitelist
>    }
>
>    Tooltip.prototype.init = function (type, element, options) {
> @@ -1299,7 +1469,7 @@ if (typeof jQuery === 'undefined') {
>      this.type      = type
>      this.$element  = $(element)
>      this.options   = this.getOptions(options)
> -    this.$viewport = this.options.viewport &&
> $($.isFunction(this.options.viewport) ? this.options.viewport.call(this,
> this.$element) : (this.options.viewport.selector || this.options.viewport))
> +    this.$viewport = this.options.viewport &&
> $(document).find($.isFunction(this.options.viewport) ?
> this.options.viewport.call(this, this.$element) :
> (this.options.viewport.selector || this.options.viewport))
>      this.inState   = { click: false, hover: false, focus: false }
>
>      if (this.$element[0] instanceof document.constructor &&
> !this.options.selector) {
> @@ -1332,7 +1502,15 @@ if (typeof jQuery === 'undefined') {
>    }
>
>    Tooltip.prototype.getOptions = function (options) {
> -    options = $.extend({}, this.getDefaults(), this.$element.data(),
> options)
> +    var dataAttributes = this.$element.data()
> +
> +    for (var dataAttr in dataAttributes) {
> +      if (dataAttributes.hasOwnProperty(dataAttr) && $.inArray(dataAttr,
> DISALLOWED_ATTRIBUTES) !== -1) {
> +        delete dataAttributes[dataAttr]
> +      }
> +    }
> +
> +    options = $.extend({}, this.getDefaults(), dataAttributes, options)
>
>      if (options.delay && typeof options.delay == 'number') {
>        options.delay = {
> @@ -1341,6 +1519,10 @@ if (typeof jQuery === 'undefined') {
>        }
>      }
>
> +    if (options.sanitize) {
> +      options.template = sanitizeHtml(options.template,
> options.whiteList, options.sanitizeFn)
> +    }
> +
>      return options
>    }
>
> @@ -1452,7 +1634,7 @@ if (typeof jQuery === 'undefined') {
>          .addClass(placement)
>          .data('bs.' + this.type, this)
>
> -      this.options.container ? $tip.appendTo(this.options.container) :
> $tip.insertAfter(this.$element)
> +      this.options.container ?
> $tip.appendTo($(document).find(this.options.container)) :
> $tip.insertAfter(this.$element)
>        this.$element.trigger('inserted.bs.' + this.type)
>
>        var pos          = this.getPosition()
> @@ -1554,7 +1736,16 @@ if (typeof jQuery === 'undefined') {
>      var $tip  = this.tip()
>      var title = this.getTitle()
>
> -    $tip.find('.tooltip-inner')[this.options.html ? 'html' :
> 'text'](title)
> +    if (this.options.html) {
> +      if (this.options.sanitize) {
> +        title = sanitizeHtml(title, this.options.whiteList,
> this.options.sanitizeFn)
> +      }
> +
> +      $tip.find('.tooltip-inner').html(title)
> +    } else {
> +      $tip.find('.tooltip-inner').text(title)
> +    }
> +
>      $tip.removeClass('fade in top bottom left right')
>    }
>
> @@ -1565,9 +1756,11 @@ if (typeof jQuery === 'undefined') {
>
>      function complete() {
>        if (that.hoverState != 'in') $tip.detach()
> -      that.$element
> -        .removeAttr('aria-describedby')
> -        .trigger('hidden.bs.' + that.type)
> +      if (that.$element) { // TODO: Check whether guarding this code with
> this `if` is really necessary.
> +        that.$element
> +          .removeAttr('aria-describedby')
> +          .trigger('hidden.bs.' + that.type)
> +      }
>        callback && callback()
>      }
>
> @@ -1610,7 +1803,10 @@ if (typeof jQuery === 'undefined') {
>        // width and height are missing in IE8, so compute them manually;
> see https://github.com/twbs/bootstrap/issues/14093
>        elRect = $.extend({}, elRect, { width: elRect.right - elRect.left,
> height: elRect.bottom - elRect.top })
>      }
> -    var elOffset  = isBody ? { top: 0, left: 0 } : $element.offset()
> +    var isSvg = window.SVGElement && el instanceof window.SVGElement
> +    // Avoid using $.offset() on SVGs since it gives incorrect results in
> jQuery 3.
> +    // See https://github.com/twbs/bootstrap/issues/20280
> +    var elOffset  = isBody ? { top: 0, left: 0 } : (isSvg ? null :
> $element.offset())
>      var scroll    = { scroll: isBody ? document.documentElement.scrollTop
> || document.body.scrollTop : $element.scrollTop() }
>      var outerDims = isBody ? { width: $(window).width(), height:
> $(window).height() } : null
>
> @@ -1726,9 +1922,13 @@ if (typeof jQuery === 'undefined') {
>        that.$tip = null
>        that.$arrow = null
>        that.$viewport = null
> +      that.$element = null
>      })
>    }
>
> +  Tooltip.prototype.sanitizeHtml = function (unsafeHtml) {
> +    return sanitizeHtml(unsafeHtml, this.options.whiteList,
> this.options.sanitizeFn)
> +  }
>
>    // TOOLTIP PLUGIN DEFINITION
>    // =========================
> @@ -1762,10 +1962,10 @@ if (typeof jQuery === 'undefined') {
>  }(jQuery);
>
>  /*
> ========================================================================
> - * Bootstrap: popover.js v3.3.6
> - * http://getbootstrap.com/javascript/#popovers
> + * Bootstrap: popover.js v3.4.1
> + * https://getbootstrap.com/docs/3.4/javascript/#popovers
>   *
> ========================================================================
> - * Copyright 2011-2015 Twitter, Inc.
> + * Copyright 2011-2019 Twitter, Inc.
>   * Licensed under MIT (
> https://github.com/twbs/bootstrap/blob/master/LICENSE)
>   *
> ======================================================================== */
>
> @@ -1782,7 +1982,7 @@ if (typeof jQuery === 'undefined') {
>
>    if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
>
> -  Popover.VERSION  = '3.3.6'
> +  Popover.VERSION  = '3.4.1'
>
>    Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
>      placement: 'right',
> @@ -1808,10 +2008,25 @@ if (typeof jQuery === 'undefined') {
>      var title   = this.getTitle()
>      var content = this.getContent()
>
> -    $tip.find('.popover-title')[this.options.html ? 'html' :
> 'text'](title)
> -    $tip.find('.popover-content').children().detach().end()[ // we use
> append for html objects to maintain js events
> -      this.options.html ? (typeof content == 'string' ? 'html' :
> 'append') : 'text'
> -    ](content)
> +    if (this.options.html) {
> +      var typeContent = typeof content
> +
> +      if (this.options.sanitize) {
> +        title = this.sanitizeHtml(title)
> +
> +        if (typeContent === 'string') {
> +          content = this.sanitizeHtml(content)
> +        }
> +      }
> +
> +      $tip.find('.popover-title').html(title)
> +      $tip.find('.popover-content').children().detach().end()[
> +        typeContent === 'string' ? 'html' : 'append'
> +      ](content)
> +    } else {
> +      $tip.find('.popover-title').text(title)
> +
> $tip.find('.popover-content').children().detach().end().text(content)
> +    }
>
>      $tip.removeClass('fade top bottom left right in')
>
> @@ -1830,8 +2045,8 @@ if (typeof jQuery === 'undefined') {
>
>      return $e.attr('data-content')
>        || (typeof o.content == 'function' ?
> -            o.content.call($e[0]) :
> -            o.content)
> +        o.content.call($e[0]) :
> +        o.content)
>    }
>
>    Popover.prototype.arrow = function () {
> @@ -1871,10 +2086,10 @@ if (typeof jQuery === 'undefined') {
>  }(jQuery);
>
>  /*
> ========================================================================
> - * Bootstrap: scrollspy.js v3.3.6
> - * http://getbootstrap.com/javascript/#scrollspy
> + * Bootstrap: scrollspy.js v3.4.1
> + * https://getbootstrap.com/docs/3.4/javascript/#scrollspy
>   *
> ========================================================================
> - * Copyright 2011-2015 Twitter, Inc.
> + * Copyright 2011-2019 Twitter, Inc.
>   * Licensed under MIT (
> https://github.com/twbs/bootstrap/blob/master/LICENSE)
>   *
> ======================================================================== */
>
> @@ -1900,7 +2115,7 @@ if (typeof jQuery === 'undefined') {
>      this.process()
>    }
>
> -  ScrollSpy.VERSION  = '3.3.6'
> +  ScrollSpy.VERSION  = '3.4.1'
>
>    ScrollSpy.DEFAULTS = {
>      offset: 10
> @@ -2044,10 +2259,10 @@ if (typeof jQuery === 'undefined') {
>  }(jQuery);
>
>  /*
> ========================================================================
> - * Bootstrap: tab.js v3.3.6
> - * http://getbootstrap.com/javascript/#tabs
> + * Bootstrap: tab.js v3.4.1
> + * https://getbootstrap.com/docs/3.4/javascript/#tabs
>   *
> ========================================================================
> - * Copyright 2011-2015 Twitter, Inc.
> + * Copyright 2011-2019 Twitter, Inc.
>   * Licensed under MIT (
> https://github.com/twbs/bootstrap/blob/master/LICENSE)
>   *
> ======================================================================== */
>
> @@ -2064,7 +2279,7 @@ if (typeof jQuery === 'undefined') {
>      // jscs:enable requireDollarBeforejQueryAssignment
>    }
>
> -  Tab.VERSION = '3.3.6'
> +  Tab.VERSION = '3.4.1'
>
>    Tab.TRANSITION_DURATION = 150
>
> @@ -2093,7 +2308,7 @@ if (typeof jQuery === 'undefined') {
>
>      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented())
> return
>
> -    var $target = $(selector)
> +    var $target = $(document).find(selector)
>
>      this.activate($this.closest('li'), $ul)
>      this.activate($target, $target.parent(), function () {
> @@ -2118,15 +2333,15 @@ if (typeof jQuery === 'undefined') {
>        $active
>          .removeClass('active')
>          .find('> .dropdown-menu > .active')
> -          .removeClass('active')
> +        .removeClass('active')
>          .end()
>          .find('[data-toggle="tab"]')
> -          .attr('aria-expanded', false)
> +        .attr('aria-expanded', false)
>
>        element
>          .addClass('active')
>          .find('[data-toggle="tab"]')
> -          .attr('aria-expanded', true)
> +        .attr('aria-expanded', true)
>
>        if (transition) {
>          element[0].offsetWidth // reflow for transition
> @@ -2138,10 +2353,10 @@ if (typeof jQuery === 'undefined') {
>        if (element.parent('.dropdown-menu').length) {
>          element
>            .closest('li.dropdown')
> -            .addClass('active')
> +          .addClass('active')
>            .end()
>            .find('[data-toggle="tab"]')
> -            .attr('aria-expanded', true)
> +          .attr('aria-expanded', true)
>        }
>
>        callback && callback()
> @@ -2200,10 +2415,10 @@ if (typeof jQuery === 'undefined') {
>  }(jQuery);
>
>  /*
> ========================================================================
> - * Bootstrap: affix.js v3.3.6
> - * http://getbootstrap.com/javascript/#affix
> + * Bootstrap: affix.js v3.4.1
> + * https://getbootstrap.com/docs/3.4/javascript/#affix
>   *
> ========================================================================
> - * Copyright 2011-2015 Twitter, Inc.
> + * Copyright 2011-2019 Twitter, Inc.
>   * Licensed under MIT (
> https://github.com/twbs/bootstrap/blob/master/LICENSE)
>   *
> ======================================================================== */
>
> @@ -2217,7 +2432,9 @@ if (typeof jQuery === 'undefined') {
>    var Affix = function (element, options) {
>      this.options = $.extend({}, Affix.DEFAULTS, options)
>
> -    this.$target = $(this.options.target)
> +    var target = this.options.target === Affix.DEFAULTS.target ?
> $(this.options.target) : $(document).find(this.options.target)
> +
> +    this.$target = target
>        .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
>        .on('click.bs.affix.data-api',
> $.proxy(this.checkPositionWithEventLoop, this))
>
> @@ -2229,7 +2446,7 @@ if (typeof jQuery === 'undefined') {
>      this.checkPosition()
>    }
>
> -  Affix.VERSION  = '3.3.6'
> +  Affix.VERSION  = '3.4.1'
>
>    Affix.RESET    = 'affix affix-top affix-bottom'
>
> diff --git a/lib/toaster/toastergui/static/js/bootstrap-3.4.1.min.js
> b/lib/toaster/toastergui/static/js/bootstrap-3.4.1.min.js
> new file mode 100644
> index
> 0000000000000000000000000000000000000000..eb0a8b410f59eb8abcd21e588f1a7b718db3eebd
> GIT binary patch
> literal 39680
> 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
> B&G`TT
>
> literal 0
> HcmV?d00001
>
> diff --git a/lib/toaster/toastergui/static/js/bootstrap.min.js
> b/lib/toaster/toastergui/static/js/bootstrap.min.js
> deleted file mode 100644
> index
> 2446398cfe6177172771488ec9bbef5429050afd..0000000000000000000000000000000000000000
> GIT binary patch
> literal 0
> HcmV?d00001
>
> literal 37049
> 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
> X12l9U@Q92=*7GQe1K@g9>*W6dNOSnh
>
> diff --git a/lib/toaster/toastergui/templates/base.html
> b/lib/toaster/toastergui/templates/base.html
> index 709573dd..e8600f3e 100644
> --- a/lib/toaster/toastergui/templates/base.html
> +++ b/lib/toaster/toastergui/templates/base.html
> @@ -18,7 +18,7 @@
>      </script>
>      <script src="{% static 'js/jquery.cookie.js' %}">
>      </script>
> -    <script src="{% static 'js/bootstrap.min.js' %}">
> +    <script src="{% static 'js/bootstrap-3.4.1.min.js' %}">
>      </script>
>      <script src="{% static 'js/typeahead.jquery.js' %}">
>      </script>
> diff --git a/lib/toaster/toastergui/templates/base_specific.html
> b/lib/toaster/toastergui/templates/base_specific.html
> index e377cadd..425f7ed7 100644
> --- a/lib/toaster/toastergui/templates/base_specific.html
> +++ b/lib/toaster/toastergui/templates/base_specific.html
> @@ -14,11 +14,11 @@
>
>      <meta name="viewport" content="width=device-width, initial-scale=1.0"
> />
>      <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
> -    <script src="{% static 'js/jquery-2.0.3.min.js' %}">
> +    <script src="{% static 'js/jquery-3.7.1.min.js' %}">
>      </script>
>      <script src="{% static 'js/jquery.cookie.js' %}">
>      </script>
> -    <script src="{% static 'js/bootstrap.min.js' %}">
> +    <script src="{% static 'js/bootstrap-3.4.1.min.js' %}">
>      </script>
>      <script src="{% static 'js/typeahead.jquery.js' %}">
>      </script>
> diff --git a/lib/toaster/toastergui/templates/js-unit-tests.html
> b/lib/toaster/toastergui/templates/js-unit-tests.html
> index ca248962..41553c4f 100644
> --- a/lib/toaster/toastergui/templates/js-unit-tests.html
> +++ b/lib/toaster/toastergui/templates/js-unit-tests.html
> @@ -11,7 +11,7 @@
>  <script src="{% static 'js/layerDepsModal.js' %}"></script>
>  <script src="{% static 'js/projectpage.js' %}"></script>
>
> -<script src="{% static 'js/bootstrap.min.js' %}"></script>
> +<script src="{% static 'js/bootstrap-3.4.1.min.js' %}"></script>
>  <script src="{% static 'js/filtersnippet.js' %}"></script>
>  <script src="{% static 'js/importlayer.js' %}"></script>
>  <script src="{% static 'js/highlight.pack.js' %}"></script>
> --
> 2.34.1
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#15244):
> https://lists.openembedded.org/g/bitbake-devel/message/15244
> Mute This Topic: https://lists.openembedded.org/mt/101998960/924729
> Group Owner: bitbake-devel+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/bitbake-devel/unsub [
> ticotimo@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
>
diff mbox series

Patch

diff --git a/lib/toaster/toastergui/static/js/bootstrap.js b/lib/toaster/toastergui/static/js/bootstrap-3.4.1.js
similarity index 84%
rename from lib/toaster/toastergui/static/js/bootstrap.js
rename to lib/toaster/toastergui/static/js/bootstrap-3.4.1.js
index d47d640f..170bd608 100644
--- a/lib/toaster/toastergui/static/js/bootstrap.js
+++ b/lib/toaster/toastergui/static/js/bootstrap-3.4.1.js
@@ -1,6 +1,6 @@ 
 /*!
- * Bootstrap v3.3.6 (http://getbootstrap.com)
- * Copyright 2011-2016 Twitter, Inc.
+ * Bootstrap v3.4.1 (https://getbootstrap.com/)
+ * Copyright 2011-2019 Twitter, Inc.
  * Licensed under the MIT license
  */
 
@@ -11,16 +11,16 @@  if (typeof jQuery === 'undefined') {
 +function ($) {
   'use strict';
   var version = $.fn.jquery.split(' ')[0].split('.')
-  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 2)) {
-    throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3')
+  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
+    throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')
   }
 }(jQuery);
 
 /* ========================================================================
- * Bootstrap: transition.js v3.3.6
- * http://getbootstrap.com/javascript/#transitions
+ * Bootstrap: transition.js v3.4.1
+ * https://getbootstrap.com/docs/3.4/javascript/#transitions
  * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
+ * Copyright 2011-2019 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  * ======================================================================== */
 
@@ -28,7 +28,7 @@  if (typeof jQuery === 'undefined') {
 +function ($) {
   'use strict';
 
-  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
+  // CSS TRANSITION SUPPORT (Shoutout: https://modernizr.com/)
   // ============================================================
 
   function transitionEnd() {
@@ -50,7 +50,7 @@  if (typeof jQuery === 'undefined') {
     return false // explicit for ie8 (  ._.)
   }
 
-  // http://blog.alexmaccaw.com/css-transitions
+  // https://blog.alexmaccaw.com/css-transitions
   $.fn.emulateTransitionEnd = function (duration) {
     var called = false
     var $el = this
@@ -77,10 +77,10 @@  if (typeof jQuery === 'undefined') {
 }(jQuery);
 
 /* ========================================================================
- * Bootstrap: alert.js v3.3.6
- * http://getbootstrap.com/javascript/#alerts
+ * Bootstrap: alert.js v3.4.1
+ * https://getbootstrap.com/docs/3.4/javascript/#alerts
  * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
+ * Copyright 2011-2019 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  * ======================================================================== */
 
@@ -96,7 +96,7 @@  if (typeof jQuery === 'undefined') {
     $(el).on('click', dismiss, this.close)
   }
 
-  Alert.VERSION = '3.3.6'
+  Alert.VERSION = '3.4.1'
 
   Alert.TRANSITION_DURATION = 150
 
@@ -109,7 +109,8 @@  if (typeof jQuery === 'undefined') {
       selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
     }
 
-    var $parent = $(selector)
+    selector    = selector === '#' ? [] : selector
+    var $parent = $(document).find(selector)
 
     if (e) e.preventDefault()
 
@@ -172,10 +173,10 @@  if (typeof jQuery === 'undefined') {
 }(jQuery);
 
 /* ========================================================================
- * Bootstrap: button.js v3.3.6
- * http://getbootstrap.com/javascript/#buttons
+ * Bootstrap: button.js v3.4.1
+ * https://getbootstrap.com/docs/3.4/javascript/#buttons
  * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
+ * Copyright 2011-2019 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  * ======================================================================== */
 
@@ -192,7 +193,7 @@  if (typeof jQuery === 'undefined') {
     this.isLoading = false
   }
 
-  Button.VERSION  = '3.3.6'
+  Button.VERSION  = '3.4.1'
 
   Button.DEFAULTS = {
     loadingText: 'loading...'
@@ -214,10 +215,10 @@  if (typeof jQuery === 'undefined') {
 
       if (state == 'loadingText') {
         this.isLoading = true
-        $el.addClass(d).attr(d, d)
+        $el.addClass(d).attr(d, d).prop(d, true)
       } else if (this.isLoading) {
         this.isLoading = false
-        $el.removeClass(d).removeAttr(d)
+        $el.removeClass(d).removeAttr(d).prop(d, false)
       }
     }, this), 0)
   }
@@ -281,10 +282,15 @@  if (typeof jQuery === 'undefined') {
 
   $(document)
     .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
-      var $btn = $(e.target)
-      if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
+      var $btn = $(e.target).closest('.btn')
       Plugin.call($btn, 'toggle')
-      if (!($(e.target).is('input[type="radio"]') || $(e.target).is('input[type="checkbox"]'))) e.preventDefault()
+      if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
+        // Prevent double click on radios, and the double selections (so cancellation) on checkboxes
+        e.preventDefault()
+        // The target component still receive the focus
+        if ($btn.is('input,button')) $btn.trigger('focus')
+        else $btn.find('input:visible,button:visible').first().trigger('focus')
+      }
     })
     .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
       $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
@@ -293,10 +299,10 @@  if (typeof jQuery === 'undefined') {
 }(jQuery);
 
 /* ========================================================================
- * Bootstrap: carousel.js v3.3.6
- * http://getbootstrap.com/javascript/#carousel
+ * Bootstrap: carousel.js v3.4.1
+ * https://getbootstrap.com/docs/3.4/javascript/#carousel
  * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
+ * Copyright 2011-2019 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  * ======================================================================== */
 
@@ -324,7 +330,7 @@  if (typeof jQuery === 'undefined') {
       .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
   }
 
-  Carousel.VERSION  = '3.3.6'
+  Carousel.VERSION  = '3.4.1'
 
   Carousel.TRANSITION_DURATION = 600
 
@@ -438,7 +444,9 @@  if (typeof jQuery === 'undefined') {
     var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
     if ($.support.transition && this.$element.hasClass('slide')) {
       $next.addClass(type)
-      $next[0].offsetWidth // force reflow
+      if (typeof $next === 'object' && $next.length) {
+        $next[0].offsetWidth // force reflow
+      }
       $active.addClass(direction)
       $next.addClass(direction)
       $active
@@ -500,10 +508,17 @@  if (typeof jQuery === 'undefined') {
   // =================
 
   var clickHandler = function (e) {
-    var href
     var $this   = $(this)
-    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
+    var href    = $this.attr('href')
+    if (href) {
+      href = href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
+    }
+
+    var target  = $this.attr('data-target') || href
+    var $target = $(document).find(target)
+
     if (!$target.hasClass('carousel')) return
+
     var options = $.extend({}, $target.data(), $this.data())
     var slideIndex = $this.attr('data-slide-to')
     if (slideIndex) options.interval = false
@@ -531,13 +546,14 @@  if (typeof jQuery === 'undefined') {
 }(jQuery);
 
 /* ========================================================================
- * Bootstrap: collapse.js v3.3.6
- * http://getbootstrap.com/javascript/#collapse
+ * Bootstrap: collapse.js v3.4.1
+ * https://getbootstrap.com/docs/3.4/javascript/#collapse
  * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
+ * Copyright 2011-2019 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  * ======================================================================== */
 
+/* jshint latedef: false */
 
 +function ($) {
   'use strict';
@@ -561,7 +577,7 @@  if (typeof jQuery === 'undefined') {
     if (this.options.toggle) this.toggle()
   }
 
-  Collapse.VERSION  = '3.3.6'
+  Collapse.VERSION  = '3.4.1'
 
   Collapse.TRANSITION_DURATION = 350
 
@@ -668,7 +684,7 @@  if (typeof jQuery === 'undefined') {
   }
 
   Collapse.prototype.getParent = function () {
-    return $(this.options.parent)
+    return $(document).find(this.options.parent)
       .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
       .each($.proxy(function (i, element) {
         var $element = $(element)
@@ -691,7 +707,7 @@  if (typeof jQuery === 'undefined') {
     var target = $trigger.attr('data-target')
       || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
 
-    return $(target)
+    return $(document).find(target)
   }
 
 
@@ -743,10 +759,10 @@  if (typeof jQuery === 'undefined') {
 }(jQuery);
 
 /* ========================================================================
- * Bootstrap: dropdown.js v3.3.6
- * http://getbootstrap.com/javascript/#dropdowns
+ * Bootstrap: dropdown.js v3.4.1
+ * https://getbootstrap.com/docs/3.4/javascript/#dropdowns
  * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
+ * Copyright 2011-2019 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  * ======================================================================== */
 
@@ -763,7 +779,7 @@  if (typeof jQuery === 'undefined') {
     $(element).on('click.bs.dropdown', this.toggle)
   }
 
-  Dropdown.VERSION = '3.3.6'
+  Dropdown.VERSION = '3.4.1'
 
   function getParent($this) {
     var selector = $this.attr('data-target')
@@ -773,7 +789,7 @@  if (typeof jQuery === 'undefined') {
       selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
     }
 
-    var $parent = selector && $(selector)
+    var $parent = selector !== '#' ? $(document).find(selector) : null
 
     return $parent && $parent.length ? $parent : $this.parent()
   }
@@ -909,10 +925,10 @@  if (typeof jQuery === 'undefined') {
 }(jQuery);
 
 /* ========================================================================
- * Bootstrap: modal.js v3.3.6
- * http://getbootstrap.com/javascript/#modals
+ * Bootstrap: modal.js v3.4.1
+ * https://getbootstrap.com/docs/3.4/javascript/#modals
  * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
+ * Copyright 2011-2019 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  * ======================================================================== */
 
@@ -924,15 +940,16 @@  if (typeof jQuery === 'undefined') {
   // ======================
 
   var Modal = function (element, options) {
-    this.options             = options
-    this.$body               = $(document.body)
-    this.$element            = $(element)
-    this.$dialog             = this.$element.find('.modal-dialog')
-    this.$backdrop           = null
-    this.isShown             = null
-    this.originalBodyPad     = null
-    this.scrollbarWidth      = 0
+    this.options = options
+    this.$body = $(document.body)
+    this.$element = $(element)
+    this.$dialog = this.$element.find('.modal-dialog')
+    this.$backdrop = null
+    this.isShown = null
+    this.originalBodyPad = null
+    this.scrollbarWidth = 0
     this.ignoreBackdropClick = false
+    this.fixedContent = '.navbar-fixed-top, .navbar-fixed-bottom'
 
     if (this.options.remote) {
       this.$element
@@ -943,7 +960,7 @@  if (typeof jQuery === 'undefined') {
     }
   }
 
-  Modal.VERSION  = '3.3.6'
+  Modal.VERSION = '3.4.1'
 
   Modal.TRANSITION_DURATION = 300
   Modal.BACKDROP_TRANSITION_DURATION = 150
@@ -960,7 +977,7 @@  if (typeof jQuery === 'undefined') {
 
   Modal.prototype.show = function (_relatedTarget) {
     var that = this
-    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
+    var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
 
     this.$element.trigger(e)
 
@@ -1050,7 +1067,9 @@  if (typeof jQuery === 'undefined') {
     $(document)
       .off('focusin.bs.modal') // guard against infinite focus loop
       .on('focusin.bs.modal', $.proxy(function (e) {
-        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
+        if (document !== e.target &&
+          this.$element[0] !== e.target &&
+          !this.$element.has(e.target).length) {
           this.$element.trigger('focus')
         }
       }, this))
@@ -1152,7 +1171,7 @@  if (typeof jQuery === 'undefined') {
     var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
 
     this.$element.css({
-      paddingLeft:  !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
+      paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
       paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
     })
   }
@@ -1177,11 +1196,26 @@  if (typeof jQuery === 'undefined') {
   Modal.prototype.setScrollbar = function () {
     var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
     this.originalBodyPad = document.body.style.paddingRight || ''
-    if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
+    var scrollbarWidth = this.scrollbarWidth
+    if (this.bodyIsOverflowing) {
+      this.$body.css('padding-right', bodyPad + scrollbarWidth)
+      $(this.fixedContent).each(function (index, element) {
+        var actualPadding = element.style.paddingRight
+        var calculatedPadding = $(element).css('padding-right')
+        $(element)
+          .data('padding-right', actualPadding)
+          .css('padding-right', parseFloat(calculatedPadding) + scrollbarWidth + 'px')
+      })
+    }
   }
 
   Modal.prototype.resetScrollbar = function () {
     this.$body.css('padding-right', this.originalBodyPad)
+    $(this.fixedContent).each(function (index, element) {
+      var padding = $(element).data('padding-right')
+      $(element).removeData('padding-right')
+      element.style.paddingRight = padding ? padding : ''
+    })
   }
 
   Modal.prototype.measureScrollbar = function () { // thx walsh
@@ -1199,8 +1233,8 @@  if (typeof jQuery === 'undefined') {
 
   function Plugin(option, _relatedTarget) {
     return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.modal')
+      var $this = $(this)
+      var data = $this.data('bs.modal')
       var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
 
       if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
@@ -1211,7 +1245,7 @@  if (typeof jQuery === 'undefined') {
 
   var old = $.fn.modal
 
-  $.fn.modal             = Plugin
+  $.fn.modal = Plugin
   $.fn.modal.Constructor = Modal
 
 
@@ -1228,10 +1262,13 @@  if (typeof jQuery === 'undefined') {
   // ==============
 
   $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
-    var $this   = $(this)
-    var href    = $this.attr('href')
-    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
-    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
+    var $this = $(this)
+    var href = $this.attr('href')
+    var target = $this.attr('data-target') ||
+      (href && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
+
+    var $target = $(document).find(target)
+    var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
 
     if ($this.is('a')) e.preventDefault()
 
@@ -1247,18 +1284,148 @@  if (typeof jQuery === 'undefined') {
 }(jQuery);
 
 /* ========================================================================
- * Bootstrap: tooltip.js v3.3.6
- * http://getbootstrap.com/javascript/#tooltip
+ * Bootstrap: tooltip.js v3.4.1
+ * https://getbootstrap.com/docs/3.4/javascript/#tooltip
  * Inspired by the original jQuery.tipsy by Jason Frame
  * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
+ * Copyright 2011-2019 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  * ======================================================================== */
 
-
 +function ($) {
   'use strict';
 
+  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']
+
+  var uriAttrs = [
+    'background',
+    'cite',
+    'href',
+    'itemtype',
+    'longdesc',
+    'poster',
+    'src',
+    'xlink:href'
+  ]
+
+  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i
+
+  var DefaultWhitelist = {
+    // Global attributes allowed on any supplied element below.
+    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
+    a: ['target', 'href', 'title', 'rel'],
+    area: [],
+    b: [],
+    br: [],
+    col: [],
+    code: [],
+    div: [],
+    em: [],
+    hr: [],
+    h1: [],
+    h2: [],
+    h3: [],
+    h4: [],
+    h5: [],
+    h6: [],
+    i: [],
+    img: ['src', 'alt', 'title', 'width', 'height'],
+    li: [],
+    ol: [],
+    p: [],
+    pre: [],
+    s: [],
+    small: [],
+    span: [],
+    sub: [],
+    sup: [],
+    strong: [],
+    u: [],
+    ul: []
+  }
+
+  /**
+   * A pattern that recognizes a commonly useful subset of URLs that are safe.
+   *
+   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
+   */
+  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi
+
+  /**
+   * A pattern that matches safe data URLs. Only matches image, video and audio types.
+   *
+   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
+   */
+  var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i
+
+  function allowedAttribute(attr, allowedAttributeList) {
+    var attrName = attr.nodeName.toLowerCase()
+
+    if ($.inArray(attrName, allowedAttributeList) !== -1) {
+      if ($.inArray(attrName, uriAttrs) !== -1) {
+        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))
+      }
+
+      return true
+    }
+
+    var regExp = $(allowedAttributeList).filter(function (index, value) {
+      return value instanceof RegExp
+    })
+
+    // Check if a regular expression validates the attribute.
+    for (var i = 0, l = regExp.length; i < l; i++) {
+      if (attrName.match(regExp[i])) {
+        return true
+      }
+    }
+
+    return false
+  }
+
+  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
+    if (unsafeHtml.length === 0) {
+      return unsafeHtml
+    }
+
+    if (sanitizeFn && typeof sanitizeFn === 'function') {
+      return sanitizeFn(unsafeHtml)
+    }
+
+    // IE 8 and below don't support createHTMLDocument
+    if (!document.implementation || !document.implementation.createHTMLDocument) {
+      return unsafeHtml
+    }
+
+    var createdDocument = document.implementation.createHTMLDocument('sanitization')
+    createdDocument.body.innerHTML = unsafeHtml
+
+    var whitelistKeys = $.map(whiteList, function (el, i) { return i })
+    var elements = $(createdDocument.body).find('*')
+
+    for (var i = 0, len = elements.length; i < len; i++) {
+      var el = elements[i]
+      var elName = el.nodeName.toLowerCase()
+
+      if ($.inArray(elName, whitelistKeys) === -1) {
+        el.parentNode.removeChild(el)
+
+        continue
+      }
+
+      var attributeList = $.map(el.attributes, function (el) { return el })
+      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])
+
+      for (var j = 0, len2 = attributeList.length; j < len2; j++) {
+        if (!allowedAttribute(attributeList[j], whitelistedAttributes)) {
+          el.removeAttribute(attributeList[j].nodeName)
+        }
+      }
+    }
+
+    return createdDocument.body.innerHTML
+  }
+
   // TOOLTIP PUBLIC CLASS DEFINITION
   // ===============================
 
@@ -1274,7 +1441,7 @@  if (typeof jQuery === 'undefined') {
     this.init('tooltip', element, options)
   }
 
-  Tooltip.VERSION  = '3.3.6'
+  Tooltip.VERSION  = '3.4.1'
 
   Tooltip.TRANSITION_DURATION = 150
 
@@ -1291,7 +1458,10 @@  if (typeof jQuery === 'undefined') {
     viewport: {
       selector: 'body',
       padding: 0
-    }
+    },
+    sanitize : true,
+    sanitizeFn : null,
+    whiteList : DefaultWhitelist
   }
 
   Tooltip.prototype.init = function (type, element, options) {
@@ -1299,7 +1469,7 @@  if (typeof jQuery === 'undefined') {
     this.type      = type
     this.$element  = $(element)
     this.options   = this.getOptions(options)
-    this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
+    this.$viewport = this.options.viewport && $(document).find($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
     this.inState   = { click: false, hover: false, focus: false }
 
     if (this.$element[0] instanceof document.constructor && !this.options.selector) {
@@ -1332,7 +1502,15 @@  if (typeof jQuery === 'undefined') {
   }
 
   Tooltip.prototype.getOptions = function (options) {
-    options = $.extend({}, this.getDefaults(), this.$element.data(), options)
+    var dataAttributes = this.$element.data()
+
+    for (var dataAttr in dataAttributes) {
+      if (dataAttributes.hasOwnProperty(dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {
+        delete dataAttributes[dataAttr]
+      }
+    }
+
+    options = $.extend({}, this.getDefaults(), dataAttributes, options)
 
     if (options.delay && typeof options.delay == 'number') {
       options.delay = {
@@ -1341,6 +1519,10 @@  if (typeof jQuery === 'undefined') {
       }
     }
 
+    if (options.sanitize) {
+      options.template = sanitizeHtml(options.template, options.whiteList, options.sanitizeFn)
+    }
+
     return options
   }
 
@@ -1452,7 +1634,7 @@  if (typeof jQuery === 'undefined') {
         .addClass(placement)
         .data('bs.' + this.type, this)
 
-      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
+      this.options.container ? $tip.appendTo($(document).find(this.options.container)) : $tip.insertAfter(this.$element)
       this.$element.trigger('inserted.bs.' + this.type)
 
       var pos          = this.getPosition()
@@ -1554,7 +1736,16 @@  if (typeof jQuery === 'undefined') {
     var $tip  = this.tip()
     var title = this.getTitle()
 
-    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
+    if (this.options.html) {
+      if (this.options.sanitize) {
+        title = sanitizeHtml(title, this.options.whiteList, this.options.sanitizeFn)
+      }
+
+      $tip.find('.tooltip-inner').html(title)
+    } else {
+      $tip.find('.tooltip-inner').text(title)
+    }
+
     $tip.removeClass('fade in top bottom left right')
   }
 
@@ -1565,9 +1756,11 @@  if (typeof jQuery === 'undefined') {
 
     function complete() {
       if (that.hoverState != 'in') $tip.detach()
-      that.$element
-        .removeAttr('aria-describedby')
-        .trigger('hidden.bs.' + that.type)
+      if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
+        that.$element
+          .removeAttr('aria-describedby')
+          .trigger('hidden.bs.' + that.type)
+      }
       callback && callback()
     }
 
@@ -1610,7 +1803,10 @@  if (typeof jQuery === 'undefined') {
       // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
       elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
     }
-    var elOffset  = isBody ? { top: 0, left: 0 } : $element.offset()
+    var isSvg = window.SVGElement && el instanceof window.SVGElement
+    // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
+    // See https://github.com/twbs/bootstrap/issues/20280
+    var elOffset  = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
     var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
     var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
 
@@ -1726,9 +1922,13 @@  if (typeof jQuery === 'undefined') {
       that.$tip = null
       that.$arrow = null
       that.$viewport = null
+      that.$element = null
     })
   }
 
+  Tooltip.prototype.sanitizeHtml = function (unsafeHtml) {
+    return sanitizeHtml(unsafeHtml, this.options.whiteList, this.options.sanitizeFn)
+  }
 
   // TOOLTIP PLUGIN DEFINITION
   // =========================
@@ -1762,10 +1962,10 @@  if (typeof jQuery === 'undefined') {
 }(jQuery);
 
 /* ========================================================================
- * Bootstrap: popover.js v3.3.6
- * http://getbootstrap.com/javascript/#popovers
+ * Bootstrap: popover.js v3.4.1
+ * https://getbootstrap.com/docs/3.4/javascript/#popovers
  * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
+ * Copyright 2011-2019 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  * ======================================================================== */
 
@@ -1782,7 +1982,7 @@  if (typeof jQuery === 'undefined') {
 
   if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
 
-  Popover.VERSION  = '3.3.6'
+  Popover.VERSION  = '3.4.1'
 
   Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
     placement: 'right',
@@ -1808,10 +2008,25 @@  if (typeof jQuery === 'undefined') {
     var title   = this.getTitle()
     var content = this.getContent()
 
-    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
-    $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
-      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
-    ](content)
+    if (this.options.html) {
+      var typeContent = typeof content
+
+      if (this.options.sanitize) {
+        title = this.sanitizeHtml(title)
+
+        if (typeContent === 'string') {
+          content = this.sanitizeHtml(content)
+        }
+      }
+
+      $tip.find('.popover-title').html(title)
+      $tip.find('.popover-content').children().detach().end()[
+        typeContent === 'string' ? 'html' : 'append'
+      ](content)
+    } else {
+      $tip.find('.popover-title').text(title)
+      $tip.find('.popover-content').children().detach().end().text(content)
+    }
 
     $tip.removeClass('fade top bottom left right in')
 
@@ -1830,8 +2045,8 @@  if (typeof jQuery === 'undefined') {
 
     return $e.attr('data-content')
       || (typeof o.content == 'function' ?
-            o.content.call($e[0]) :
-            o.content)
+        o.content.call($e[0]) :
+        o.content)
   }
 
   Popover.prototype.arrow = function () {
@@ -1871,10 +2086,10 @@  if (typeof jQuery === 'undefined') {
 }(jQuery);
 
 /* ========================================================================
- * Bootstrap: scrollspy.js v3.3.6
- * http://getbootstrap.com/javascript/#scrollspy
+ * Bootstrap: scrollspy.js v3.4.1
+ * https://getbootstrap.com/docs/3.4/javascript/#scrollspy
  * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
+ * Copyright 2011-2019 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  * ======================================================================== */
 
@@ -1900,7 +2115,7 @@  if (typeof jQuery === 'undefined') {
     this.process()
   }
 
-  ScrollSpy.VERSION  = '3.3.6'
+  ScrollSpy.VERSION  = '3.4.1'
 
   ScrollSpy.DEFAULTS = {
     offset: 10
@@ -2044,10 +2259,10 @@  if (typeof jQuery === 'undefined') {
 }(jQuery);
 
 /* ========================================================================
- * Bootstrap: tab.js v3.3.6
- * http://getbootstrap.com/javascript/#tabs
+ * Bootstrap: tab.js v3.4.1
+ * https://getbootstrap.com/docs/3.4/javascript/#tabs
  * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
+ * Copyright 2011-2019 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  * ======================================================================== */
 
@@ -2064,7 +2279,7 @@  if (typeof jQuery === 'undefined') {
     // jscs:enable requireDollarBeforejQueryAssignment
   }
 
-  Tab.VERSION = '3.3.6'
+  Tab.VERSION = '3.4.1'
 
   Tab.TRANSITION_DURATION = 150
 
@@ -2093,7 +2308,7 @@  if (typeof jQuery === 'undefined') {
 
     if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
 
-    var $target = $(selector)
+    var $target = $(document).find(selector)
 
     this.activate($this.closest('li'), $ul)
     this.activate($target, $target.parent(), function () {
@@ -2118,15 +2333,15 @@  if (typeof jQuery === 'undefined') {
       $active
         .removeClass('active')
         .find('> .dropdown-menu > .active')
-          .removeClass('active')
+        .removeClass('active')
         .end()
         .find('[data-toggle="tab"]')
-          .attr('aria-expanded', false)
+        .attr('aria-expanded', false)
 
       element
         .addClass('active')
         .find('[data-toggle="tab"]')
-          .attr('aria-expanded', true)
+        .attr('aria-expanded', true)
 
       if (transition) {
         element[0].offsetWidth // reflow for transition
@@ -2138,10 +2353,10 @@  if (typeof jQuery === 'undefined') {
       if (element.parent('.dropdown-menu').length) {
         element
           .closest('li.dropdown')
-            .addClass('active')
+          .addClass('active')
           .end()
           .find('[data-toggle="tab"]')
-            .attr('aria-expanded', true)
+          .attr('aria-expanded', true)
       }
 
       callback && callback()
@@ -2200,10 +2415,10 @@  if (typeof jQuery === 'undefined') {
 }(jQuery);
 
 /* ========================================================================
- * Bootstrap: affix.js v3.3.6
- * http://getbootstrap.com/javascript/#affix
+ * Bootstrap: affix.js v3.4.1
+ * https://getbootstrap.com/docs/3.4/javascript/#affix
  * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
+ * Copyright 2011-2019 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  * ======================================================================== */
 
@@ -2217,7 +2432,9 @@  if (typeof jQuery === 'undefined') {
   var Affix = function (element, options) {
     this.options = $.extend({}, Affix.DEFAULTS, options)
 
-    this.$target = $(this.options.target)
+    var target = this.options.target === Affix.DEFAULTS.target ? $(this.options.target) : $(document).find(this.options.target)
+
+    this.$target = target
       .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
       .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))
 
@@ -2229,7 +2446,7 @@  if (typeof jQuery === 'undefined') {
     this.checkPosition()
   }
 
-  Affix.VERSION  = '3.3.6'
+  Affix.VERSION  = '3.4.1'
 
   Affix.RESET    = 'affix affix-top affix-bottom'
 
diff --git a/lib/toaster/toastergui/static/js/bootstrap-3.4.1.min.js b/lib/toaster/toastergui/static/js/bootstrap-3.4.1.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..eb0a8b410f59eb8abcd21e588f1a7b718db3eebd
GIT binary patch
literal 39680
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
B&G`TT

literal 0
HcmV?d00001

diff --git a/lib/toaster/toastergui/static/js/bootstrap.min.js b/lib/toaster/toastergui/static/js/bootstrap.min.js
deleted file mode 100644
index 2446398cfe6177172771488ec9bbef5429050afd..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 37049
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
X12l9U@Q92=*7GQe1K@g9>*W6dNOSnh

diff --git a/lib/toaster/toastergui/templates/base.html b/lib/toaster/toastergui/templates/base.html
index 709573dd..e8600f3e 100644
--- a/lib/toaster/toastergui/templates/base.html
+++ b/lib/toaster/toastergui/templates/base.html
@@ -18,7 +18,7 @@ 
     </script>
     <script src="{% static 'js/jquery.cookie.js' %}">
     </script>
-    <script src="{% static 'js/bootstrap.min.js' %}">
+    <script src="{% static 'js/bootstrap-3.4.1.min.js' %}">
     </script>
     <script src="{% static 'js/typeahead.jquery.js' %}">
     </script>
diff --git a/lib/toaster/toastergui/templates/base_specific.html b/lib/toaster/toastergui/templates/base_specific.html
index e377cadd..425f7ed7 100644
--- a/lib/toaster/toastergui/templates/base_specific.html
+++ b/lib/toaster/toastergui/templates/base_specific.html
@@ -14,11 +14,11 @@ 
 
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
-    <script src="{% static 'js/jquery-2.0.3.min.js' %}">
+    <script src="{% static 'js/jquery-3.7.1.min.js' %}">
     </script>
     <script src="{% static 'js/jquery.cookie.js' %}">
     </script>
-    <script src="{% static 'js/bootstrap.min.js' %}">
+    <script src="{% static 'js/bootstrap-3.4.1.min.js' %}">
     </script>
     <script src="{% static 'js/typeahead.jquery.js' %}">
     </script>
diff --git a/lib/toaster/toastergui/templates/js-unit-tests.html b/lib/toaster/toastergui/templates/js-unit-tests.html
index ca248962..41553c4f 100644
--- a/lib/toaster/toastergui/templates/js-unit-tests.html
+++ b/lib/toaster/toastergui/templates/js-unit-tests.html
@@ -11,7 +11,7 @@ 
 <script src="{% static 'js/layerDepsModal.js' %}"></script>
 <script src="{% static 'js/projectpage.js' %}"></script>
 
-<script src="{% static 'js/bootstrap.min.js' %}"></script>
+<script src="{% static 'js/bootstrap-3.4.1.min.js' %}"></script>
 <script src="{% static 'js/filtersnippet.js' %}"></script>
 <script src="{% static 'js/importlayer.js' %}"></script>
 <script src="{% static 'js/highlight.pack.js' %}"></script>