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