#252 UI tweaks
Merged 2 years ago by kparal. Opened 2 years ago by lbrabec.

@@ -150,18 +150,27 @@ 

      return updates

  

  

- def get_current_milestone():

-     current_milestone = Milestone.query.filter_by(current=True).first()

-     # if no current release is set, just grab one

+ def get_current_milestone(fallback_active=True):

+     """Get the milestone marked as current.

+ 

+     If there's (incorrectly) more than one, return the first one. If there is no current milestone

+     and ``fallback_active`` is true, return the first active milestone.

+ 

+     In all other cases, raise RuntimeError.

+     """

+     current_milestone = Milestone.query.filter_by(current=True).order_by(Milestone.name).first()

+     if not current_milestone and fallback_active:

+         current_milestone = Milestone.query.filter_by(active=True).order_by(Milestone.name).first()

      if not current_milestone:

-         current_milestone = Milestone.query.first()

+         msg = "Can't determine the current milestone. Database is not set up correctly."

+         app.logger.error(msg)

+         raise RuntimeError(msg)

      return current_milestone

  

  

  def get_milestone_info(milestone):

      return {'number': milestone.release.number,

              'phase': milestone.version.title(),

-             'criteria_url': 'http://fedoraproject.org/wiki/Fedora_%d_%s_Release_Criteria' % (milestone.release.number, milestone.version.title()),

              'last_updated': milestone.last_bug_sync.strftime('%Y-%m-%d %H:%M:%S UTC') if milestone.last_bug_sync else None,

              'blocker_tracker': milestone.blocker_tracker,

              'fe_tracker': milestone.fe_tracker
@@ -265,8 +274,8 @@ 

  @main.route('/')

  def index():

      if app.debug:

-         app.logger.debug('rendering index')

-     return render_template('index.html', title='Fedora Blocker Bugs')

+         app.logger.debug('rendering index (i.e. the current milestone)')

+     return display_current()

  

  

  @main.route('/<int:num>/<release_name>')
@@ -349,6 +358,7 @@ 

      return render_template('update_list.html',

                             updates=updates,

                             milestone=milestone,

+                            info=milestone_info,

                             title="Fedora %s %s Blocker Bug Updates" % (milestone_info['number'],

                                                                         milestone_info['phase']))

  
@@ -383,7 +393,7 @@ 

          abort(404)

      milestone_info = get_milestone_info(milestone)

      return render_template('milestone_info.html', info=milestone_info,

-                            title="Fedora %s %s Blocker Bug Updates" % (milestone_info['number'], milestone_info['phase']),

+                            title="Fedora %s %s Blocker Bug Info" % (milestone_info['number'], milestone_info['phase']),

                             bz_url=app.config['BUGZILLA_URL'])

  

  

@@ -4,13 +4,17 @@ 

    overflow-y: scroll; }

  

  body {

-   margin-bottom: 200px;

    background-color: #fff;

-   font-size: 0.9rem; }

+   font-size: 0.9rem;

+   display: flex;

+   min-height: 100vh;

+   flex-direction: column;

+   justify-content: flex-start;

+ }

  

  .masthead {

-   padding-bottom: 0;

-   padding-top: 0; }

+   border-bottom: 1px solid #ccc;

+   box-shadow: 0 0 10px 2px #ddd; }

  

  .fedora-preheader {

    box-sizing: content-box;
@@ -61,6 +65,33 @@ 

  #main-nav {

    padding-top: 2em; }

  

+ @media only screen and (min-width: 580px) {

+   .navbar-toggler-icon {

+     background-image: none !important;

+     width: auto;

+     padding-top: 0.2em;

+   }

+ 

+   .navbar-toggler-icon::after {

+     content: "Select milestone";

+     font-size: 0.75em;

+   }

+ }

+ 

+ @media only screen and (max-width: 991px) {

+   .vertical-align-start {

+     display: flex;

+     align-items: start;

+   }

+ }

+ 

+ @media only screen and (min-width: 992px) {

+   .vertical-align-center-lg {

+     display: flex;

+     align-items: center;

+   }

+ }

+ 

  #secondary-nav {

    padding-top: 0.75em;

    padding-bottom: 1.5em; }
@@ -101,6 +132,24 @@ 

  .qtip-default, .qtip-titlebar {

    background-color: white; }

  

+ table {

+   border-collapse: separate;

+   border-spacing: 0px;

+ }

+ 

+ th:first-of-type {

+   border-top-left-radius: 8px;

+ }

+ th:last-of-type {

+   border-top-right-radius: 8px;

+ }

+ tr:last-of-type td:first-of-type {

+   border-bottom-left-radius: 8px;

+ }

+ tr:last-of-type td:last-of-type {

+   border-bottom-right-radius: 8px;

+ }

+ 

  .table th, .table td {

    padding: 0.25rem; }

  
@@ -109,14 +158,19 @@ 

    width: 100%; }

  

  .footer {

-   position: absolute;

    display: flex;

    align-items: center;

    justify-content: center;

-   bottom: 0;

    width: 100%;

-   height: 100px;

-   vertical-align: middle; }

+   vertical-align: middle;

+   padding-top: 2em;

+   padding-bottom: 2em;

+   margin-top: auto;

+ }

+ 

+ .footer .standout {

+   color: #17a2b8;

+ }

  

  .fedora-prefooter {

    color: #818a91; }
@@ -164,14 +218,6 @@ 

  .no-padding {

    padding: 0; }

  

- @media (max-width: 991px) {

-   #navbarNavDropdown {

-     background-color: #ddd; } }

- @media (min-width: 992px) {

-   #height-fix {

-     height: 40px; } }

- 

- 

  thead th.super-narrow {

    width: 2% !important;

  }
@@ -192,5 +238,3 @@ 

    font-size: 0.9em;

    font-weight: inherit;

  }

- 

- /*# sourceMappingURL=app-bootstrap.css.map */

@@ -0,0 +1,37 @@ 

+ /*!

+  *  Hack v2.020 - https://sourcefoundry.org/hack/

+  *  Licenses - Fonts: Hack Open Font License + Bitstream Vera license, CSS: MIT License

+  */

+ /* FONT PATHS

+  * -------------------------- */

+ @font-face {

+   font-family: 'Hack';

+   src: url('hack/eot/hack-regular-webfont.eot?v=2.020');

+   src: url('hack/eot/hack-regular-webfont.eot?#iefix&v=2.020') format('embedded-opentype'), url('hack/woff2/hack-regular-webfont.woff2?v=2.020') format('woff2'), url('hack/woff/hack-regular-webfont.woff?v=2.020') format('woff'), url('hack/web-ttf/hack-regular-webfont.ttf?v=2.020') format('truetype');

+   font-weight: 400;

+   font-style: normal;

+ }

+ 

+ @font-face {

+   font-family: 'Hack';

+   src: url('hack/eot/hack-bold-webfont.eot?v=2.020');

+   src: url('hack/eot/hack-bold-webfont.eot?#iefix&v=2.020') format('embedded-opentype'), url('hack/woff2/hack-bold-webfont.woff2?v=2.020') format('woff2'), url('hack/woff/hack-bold-webfont.woff?v=2.020') format('woff'), url('hack/web-ttf/hack-bold-webfont.ttf?v=2.020') format('truetype');

+   font-weight: 700;

+   font-style: normal;

+ }

+ 

+ @font-face {

+   font-family: 'Hack';

+   src: url('hack/eot/hack-italic-webfont.eot?v=2.020');

+   src: url('hack/eot/hack-italic-webfont.eot?#iefix&v=2.020') format('embedded-opentype'), url('hack/woff2/hack-italic-webfont.woff2?v=2.020') format('woff2'), url('hack/woff/hack-italic-webfont.woff?v=2.020') format('woff'), url('hack/web-ttf/hack-italic-webfont.ttf?v=2.020') format('truetype');

+   font-weight: 400;

+   font-style: italic;

+ }

+ 

+ @font-face {

+   font-family: 'Hack';

+   src: url('hack/eot/hack-bolditalic-webfont.eot?v=2.020');

+   src: url('hack/eot/hack-bolditalic-webfont.eot?#iefix&v=2.020') format('embedded-opentype'), url('hack/woff2/hack-bolditalic-webfont.woff2?v=2.020') format('woff2'), url('hack/woff/hack-bolditalic-webfont.woff?v=2.020') format('woff'), url('hack/web-ttf/hack-bolditalic-webfont.ttf?v=2.020') format('truetype');

+   font-weight: 700;

+   font-style: italic;

+ }

@@ -0,0 +1,101 @@ 

+ /* open-sans-300 - latin_latin-ext */

+ @font-face {

+   font-family: 'Open Sans';

+   font-style: normal;

+   font-weight: 300;

+   src: url('open-sans/open-sans-v13-latin_latin-ext-300.eot'); /* IE9 Compat Modes */

+   src: local('Open Sans Light'), local('OpenSans-Light'),

+        url('open-sans/open-sans-v13-latin_latin-ext-300.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */

+        url('open-sans/open-sans-v13-latin_latin-ext-300.woff2') format('woff2'), /* Super Modern Browsers */

+        url('open-sans/open-sans-v13-latin_latin-ext-300.woff') format('woff'), /* Modern Browsers */

+        url('open-sans/open-sans-v13-latin_latin-ext-300.ttf') format('truetype'), /* Safari, Android, iOS */

+        url('open-sans/open-sans-v13-latin_latin-ext-300.svg#OpenSans') format('svg'); /* Legacy iOS */

+ }

+ 

+ /* open-sans-300italic - latin_latin-ext */

+ @font-face {

+   font-family: 'Open Sans';

+   font-style: italic;

+   font-weight: 300;

+   src: url('open-sans/open-sans-v13-latin_latin-ext-300italic.eot'); /* IE9 Compat Modes */

+   src: local('Open Sans Light Italic'), local('OpenSansLight-Italic'),

+        url('open-sans/open-sans-v13-latin_latin-ext-300italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */

+        url('open-sans/open-sans-v13-latin_latin-ext-300italic.woff2') format('woff2'), /* Super Modern Browsers */

+        url('open-sans/open-sans-v13-latin_latin-ext-300italic.woff') format('woff'), /* Modern Browsers */

+        url('open-sans/open-sans-v13-latin_latin-ext-300italic.ttf') format('truetype'), /* Safari, Android, iOS */

+        url('open-sans/open-sans-v13-latin_latin-ext-300italic.svg#OpenSans') format('svg'); /* Legacy iOS */

+ }

+ 

+ /* open-sans-regular - latin_latin-ext */

+ @font-face {

+   font-family: 'Open Sans';

+   font-style: normal;

+   font-weight: 400;

+   src: url('open-sans/open-sans-v13-latin_latin-ext-regular.eot'); /* IE9 Compat Modes */

+   src: local('Open Sans'), local('OpenSans'),

+        url('open-sans/open-sans-v13-latin_latin-ext-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */

+        url('open-sans/open-sans-v13-latin_latin-ext-regular.woff2') format('woff2'), /* Super Modern Browsers */

+        url('open-sans/open-sans-v13-latin_latin-ext-regular.woff') format('woff'), /* Modern Browsers */

+        url('open-sans/open-sans-v13-latin_latin-ext-regular.ttf') format('truetype'), /* Safari, Android, iOS */

+        url('open-sans/open-sans-v13-latin_latin-ext-regular.svg#OpenSans') format('svg'); /* Legacy iOS */

+ }

+ 

+ /* open-sans-italic - latin_latin-ext */

+ @font-face {

+   font-family: 'Open Sans';

+   font-style: italic;

+   font-weight: 400;

+   src: url('open-sans/open-sans-v13-latin_latin-ext-italic.eot'); /* IE9 Compat Modes */

+   src: local('Open Sans Italic'), local('OpenSans-Italic'),

+        url('open-sans/open-sans-v13-latin_latin-ext-italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */

+        url('open-sans/open-sans-v13-latin_latin-ext-italic.woff2') format('woff2'), /* Super Modern Browsers */

+        url('open-sans/open-sans-v13-latin_latin-ext-italic.woff') format('woff'), /* Modern Browsers */

+        url('open-sans/open-sans-v13-latin_latin-ext-italic.ttf') format('truetype'), /* Safari, Android, iOS */

+        url('open-sans/open-sans-v13-latin_latin-ext-italic.svg#OpenSans') format('svg'); /* Legacy iOS */

+ }

+ 

+ @font-face {

+   font-family: 'Open Sans';

+   font-style: normal;

+   font-weight: 600;

+   src: local('Open Sans Semibold'), local('OpenSans-Semibold'),

+        url('open-sans/OpenSans-Semibold.woff2') format('woff2'),

+        url('open-sans/OpenSans-Semibold.woff') format('woff'),

+ }

+ 

+ @font-face {

+   font-family: 'Open Sans';

+   font-style: italic;

+   font-weight: 600;

+   src: local('Open Sans Semibold Italic'), local('OpenSans-SemiboldItalic'),

+        url('open-sans/OpenSans-SemiboldItalic.woff2') format('woff2'),

+        url('open-sans/OpenSans-SemiboldItalic.woff') format('woff'),

+ }

+ 

+ /* open-sans-700 - latin_latin-ext */

+ @font-face {

+   font-family: 'Open Sans';

+   font-style: normal;

+   font-weight: 700;

+   src: url('open-sans/open-sans-v13-latin_latin-ext-700.eot'); /* IE9 Compat Modes */

+   src: local('Open Sans Bold'), local('OpenSans-Bold'),

+        url('open-sans/open-sans-v13-latin_latin-ext-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */

+        url('open-sans/open-sans-v13-latin_latin-ext-700.woff2') format('woff2'), /* Super Modern Browsers */

+        url('open-sans/open-sans-v13-latin_latin-ext-700.woff') format('woff'), /* Modern Browsers */

+        url('open-sans/open-sans-v13-latin_latin-ext-700.ttf') format('truetype'), /* Safari, Android, iOS */

+        url('open-sans/open-sans-v13-latin_latin-ext-700.svg#OpenSans') format('svg'); /* Legacy iOS */

+ }

+ 

+ /* open-sans-700italic - latin_latin-ext */

+ @font-face {

+   font-family: 'Open Sans';

+   font-style: italic;

+   font-weight: 700;

+   src: url('open-sans/open-sans-v13-latin_latin-ext-700italic.eot'); /* IE9 Compat Modes */

+   src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'),

+        url('open-sans/open-sans-v13-latin_latin-ext-700italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */

+        url('open-sans/open-sans-v13-latin_latin-ext-700italic.woff2') format('woff2'), /* Super Modern Browsers */

+        url('open-sans/open-sans-v13-latin_latin-ext-700italic.woff') format('woff'), /* Modern Browsers */

+        url('open-sans/open-sans-v13-latin_latin-ext-700italic.ttf') format('truetype'), /* Safari, Android, iOS */

+        url('open-sans/open-sans-v13-latin_latin-ext-700italic.svg#OpenSans') format('svg'); /* Legacy iOS */

+ }

blockerbugs/static/css/fonts/fontawesome-5.15.3/LICENSE.txt blockerbugs/static/css/fontawesome-5.15.3/LICENSE.txt
file renamed
file was moved with no change to the file
blockerbugs/static/css/fonts/fontawesome-5.15.3/css/all.css blockerbugs/static/css/fontawesome-5.15.3/css/all.css
file renamed
file was moved with no change to the file
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-brands-400.eot blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-brands-400.eot
file renamed
file was moved with no change to the file
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-brands-400.svg blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-brands-400.svg
file renamed
file was moved with no change to the file
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-brands-400.ttf blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-brands-400.ttf
file renamed
file was moved with no change to the file
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-brands-400.woff blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-brands-400.woff
file renamed
file was moved with no change to the file
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-brands-400.woff2 blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-brands-400.woff2
file renamed
file was moved with no change to the file
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-regular-400.eot blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-regular-400.eot
file renamed
file was moved with no change to the file
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-regular-400.svg blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-regular-400.svg
file renamed
file was moved with no change to the file
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-regular-400.ttf blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-regular-400.ttf
file renamed
file was moved with no change to the file
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-regular-400.woff blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-regular-400.woff
file renamed
file was moved with no change to the file
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-regular-400.woff2 blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-regular-400.woff2
file renamed
file was moved with no change to the file
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-solid-900.eot blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-solid-900.eot
file renamed
file was moved with no change to the file
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-solid-900.svg blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-solid-900.svg
file renamed
file was moved with no change to the file
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-solid-900.ttf blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-solid-900.ttf
file renamed
file was moved with no change to the file
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-solid-900.woff blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-solid-900.woff
file renamed
file was moved with no change to the file
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-solid-900.woff2 blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-solid-900.woff2
file renamed
file was moved with no change to the file
@@ -4,4 +4,3 @@ 

    * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)

    */

  !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery")):"function"==typeof define&&define.amd?define(["exports","jquery"],e):e((t=t||self).bootstrap={},t.jQuery)}(this,function(t,p){"use strict";function i(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function s(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t}function l(o){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},e=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(e=e.concat(Object.getOwnPropertySymbols(r).filter(function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable}))),e.forEach(function(t){var e,n,i;e=o,i=r[n=t],n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i})}return o}p=p&&p.hasOwnProperty("default")?p.default:p;var e="transitionend";function n(t){var e=this,n=!1;return p(this).one(m.TRANSITION_END,function(){n=!0}),setTimeout(function(){n||m.triggerTransitionEnd(e)},t),this}var m={TRANSITION_END:"bsTransitionEnd",getUID:function(t){for(;t+=~~(1e6*Math.random()),document.getElementById(t););return t},getSelectorFromElement:function(t){var e=t.getAttribute("data-target");if(!e||"#"===e){var n=t.getAttribute("href");e=n&&"#"!==n?n.trim():""}try{return document.querySelector(e)?e:null}catch(t){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var e=p(t).css("transition-duration"),n=p(t).css("transition-delay"),i=parseFloat(e),o=parseFloat(n);return i||o?(e=e.split(",")[0],n=n.split(",")[0],1e3*(parseFloat(e)+parseFloat(n))):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){p(t).trigger(e)},supportsTransitionEnd:function(){return Boolean(e)},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var o=n[i],r=e[i],s=r&&m.isElement(r)?"element":(a=r,{}.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase());if(!new RegExp(o).test(s))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+s+'" but expected type "'+o+'".')}var a},findShadowRoot:function(t){if(!document.documentElement.attachShadow)return null;if("function"!=typeof t.getRootNode)return t instanceof ShadowRoot?t:t.parentNode?m.findShadowRoot(t.parentNode):null;var e=t.getRootNode();return e instanceof ShadowRoot?e:null}};p.fn.emulateTransitionEnd=n,p.event.special[m.TRANSITION_END]={bindType:e,delegateType:e,handle:function(t){if(p(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var o="alert",r="bs.alert",a="."+r,c=p.fn[o],h={CLOSE:"close"+a,CLOSED:"closed"+a,CLICK_DATA_API:"click"+a+".data-api"},u="alert",f="fade",d="show",g=function(){function i(t){this._element=t}var t=i.prototype;return t.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},t.dispose=function(){p.removeData(this._element,r),this._element=null},t._getRootElement=function(t){var e=m.getSelectorFromElement(t),n=!1;return e&&(n=document.querySelector(e)),n||(n=p(t).closest("."+u)[0]),n},t._triggerCloseEvent=function(t){var e=p.Event(h.CLOSE);return p(t).trigger(e),e},t._removeElement=function(e){var n=this;if(p(e).removeClass(d),p(e).hasClass(f)){var t=m.getTransitionDurationFromElement(e);p(e).one(m.TRANSITION_END,function(t){return n._destroyElement(e,t)}).emulateTransitionEnd(t)}else this._destroyElement(e)},t._destroyElement=function(t){p(t).detach().trigger(h.CLOSED).remove()},i._jQueryInterface=function(n){return this.each(function(){var t=p(this),e=t.data(r);e||(e=new i(this),t.data(r,e)),"close"===n&&e[n](this)})},i._handleDismiss=function(e){return function(t){t&&t.preventDefault(),e.close(this)}},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}}]),i}();p(document).on(h.CLICK_DATA_API,'[data-dismiss="alert"]',g._handleDismiss(new g)),p.fn[o]=g._jQueryInterface,p.fn[o].Constructor=g,p.fn[o].noConflict=function(){return p.fn[o]=c,g._jQueryInterface};var _="button",v="bs.button",y="."+v,E=".data-api",b=p.fn[_],w="active",C="btn",T="focus",S='[data-toggle^="button"]',D='[data-toggle="buttons"]',I='input:not([type="hidden"])',A=".active",O=".btn",N={CLICK_DATA_API:"click"+y+E,FOCUS_BLUR_DATA_API:"focus"+y+E+" blur"+y+E},k=function(){function n(t){this._element=t}var t=n.prototype;return t.toggle=function(){var t=!0,e=!0,n=p(this._element).closest(D)[0];if(n){var i=this._element.querySelector(I);if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains(w))t=!1;else{var o=n.querySelector(A);o&&p(o).removeClass(w)}if(t){if(i.hasAttribute("disabled")||n.hasAttribute("disabled")||i.classList.contains("disabled")||n.classList.contains("disabled"))return;i.checked=!this._element.classList.contains(w),p(i).trigger("change")}i.focus(),e=!1}}e&&this._element.setAttribute("aria-pressed",!this._element.classList.contains(w)),t&&p(this._element).toggleClass(w)},t.dispose=function(){p.removeData(this._element,v),this._element=null},n._jQueryInterface=function(e){return this.each(function(){var t=p(this).data(v);t||(t=new n(this),p(this).data(v,t)),"toggle"===e&&t[e]()})},s(n,null,[{key:"VERSION",get:function(){return"4.3.1"}}]),n}();p(document).on(N.CLICK_DATA_API,S,function(t){t.preventDefault();var e=t.target;p(e).hasClass(C)||(e=p(e).closest(O)),k._jQueryInterface.call(p(e),"toggle")}).on(N.FOCUS_BLUR_DATA_API,S,function(t){var e=p(t.target).closest(O)[0];p(e).toggleClass(T,/^focus(in)?$/.test(t.type))}),p.fn[_]=k._jQueryInterface,p.fn[_].Constructor=k,p.fn[_].noConflict=function(){return p.fn[_]=b,k._jQueryInterface};var L="carousel",x="bs.carousel",P="."+x,H=".data-api",j=p.fn[L],R={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},F={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},M="next",W="prev",U="left",B="right",q={SLIDE:"slide"+P,SLID:"slid"+P,KEYDOWN:"keydown"+P,MOUSEENTER:"mouseenter"+P,MOUSELEAVE:"mouseleave"+P,TOUCHSTART:"touchstart"+P,TOUCHMOVE:"touchmove"+P,TOUCHEND:"touchend"+P,POINTERDOWN:"pointerdown"+P,POINTERUP:"pointerup"+P,DRAG_START:"dragstart"+P,LOAD_DATA_API:"load"+P+H,CLICK_DATA_API:"click"+P+H},K="carousel",Q="active",V="slide",Y="carousel-item-right",z="carousel-item-left",X="carousel-item-next",G="carousel-item-prev",$="pointer-event",J=".active",Z=".active.carousel-item",tt=".carousel-item",et=".carousel-item img",nt=".carousel-item-next, .carousel-item-prev",it=".carousel-indicators",ot="[data-slide], [data-slide-to]",rt='[data-ride="carousel"]',st={TOUCH:"touch",PEN:"pen"},at=function(){function r(t,e){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._element=t,this._indicatorsElement=this._element.querySelector(it),this._touchSupported="ontouchstart"in document.documentElement||0<navigator.maxTouchPoints,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var t=r.prototype;return t.next=function(){this._isSliding||this._slide(M)},t.nextWhenVisible=function(){!document.hidden&&p(this._element).is(":visible")&&"hidden"!==p(this._element).css("visibility")&&this.next()},t.prev=function(){this._isSliding||this._slide(W)},t.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(nt)&&(m.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},t.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},t.to=function(t){var e=this;this._activeElement=this._element.querySelector(Z);var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)p(this._element).one(q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=n<t?M:W;this._slide(i,this._items[t])}},t.dispose=function(){p(this._element).off(P),p.removeData(this._element,x),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},t._getConfig=function(t){return t=l({},R,t),m.typeCheckConfig(L,t,F),t},t._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;0<e&&this.prev(),e<0&&this.next()}},t._addEventListeners=function(){var e=this;this._config.keyboard&&p(this._element).on(q.KEYDOWN,function(t){return e._keydown(t)}),"hover"===this._config.pause&&p(this._element).on(q.MOUSEENTER,function(t){return e.pause(t)}).on(q.MOUSELEAVE,function(t){return e.cycle(t)}),this._config.touch&&this._addTouchEventListeners()},t._addTouchEventListeners=function(){var n=this;if(this._touchSupported){var e=function(t){n._pointerEvent&&st[t.originalEvent.pointerType.toUpperCase()]?n.touchStartX=t.originalEvent.clientX:n._pointerEvent||(n.touchStartX=t.originalEvent.touches[0].clientX)},i=function(t){n._pointerEvent&&st[t.originalEvent.pointerType.toUpperCase()]&&(n.touchDeltaX=t.originalEvent.clientX-n.touchStartX),n._handleSwipe(),"hover"===n._config.pause&&(n.pause(),n.touchTimeout&&clearTimeout(n.touchTimeout),n.touchTimeout=setTimeout(function(t){return n.cycle(t)},500+n._config.interval))};p(this._element.querySelectorAll(et)).on(q.DRAG_START,function(t){return t.preventDefault()}),this._pointerEvent?(p(this._element).on(q.POINTERDOWN,function(t){return e(t)}),p(this._element).on(q.POINTERUP,function(t){return i(t)}),this._element.classList.add($)):(p(this._element).on(q.TOUCHSTART,function(t){return e(t)}),p(this._element).on(q.TOUCHMOVE,function(t){var e;(e=t).originalEvent.touches&&1<e.originalEvent.touches.length?n.touchDeltaX=0:n.touchDeltaX=e.originalEvent.touches[0].clientX-n.touchStartX}),p(this._element).on(q.TOUCHEND,function(t){return i(t)}))}},t._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},t._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(tt)):[],this._items.indexOf(t)},t._getItemByDirection=function(t,e){var n=t===M,i=t===W,o=this._getItemIndex(e),r=this._items.length-1;if((i&&0===o||n&&o===r)&&!this._config.wrap)return e;var s=(o+(t===W?-1:1))%this._items.length;return-1===s?this._items[this._items.length-1]:this._items[s]},t._triggerSlideEvent=function(t,e){var n=this._getItemIndex(t),i=this._getItemIndex(this._element.querySelector(Z)),o=p.Event(q.SLIDE,{relatedTarget:t,direction:e,from:i,to:n});return p(this._element).trigger(o),o},t._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var e=[].slice.call(this._indicatorsElement.querySelectorAll(J));p(e).removeClass(Q);var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&p(n).addClass(Q)}},t._slide=function(t,e){var n,i,o,r=this,s=this._element.querySelector(Z),a=this._getItemIndex(s),l=e||s&&this._getItemByDirection(t,s),c=this._getItemIndex(l),h=Boolean(this._interval);if(o=t===M?(n=z,i=X,U):(n=Y,i=G,B),l&&p(l).hasClass(Q))this._isSliding=!1;else if(!this._triggerSlideEvent(l,o).isDefaultPrevented()&&s&&l){this._isSliding=!0,h&&this.pause(),this._setActiveIndicatorElement(l);var u=p.Event(q.SLID,{relatedTarget:l,direction:o,from:a,to:c});if(p(this._element).hasClass(V)){p(l).addClass(i),m.reflow(l),p(s).addClass(n),p(l).addClass(n);var f=parseInt(l.getAttribute("data-interval"),10);this._config.interval=f?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,f):this._config.defaultInterval||this._config.interval;var d=m.getTransitionDurationFromElement(s);p(s).one(m.TRANSITION_END,function(){p(l).removeClass(n+" "+i).addClass(Q),p(s).removeClass(Q+" "+i+" "+n),r._isSliding=!1,setTimeout(function(){return p(r._element).trigger(u)},0)}).emulateTransitionEnd(d)}else p(s).removeClass(Q),p(l).addClass(Q),this._isSliding=!1,p(this._element).trigger(u);h&&this.cycle()}},r._jQueryInterface=function(i){return this.each(function(){var t=p(this).data(x),e=l({},R,p(this).data());"object"==typeof i&&(e=l({},e,i));var n="string"==typeof i?i:e.slide;if(t||(t=new r(this,e),p(this).data(x,t)),"number"==typeof i)t.to(i);else if("string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}else e.interval&&e.ride&&(t.pause(),t.cycle())})},r._dataApiClickHandler=function(t){var e=m.getSelectorFromElement(this);if(e){var n=p(e)[0];if(n&&p(n).hasClass(K)){var i=l({},p(n).data(),p(this).data()),o=this.getAttribute("data-slide-to");o&&(i.interval=!1),r._jQueryInterface.call(p(n),i),o&&p(n).data(x).to(o),t.preventDefault()}}},s(r,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return R}}]),r}();p(document).on(q.CLICK_DATA_API,ot,at._dataApiClickHandler),p(window).on(q.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(rt)),e=0,n=t.length;e<n;e++){var i=p(t[e]);at._jQueryInterface.call(i,i.data())}}),p.fn[L]=at._jQueryInterface,p.fn[L].Constructor=at,p.fn[L].noConflict=function(){return p.fn[L]=j,at._jQueryInterface};var lt="collapse",ct="bs.collapse",ht="."+ct,ut=p.fn[lt],ft={toggle:!0,parent:""},dt={toggle:"boolean",parent:"(string|element)"},pt={SHOW:"show"+ht,SHOWN:"shown"+ht,HIDE:"hide"+ht,HIDDEN:"hidden"+ht,CLICK_DATA_API:"click"+ht+".data-api"},mt="show",gt="collapse",_t="collapsing",vt="collapsed",yt="width",Et="height",bt=".show, .collapsing",wt='[data-toggle="collapse"]',Ct=function(){function a(e,t){this._isTransitioning=!1,this._element=e,this._config=this._getConfig(t),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'));for(var n=[].slice.call(document.querySelectorAll(wt)),i=0,o=n.length;i<o;i++){var r=n[i],s=m.getSelectorFromElement(r),a=[].slice.call(document.querySelectorAll(s)).filter(function(t){return t===e});null!==s&&0<a.length&&(this._selector=s,this._triggerArray.push(r))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var t=a.prototype;return t.toggle=function(){p(this._element).hasClass(mt)?this.hide():this.show()},t.show=function(){var t,e,n=this;if(!this._isTransitioning&&!p(this._element).hasClass(mt)&&(this._parent&&0===(t=[].slice.call(this._parent.querySelectorAll(bt)).filter(function(t){return"string"==typeof n._config.parent?t.getAttribute("data-parent")===n._config.parent:t.classList.contains(gt)})).length&&(t=null),!(t&&(e=p(t).not(this._selector).data(ct))&&e._isTransitioning))){var i=p.Event(pt.SHOW);if(p(this._element).trigger(i),!i.isDefaultPrevented()){t&&(a._jQueryInterface.call(p(t).not(this._selector),"hide"),e||p(t).data(ct,null));var o=this._getDimension();p(this._element).removeClass(gt).addClass(_t),this._element.style[o]=0,this._triggerArray.length&&p(this._triggerArray).removeClass(vt).attr("aria-expanded",!0),this.setTransitioning(!0);var r="scroll"+(o[0].toUpperCase()+o.slice(1)),s=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,function(){p(n._element).removeClass(_t).addClass(gt).addClass(mt),n._element.style[o]="",n.setTransitioning(!1),p(n._element).trigger(pt.SHOWN)}).emulateTransitionEnd(s),this._element.style[o]=this._element[r]+"px"}}},t.hide=function(){var t=this;if(!this._isTransitioning&&p(this._element).hasClass(mt)){var e=p.Event(pt.HIDE);if(p(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",m.reflow(this._element),p(this._element).addClass(_t).removeClass(gt).removeClass(mt);var i=this._triggerArray.length;if(0<i)for(var o=0;o<i;o++){var r=this._triggerArray[o],s=m.getSelectorFromElement(r);if(null!==s)p([].slice.call(document.querySelectorAll(s))).hasClass(mt)||p(r).addClass(vt).attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[n]="";var a=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,function(){t.setTransitioning(!1),p(t._element).removeClass(_t).addClass(gt).trigger(pt.HIDDEN)}).emulateTransitionEnd(a)}}},t.setTransitioning=function(t){this._isTransitioning=t},t.dispose=function(){p.removeData(this._element,ct),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},t._getConfig=function(t){return(t=l({},ft,t)).toggle=Boolean(t.toggle),m.typeCheckConfig(lt,t,dt),t},t._getDimension=function(){return p(this._element).hasClass(yt)?yt:Et},t._getParent=function(){var t,n=this;m.isElement(this._config.parent)?(t=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(t=this._config.parent[0])):t=document.querySelector(this._config.parent);var e='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',i=[].slice.call(t.querySelectorAll(e));return p(i).each(function(t,e){n._addAriaAndCollapsedClass(a._getTargetFromElement(e),[e])}),t},t._addAriaAndCollapsedClass=function(t,e){var n=p(t).hasClass(mt);e.length&&p(e).toggleClass(vt,!n).attr("aria-expanded",n)},a._getTargetFromElement=function(t){var e=m.getSelectorFromElement(t);return e?document.querySelector(e):null},a._jQueryInterface=function(i){return this.each(function(){var t=p(this),e=t.data(ct),n=l({},ft,t.data(),"object"==typeof i&&i?i:{});if(!e&&n.toggle&&/show|hide/.test(i)&&(n.toggle=!1),e||(e=new a(this,n),t.data(ct,e)),"string"==typeof i){if("undefined"==typeof e[i])throw new TypeError('No method named "'+i+'"');e[i]()}})},s(a,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return ft}}]),a}();p(document).on(pt.CLICK_DATA_API,wt,function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var n=p(this),e=m.getSelectorFromElement(this),i=[].slice.call(document.querySelectorAll(e));p(i).each(function(){var t=p(this),e=t.data(ct)?"toggle":n.data();Ct._jQueryInterface.call(t,e)})}),p.fn[lt]=Ct._jQueryInterface,p.fn[lt].Constructor=Ct,p.fn[lt].noConflict=function(){return p.fn[lt]=ut,Ct._jQueryInterface};for(var Tt="undefined"!=typeof window&&"undefined"!=typeof document,St=["Edge","Trident","Firefox"],Dt=0,It=0;It<St.length;It+=1)if(Tt&&0<=navigator.userAgent.indexOf(St[It])){Dt=1;break}var At=Tt&&window.Promise?function(t){var e=!1;return function(){e||(e=!0,window.Promise.resolve().then(function(){e=!1,t()}))}}:function(t){var e=!1;return function(){e||(e=!0,setTimeout(function(){e=!1,t()},Dt))}};function Ot(t){return t&&"[object Function]"==={}.toString.call(t)}function Nt(t,e){if(1!==t.nodeType)return[];var n=t.ownerDocument.defaultView.getComputedStyle(t,null);return e?n[e]:n}function kt(t){return"HTML"===t.nodeName?t:t.parentNode||t.host}function Lt(t){if(!t)return document.body;switch(t.nodeName){case"HTML":case"BODY":return t.ownerDocument.body;case"#document":return t.body}var e=Nt(t),n=e.overflow,i=e.overflowX,o=e.overflowY;return/(auto|scroll|overlay)/.test(n+o+i)?t:Lt(kt(t))}var xt=Tt&&!(!window.MSInputMethodContext||!document.documentMode),Pt=Tt&&/MSIE 10/.test(navigator.userAgent);function Ht(t){return 11===t?xt:10===t?Pt:xt||Pt}function jt(t){if(!t)return document.documentElement;for(var e=Ht(10)?document.body:null,n=t.offsetParent||null;n===e&&t.nextElementSibling;)n=(t=t.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&"BODY"!==i&&"HTML"!==i?-1!==["TH","TD","TABLE"].indexOf(n.nodeName)&&"static"===Nt(n,"position")?jt(n):n:t?t.ownerDocument.documentElement:document.documentElement}function Rt(t){return null!==t.parentNode?Rt(t.parentNode):t}function Ft(t,e){if(!(t&&t.nodeType&&e&&e.nodeType))return document.documentElement;var n=t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING,i=n?t:e,o=n?e:t,r=document.createRange();r.setStart(i,0),r.setEnd(o,0);var s,a,l=r.commonAncestorContainer;if(t!==l&&e!==l||i.contains(o))return"BODY"===(a=(s=l).nodeName)||"HTML"!==a&&jt(s.firstElementChild)!==s?jt(l):l;var c=Rt(t);return c.host?Ft(c.host,e):Ft(t,Rt(e).host)}function Mt(t){var e="top"===(1<arguments.length&&void 0!==arguments[1]?arguments[1]:"top")?"scrollTop":"scrollLeft",n=t.nodeName;if("BODY"!==n&&"HTML"!==n)return t[e];var i=t.ownerDocument.documentElement;return(t.ownerDocument.scrollingElement||i)[e]}function Wt(t,e){var n="x"===e?"Left":"Top",i="Left"===n?"Right":"Bottom";return parseFloat(t["border"+n+"Width"],10)+parseFloat(t["border"+i+"Width"],10)}function Ut(t,e,n,i){return Math.max(e["offset"+t],e["scroll"+t],n["client"+t],n["offset"+t],n["scroll"+t],Ht(10)?parseInt(n["offset"+t])+parseInt(i["margin"+("Height"===t?"Top":"Left")])+parseInt(i["margin"+("Height"===t?"Bottom":"Right")]):0)}function Bt(t){var e=t.body,n=t.documentElement,i=Ht(10)&&getComputedStyle(n);return{height:Ut("Height",e,n,i),width:Ut("Width",e,n,i)}}var qt=function(){function i(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t}}(),Kt=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},Qt=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t};function Vt(t){return Qt({},t,{right:t.left+t.width,bottom:t.top+t.height})}function Yt(t){var e={};try{if(Ht(10)){e=t.getBoundingClientRect();var n=Mt(t,"top"),i=Mt(t,"left");e.top+=n,e.left+=i,e.bottom+=n,e.right+=i}else e=t.getBoundingClientRect()}catch(t){}var o={left:e.left,top:e.top,width:e.right-e.left,height:e.bottom-e.top},r="HTML"===t.nodeName?Bt(t.ownerDocument):{},s=r.width||t.clientWidth||o.right-o.left,a=r.height||t.clientHeight||o.bottom-o.top,l=t.offsetWidth-s,c=t.offsetHeight-a;if(l||c){var h=Nt(t);l-=Wt(h,"x"),c-=Wt(h,"y"),o.width-=l,o.height-=c}return Vt(o)}function zt(t,e){var n=2<arguments.length&&void 0!==arguments[2]&&arguments[2],i=Ht(10),o="HTML"===e.nodeName,r=Yt(t),s=Yt(e),a=Lt(t),l=Nt(e),c=parseFloat(l.borderTopWidth,10),h=parseFloat(l.borderLeftWidth,10);n&&o&&(s.top=Math.max(s.top,0),s.left=Math.max(s.left,0));var u=Vt({top:r.top-s.top-c,left:r.left-s.left-h,width:r.width,height:r.height});if(u.marginTop=0,u.marginLeft=0,!i&&o){var f=parseFloat(l.marginTop,10),d=parseFloat(l.marginLeft,10);u.top-=c-f,u.bottom-=c-f,u.left-=h-d,u.right-=h-d,u.marginTop=f,u.marginLeft=d}return(i&&!n?e.contains(a):e===a&&"BODY"!==a.nodeName)&&(u=function(t,e){var n=2<arguments.length&&void 0!==arguments[2]&&arguments[2],i=Mt(e,"top"),o=Mt(e,"left"),r=n?-1:1;return t.top+=i*r,t.bottom+=i*r,t.left+=o*r,t.right+=o*r,t}(u,e)),u}function Xt(t){if(!t||!t.parentElement||Ht())return document.documentElement;for(var e=t.parentElement;e&&"none"===Nt(e,"transform");)e=e.parentElement;return e||document.documentElement}function Gt(t,e,n,i){var o=4<arguments.length&&void 0!==arguments[4]&&arguments[4],r={top:0,left:0},s=o?Xt(t):Ft(t,e);if("viewport"===i)r=function(t){var e=1<arguments.length&&void 0!==arguments[1]&&arguments[1],n=t.ownerDocument.documentElement,i=zt(t,n),o=Math.max(n.clientWidth,window.innerWidth||0),r=Math.max(n.clientHeight,window.innerHeight||0),s=e?0:Mt(n),a=e?0:Mt(n,"left");return Vt({top:s-i.top+i.marginTop,left:a-i.left+i.marginLeft,width:o,height:r})}(s,o);else{var a=void 0;"scrollParent"===i?"BODY"===(a=Lt(kt(e))).nodeName&&(a=t.ownerDocument.documentElement):a="window"===i?t.ownerDocument.documentElement:i;var l=zt(a,s,o);if("HTML"!==a.nodeName||function t(e){var n=e.nodeName;if("BODY"===n||"HTML"===n)return!1;if("fixed"===Nt(e,"position"))return!0;var i=kt(e);return!!i&&t(i)}(s))r=l;else{var c=Bt(t.ownerDocument),h=c.height,u=c.width;r.top+=l.top-l.marginTop,r.bottom=h+l.top,r.left+=l.left-l.marginLeft,r.right=u+l.left}}var f="number"==typeof(n=n||0);return r.left+=f?n:n.left||0,r.top+=f?n:n.top||0,r.right-=f?n:n.right||0,r.bottom-=f?n:n.bottom||0,r}function $t(t,e,i,n,o){var r=5<arguments.length&&void 0!==arguments[5]?arguments[5]:0;if(-1===t.indexOf("auto"))return t;var s=Gt(i,n,r,o),a={top:{width:s.width,height:e.top-s.top},right:{width:s.right-e.right,height:s.height},bottom:{width:s.width,height:s.bottom-e.bottom},left:{width:e.left-s.left,height:s.height}},l=Object.keys(a).map(function(t){return Qt({key:t},a[t],{area:(e=a[t],e.width*e.height)});var e}).sort(function(t,e){return e.area-t.area}),c=l.filter(function(t){var e=t.width,n=t.height;return e>=i.clientWidth&&n>=i.clientHeight}),h=0<c.length?c[0].key:l[0].key,u=t.split("-")[1];return h+(u?"-"+u:"")}function Jt(t,e,n){var i=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return zt(n,i?Xt(e):Ft(e,n),i)}function Zt(t){var e=t.ownerDocument.defaultView.getComputedStyle(t),n=parseFloat(e.marginTop||0)+parseFloat(e.marginBottom||0),i=parseFloat(e.marginLeft||0)+parseFloat(e.marginRight||0);return{width:t.offsetWidth+i,height:t.offsetHeight+n}}function te(t){var e={left:"right",right:"left",bottom:"top",top:"bottom"};return t.replace(/left|right|bottom|top/g,function(t){return e[t]})}function ee(t,e,n){n=n.split("-")[0];var i=Zt(t),o={width:i.width,height:i.height},r=-1!==["right","left"].indexOf(n),s=r?"top":"left",a=r?"left":"top",l=r?"height":"width",c=r?"width":"height";return o[s]=e[s]+e[l]/2-i[l]/2,o[a]=n===a?e[a]-i[c]:e[te(a)],o}function ne(t,e){return Array.prototype.find?t.find(e):t.filter(e)[0]}function ie(t,n,e){return(void 0===e?t:t.slice(0,function(t,e,n){if(Array.prototype.findIndex)return t.findIndex(function(t){return t[e]===n});var i=ne(t,function(t){return t[e]===n});return t.indexOf(i)}(t,"name",e))).forEach(function(t){t.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var e=t.function||t.fn;t.enabled&&Ot(e)&&(n.offsets.popper=Vt(n.offsets.popper),n.offsets.reference=Vt(n.offsets.reference),n=e(n,t))}),n}function oe(t,n){return t.some(function(t){var e=t.name;return t.enabled&&e===n})}function re(t){for(var e=[!1,"ms","Webkit","Moz","O"],n=t.charAt(0).toUpperCase()+t.slice(1),i=0;i<e.length;i++){var o=e[i],r=o?""+o+n:t;if("undefined"!=typeof document.body.style[r])return r}return null}function se(t){var e=t.ownerDocument;return e?e.defaultView:window}function ae(t,e,n,i){n.updateBound=i,se(t).addEventListener("resize",n.updateBound,{passive:!0});var o=Lt(t);return function t(e,n,i,o){var r="BODY"===e.nodeName,s=r?e.ownerDocument.defaultView:e;s.addEventListener(n,i,{passive:!0}),r||t(Lt(s.parentNode),n,i,o),o.push(s)}(o,"scroll",n.updateBound,n.scrollParents),n.scrollElement=o,n.eventsEnabled=!0,n}function le(){var t,e;this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=(t=this.reference,e=this.state,se(t).removeEventListener("resize",e.updateBound),e.scrollParents.forEach(function(t){t.removeEventListener("scroll",e.updateBound)}),e.updateBound=null,e.scrollParents=[],e.scrollElement=null,e.eventsEnabled=!1,e))}function ce(t){return""!==t&&!isNaN(parseFloat(t))&&isFinite(t)}function he(n,i){Object.keys(i).forEach(function(t){var e="";-1!==["width","height","top","right","bottom","left"].indexOf(t)&&ce(i[t])&&(e="px"),n.style[t]=i[t]+e})}var ue=Tt&&/Firefox/i.test(navigator.userAgent);function fe(t,e,n){var i=ne(t,function(t){return t.name===e}),o=!!i&&t.some(function(t){return t.name===n&&t.enabled&&t.order<i.order});if(!o){var r="`"+e+"`",s="`"+n+"`";console.warn(s+" modifier is required by "+r+" modifier in order to work, be sure to include it before "+r+"!")}return o}var de=["auto-start","auto","auto-end","top-start","top","top-end","right-start","right","right-end","bottom-end","bottom","bottom-start","left-end","left","left-start"],pe=de.slice(3);function me(t){var e=1<arguments.length&&void 0!==arguments[1]&&arguments[1],n=pe.indexOf(t),i=pe.slice(n+1).concat(pe.slice(0,n));return e?i.reverse():i}var ge="flip",_e="clockwise",ve="counterclockwise";function ye(t,o,r,e){var s=[0,0],a=-1!==["right","left"].indexOf(e),n=t.split(/(\+|\-)/).map(function(t){return t.trim()}),i=n.indexOf(ne(n,function(t){return-1!==t.search(/,|\s/)}));n[i]&&-1===n[i].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var l=/\s*,\s*|\s+/,c=-1!==i?[n.slice(0,i).concat([n[i].split(l)[0]]),[n[i].split(l)[1]].concat(n.slice(i+1))]:[n];return(c=c.map(function(t,e){var n=(1===e?!a:a)?"height":"width",i=!1;return t.reduce(function(t,e){return""===t[t.length-1]&&-1!==["+","-"].indexOf(e)?(t[t.length-1]=e,i=!0,t):i?(t[t.length-1]+=e,i=!1,t):t.concat(e)},[]).map(function(t){return function(t,e,n,i){var o=t.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+o[1],s=o[2];if(!r)return t;if(0!==s.indexOf("%"))return"vh"!==s&&"vw"!==s?r:("vh"===s?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*r;var a=void 0;switch(s){case"%p":a=n;break;case"%":case"%r":default:a=i}return Vt(a)[e]/100*r}(t,n,o,r)})})).forEach(function(n,i){n.forEach(function(t,e){ce(t)&&(s[i]+=t*("-"===n[e-1]?-1:1))})}),s}var Ee={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(t){var e=t.placement,n=e.split("-")[0],i=e.split("-")[1];if(i){var o=t.offsets,r=o.reference,s=o.popper,a=-1!==["bottom","top"].indexOf(n),l=a?"left":"top",c=a?"width":"height",h={start:Kt({},l,r[l]),end:Kt({},l,r[l]+r[c]-s[c])};t.offsets.popper=Qt({},s,h[i])}return t}},offset:{order:200,enabled:!0,fn:function(t,e){var n=e.offset,i=t.placement,o=t.offsets,r=o.popper,s=o.reference,a=i.split("-")[0],l=void 0;return l=ce(+n)?[+n,0]:ye(n,r,s,a),"left"===a?(r.top+=l[0],r.left-=l[1]):"right"===a?(r.top+=l[0],r.left+=l[1]):"top"===a?(r.left+=l[0],r.top-=l[1]):"bottom"===a&&(r.left+=l[0],r.top+=l[1]),t.popper=r,t},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(t,i){var e=i.boundariesElement||jt(t.instance.popper);t.instance.reference===e&&(e=jt(e));var n=re("transform"),o=t.instance.popper.style,r=o.top,s=o.left,a=o[n];o.top="",o.left="",o[n]="";var l=Gt(t.instance.popper,t.instance.reference,i.padding,e,t.positionFixed);o.top=r,o.left=s,o[n]=a,i.boundaries=l;var c=i.priority,h=t.offsets.popper,u={primary:function(t){var e=h[t];return h[t]<l[t]&&!i.escapeWithReference&&(e=Math.max(h[t],l[t])),Kt({},t,e)},secondary:function(t){var e="right"===t?"left":"top",n=h[e];return h[t]>l[t]&&!i.escapeWithReference&&(n=Math.min(h[e],l[t]-("right"===t?h.width:h.height))),Kt({},e,n)}};return c.forEach(function(t){var e=-1!==["left","top"].indexOf(t)?"primary":"secondary";h=Qt({},h,u[e](t))}),t.offsets.popper=h,t},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(t){var e=t.offsets,n=e.popper,i=e.reference,o=t.placement.split("-")[0],r=Math.floor,s=-1!==["top","bottom"].indexOf(o),a=s?"right":"bottom",l=s?"left":"top",c=s?"width":"height";return n[a]<r(i[l])&&(t.offsets.popper[l]=r(i[l])-n[c]),n[l]>r(i[a])&&(t.offsets.popper[l]=r(i[a])),t}},arrow:{order:500,enabled:!0,fn:function(t,e){var n;if(!fe(t.instance.modifiers,"arrow","keepTogether"))return t;var i=e.element;if("string"==typeof i){if(!(i=t.instance.popper.querySelector(i)))return t}else if(!t.instance.popper.contains(i))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),t;var o=t.placement.split("-")[0],r=t.offsets,s=r.popper,a=r.reference,l=-1!==["left","right"].indexOf(o),c=l?"height":"width",h=l?"Top":"Left",u=h.toLowerCase(),f=l?"left":"top",d=l?"bottom":"right",p=Zt(i)[c];a[d]-p<s[u]&&(t.offsets.popper[u]-=s[u]-(a[d]-p)),a[u]+p>s[d]&&(t.offsets.popper[u]+=a[u]+p-s[d]),t.offsets.popper=Vt(t.offsets.popper);var m=a[u]+a[c]/2-p/2,g=Nt(t.instance.popper),_=parseFloat(g["margin"+h],10),v=parseFloat(g["border"+h+"Width"],10),y=m-t.offsets.popper[u]-_-v;return y=Math.max(Math.min(s[c]-p,y),0),t.arrowElement=i,t.offsets.arrow=(Kt(n={},u,Math.round(y)),Kt(n,f,""),n),t},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(p,m){if(oe(p.instance.modifiers,"inner"))return p;if(p.flipped&&p.placement===p.originalPlacement)return p;var g=Gt(p.instance.popper,p.instance.reference,m.padding,m.boundariesElement,p.positionFixed),_=p.placement.split("-")[0],v=te(_),y=p.placement.split("-")[1]||"",E=[];switch(m.behavior){case ge:E=[_,v];break;case _e:E=me(_);break;case ve:E=me(_,!0);break;default:E=m.behavior}return E.forEach(function(t,e){if(_!==t||E.length===e+1)return p;_=p.placement.split("-")[0],v=te(_);var n,i=p.offsets.popper,o=p.offsets.reference,r=Math.floor,s="left"===_&&r(i.right)>r(o.left)||"right"===_&&r(i.left)<r(o.right)||"top"===_&&r(i.bottom)>r(o.top)||"bottom"===_&&r(i.top)<r(o.bottom),a=r(i.left)<r(g.left),l=r(i.right)>r(g.right),c=r(i.top)<r(g.top),h=r(i.bottom)>r(g.bottom),u="left"===_&&a||"right"===_&&l||"top"===_&&c||"bottom"===_&&h,f=-1!==["top","bottom"].indexOf(_),d=!!m.flipVariations&&(f&&"start"===y&&a||f&&"end"===y&&l||!f&&"start"===y&&c||!f&&"end"===y&&h);(s||u||d)&&(p.flipped=!0,(s||u)&&(_=E[e+1]),d&&(y="end"===(n=y)?"start":"start"===n?"end":n),p.placement=_+(y?"-"+y:""),p.offsets.popper=Qt({},p.offsets.popper,ee(p.instance.popper,p.offsets.reference,p.placement)),p=ie(p.instance.modifiers,p,"flip"))}),p},behavior:"flip",padding:5,boundariesElement:"viewport"},inner:{order:700,enabled:!1,fn:function(t){var e=t.placement,n=e.split("-")[0],i=t.offsets,o=i.popper,r=i.reference,s=-1!==["left","right"].indexOf(n),a=-1===["top","left"].indexOf(n);return o[s?"left":"top"]=r[n]-(a?o[s?"width":"height"]:0),t.placement=te(e),t.offsets.popper=Vt(o),t}},hide:{order:800,enabled:!0,fn:function(t){if(!fe(t.instance.modifiers,"hide","preventOverflow"))return t;var e=t.offsets.reference,n=ne(t.instance.modifiers,function(t){return"preventOverflow"===t.name}).boundaries;if(e.bottom<n.top||e.left>n.right||e.top>n.bottom||e.right<n.left){if(!0===t.hide)return t;t.hide=!0,t.attributes["x-out-of-boundaries"]=""}else{if(!1===t.hide)return t;t.hide=!1,t.attributes["x-out-of-boundaries"]=!1}return t}},computeStyle:{order:850,enabled:!0,fn:function(t,e){var n=e.x,i=e.y,o=t.offsets.popper,r=ne(t.instance.modifiers,function(t){return"applyStyle"===t.name}).gpuAcceleration;void 0!==r&&console.warn("WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!");var s,a,l,c,h,u,f,d,p,m,g,_,v,y,E=void 0!==r?r:e.gpuAcceleration,b=jt(t.instance.popper),w=Yt(b),C={position:o.position},T=(s=t,a=window.devicePixelRatio<2||!ue,l=s.offsets,c=l.popper,h=l.reference,u=Math.round,f=Math.floor,d=function(t){return t},p=u(h.width),m=u(c.width),g=-1!==["left","right"].indexOf(s.placement),_=-1!==s.placement.indexOf("-"),y=a?u:d,{left:(v=a?g||_||p%2==m%2?u:f:d)(p%2==1&&m%2==1&&!_&&a?c.left-1:c.left),top:y(c.top),bottom:y(c.bottom),right:v(c.right)}),S="bottom"===n?"top":"bottom",D="right"===i?"left":"right",I=re("transform"),A=void 0,O=void 0;if(O="bottom"===S?"HTML"===b.nodeName?-b.clientHeight+T.bottom:-w.height+T.bottom:T.top,A="right"===D?"HTML"===b.nodeName?-b.clientWidth+T.right:-w.width+T.right:T.left,E&&I)C[I]="translate3d("+A+"px, "+O+"px, 0)",C[S]=0,C[D]=0,C.willChange="transform";else{var N="bottom"===S?-1:1,k="right"===D?-1:1;C[S]=O*N,C[D]=A*k,C.willChange=S+", "+D}var L={"x-placement":t.placement};return t.attributes=Qt({},L,t.attributes),t.styles=Qt({},C,t.styles),t.arrowStyles=Qt({},t.offsets.arrow,t.arrowStyles),t},gpuAcceleration:!0,x:"bottom",y:"right"},applyStyle:{order:900,enabled:!0,fn:function(t){var e,n;return he(t.instance.popper,t.styles),e=t.instance.popper,n=t.attributes,Object.keys(n).forEach(function(t){!1!==n[t]?e.setAttribute(t,n[t]):e.removeAttribute(t)}),t.arrowElement&&Object.keys(t.arrowStyles).length&&he(t.arrowElement,t.arrowStyles),t},onLoad:function(t,e,n,i,o){var r=Jt(o,e,t,n.positionFixed),s=$t(n.placement,r,e,t,n.modifiers.flip.boundariesElement,n.modifiers.flip.padding);return e.setAttribute("x-placement",s),he(e,{position:n.positionFixed?"fixed":"absolute"}),n},gpuAcceleration:void 0}}},be=function(){function r(t,e){var n=this,i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,r),this.scheduleUpdate=function(){return requestAnimationFrame(n.update)},this.update=At(this.update.bind(this)),this.options=Qt({},r.Defaults,i),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=t&&t.jquery?t[0]:t,this.popper=e&&e.jquery?e[0]:e,this.options.modifiers={},Object.keys(Qt({},r.Defaults.modifiers,i.modifiers)).forEach(function(t){n.options.modifiers[t]=Qt({},r.Defaults.modifiers[t]||{},i.modifiers?i.modifiers[t]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(t){return Qt({name:t},n.options.modifiers[t])}).sort(function(t,e){return t.order-e.order}),this.modifiers.forEach(function(t){t.enabled&&Ot(t.onLoad)&&t.onLoad(n.reference,n.popper,n.options,t,n.state)}),this.update();var o=this.options.eventsEnabled;o&&this.enableEventListeners(),this.state.eventsEnabled=o}return qt(r,[{key:"update",value:function(){return function(){if(!this.state.isDestroyed){var t={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};t.offsets.reference=Jt(this.state,this.popper,this.reference,this.options.positionFixed),t.placement=$t(this.options.placement,t.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),t.originalPlacement=t.placement,t.positionFixed=this.options.positionFixed,t.offsets.popper=ee(this.popper,t.offsets.reference,t.placement),t.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",t=ie(this.modifiers,t),this.state.isCreated?this.options.onUpdate(t):(this.state.isCreated=!0,this.options.onCreate(t))}}.call(this)}},{key:"destroy",value:function(){return function(){return this.state.isDestroyed=!0,oe(this.modifiers,"applyStyle")&&(this.popper.removeAttribute("x-placement"),this.popper.style.position="",this.popper.style.top="",this.popper.style.left="",this.popper.style.right="",this.popper.style.bottom="",this.popper.style.willChange="",this.popper.style[re("transform")]=""),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}.call(this)}},{key:"enableEventListeners",value:function(){return function(){this.state.eventsEnabled||(this.state=ae(this.reference,this.options,this.state,this.scheduleUpdate))}.call(this)}},{key:"disableEventListeners",value:function(){return le.call(this)}}]),r}();be.Utils=("undefined"!=typeof window?window:global).PopperUtils,be.placements=de,be.Defaults=Ee;var we="dropdown",Ce="bs.dropdown",Te="."+Ce,Se=".data-api",De=p.fn[we],Ie=new RegExp("38|40|27"),Ae={HIDE:"hide"+Te,HIDDEN:"hidden"+Te,SHOW:"show"+Te,SHOWN:"shown"+Te,CLICK:"click"+Te,CLICK_DATA_API:"click"+Te+Se,KEYDOWN_DATA_API:"keydown"+Te+Se,KEYUP_DATA_API:"keyup"+Te+Se},Oe="disabled",Ne="show",ke="dropup",Le="dropright",xe="dropleft",Pe="dropdown-menu-right",He="position-static",je='[data-toggle="dropdown"]',Re=".dropdown form",Fe=".dropdown-menu",Me=".navbar-nav",We=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",Ue="top-start",Be="top-end",qe="bottom-start",Ke="bottom-end",Qe="right-start",Ve="left-start",Ye={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic"},ze={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string"},Xe=function(){function c(t,e){this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var t=c.prototype;return t.toggle=function(){if(!this._element.disabled&&!p(this._element).hasClass(Oe)){var t=c._getParentFromElement(this._element),e=p(this._menu).hasClass(Ne);if(c._clearMenus(),!e){var n={relatedTarget:this._element},i=p.Event(Ae.SHOW,n);if(p(t).trigger(i),!i.isDefaultPrevented()){if(!this._inNavbar){if("undefined"==typeof be)throw new TypeError("Bootstrap's dropdowns require Popper.js (https://popper.js.org/)");var o=this._element;"parent"===this._config.reference?o=t:m.isElement(this._config.reference)&&(o=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(o=this._config.reference[0])),"scrollParent"!==this._config.boundary&&p(t).addClass(He),this._popper=new be(o,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===p(t).closest(Me).length&&p(document.body).children().on("mouseover",null,p.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),p(this._menu).toggleClass(Ne),p(t).toggleClass(Ne).trigger(p.Event(Ae.SHOWN,n))}}}},t.show=function(){if(!(this._element.disabled||p(this._element).hasClass(Oe)||p(this._menu).hasClass(Ne))){var t={relatedTarget:this._element},e=p.Event(Ae.SHOW,t),n=c._getParentFromElement(this._element);p(n).trigger(e),e.isDefaultPrevented()||(p(this._menu).toggleClass(Ne),p(n).toggleClass(Ne).trigger(p.Event(Ae.SHOWN,t)))}},t.hide=function(){if(!this._element.disabled&&!p(this._element).hasClass(Oe)&&p(this._menu).hasClass(Ne)){var t={relatedTarget:this._element},e=p.Event(Ae.HIDE,t),n=c._getParentFromElement(this._element);p(n).trigger(e),e.isDefaultPrevented()||(p(this._menu).toggleClass(Ne),p(n).toggleClass(Ne).trigger(p.Event(Ae.HIDDEN,t)))}},t.dispose=function(){p.removeData(this._element,Ce),p(this._element).off(Te),this._element=null,(this._menu=null)!==this._popper&&(this._popper.destroy(),this._popper=null)},t.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},t._addEventListeners=function(){var e=this;p(this._element).on(Ae.CLICK,function(t){t.preventDefault(),t.stopPropagation(),e.toggle()})},t._getConfig=function(t){return t=l({},this.constructor.Default,p(this._element).data(),t),m.typeCheckConfig(we,t,this.constructor.DefaultType),t},t._getMenuElement=function(){if(!this._menu){var t=c._getParentFromElement(this._element);t&&(this._menu=t.querySelector(Fe))}return this._menu},t._getPlacement=function(){var t=p(this._element.parentNode),e=qe;return t.hasClass(ke)?(e=Ue,p(this._menu).hasClass(Pe)&&(e=Be)):t.hasClass(Le)?e=Qe:t.hasClass(xe)?e=Ve:p(this._menu).hasClass(Pe)&&(e=Ke),e},t._detectNavbar=function(){return 0<p(this._element).closest(".navbar").length},t._getOffset=function(){var e=this,t={};return"function"==typeof this._config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,e._config.offset(t.offsets,e._element)||{}),t}:t.offset=this._config.offset,t},t._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),t},c._jQueryInterface=function(e){return this.each(function(){var t=p(this).data(Ce);if(t||(t=new c(this,"object"==typeof e?e:null),p(this).data(Ce,t)),"string"==typeof e){if("undefined"==typeof t[e])throw new TypeError('No method named "'+e+'"');t[e]()}})},c._clearMenus=function(t){if(!t||3!==t.which&&("keyup"!==t.type||9===t.which))for(var e=[].slice.call(document.querySelectorAll(je)),n=0,i=e.length;n<i;n++){var o=c._getParentFromElement(e[n]),r=p(e[n]).data(Ce),s={relatedTarget:e[n]};if(t&&"click"===t.type&&(s.clickEvent=t),r){var a=r._menu;if(p(o).hasClass(Ne)&&!(t&&("click"===t.type&&/input|textarea/i.test(t.target.tagName)||"keyup"===t.type&&9===t.which)&&p.contains(o,t.target))){var l=p.Event(Ae.HIDE,s);p(o).trigger(l),l.isDefaultPrevented()||("ontouchstart"in document.documentElement&&p(document.body).children().off("mouseover",null,p.noop),e[n].setAttribute("aria-expanded","false"),p(a).removeClass(Ne),p(o).removeClass(Ne).trigger(p.Event(Ae.HIDDEN,s)))}}}},c._getParentFromElement=function(t){var e,n=m.getSelectorFromElement(t);return n&&(e=document.querySelector(n)),e||t.parentNode},c._dataApiKeydownHandler=function(t){if((/input|textarea/i.test(t.target.tagName)?!(32===t.which||27!==t.which&&(40!==t.which&&38!==t.which||p(t.target).closest(Fe).length)):Ie.test(t.which))&&(t.preventDefault(),t.stopPropagation(),!this.disabled&&!p(this).hasClass(Oe))){var e=c._getParentFromElement(this),n=p(e).hasClass(Ne);if(n&&(!n||27!==t.which&&32!==t.which)){var i=[].slice.call(e.querySelectorAll(We));if(0!==i.length){var o=i.indexOf(t.target);38===t.which&&0<o&&o--,40===t.which&&o<i.length-1&&o++,o<0&&(o=0),i[o].focus()}}else{if(27===t.which){var r=e.querySelector(je);p(r).trigger("focus")}p(this).trigger("click")}}},s(c,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return Ye}},{key:"DefaultType",get:function(){return ze}}]),c}();p(document).on(Ae.KEYDOWN_DATA_API,je,Xe._dataApiKeydownHandler).on(Ae.KEYDOWN_DATA_API,Fe,Xe._dataApiKeydownHandler).on(Ae.CLICK_DATA_API+" "+Ae.KEYUP_DATA_API,Xe._clearMenus).on(Ae.CLICK_DATA_API,je,function(t){t.preventDefault(),t.stopPropagation(),Xe._jQueryInterface.call(p(this),"toggle")}).on(Ae.CLICK_DATA_API,Re,function(t){t.stopPropagation()}),p.fn[we]=Xe._jQueryInterface,p.fn[we].Constructor=Xe,p.fn[we].noConflict=function(){return p.fn[we]=De,Xe._jQueryInterface};var Ge="modal",$e="bs.modal",Je="."+$e,Ze=p.fn[Ge],tn={backdrop:!0,keyboard:!0,focus:!0,show:!0},en={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},nn={HIDE:"hide"+Je,HIDDEN:"hidden"+Je,SHOW:"show"+Je,SHOWN:"shown"+Je,FOCUSIN:"focusin"+Je,RESIZE:"resize"+Je,CLICK_DISMISS:"click.dismiss"+Je,KEYDOWN_DISMISS:"keydown.dismiss"+Je,MOUSEUP_DISMISS:"mouseup.dismiss"+Je,MOUSEDOWN_DISMISS:"mousedown.dismiss"+Je,CLICK_DATA_API:"click"+Je+".data-api"},on="modal-dialog-scrollable",rn="modal-scrollbar-measure",sn="modal-backdrop",an="modal-open",ln="fade",cn="show",hn=".modal-dialog",un=".modal-body",fn='[data-toggle="modal"]',dn='[data-dismiss="modal"]',pn=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",mn=".sticky-top",gn=function(){function o(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(hn),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var t=o.prototype;return t.toggle=function(t){return this._isShown?this.hide():this.show(t)},t.show=function(t){var e=this;if(!this._isShown&&!this._isTransitioning){p(this._element).hasClass(ln)&&(this._isTransitioning=!0);var n=p.Event(nn.SHOW,{relatedTarget:t});p(this._element).trigger(n),this._isShown||n.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),p(this._element).on(nn.CLICK_DISMISS,dn,function(t){return e.hide(t)}),p(this._dialog).on(nn.MOUSEDOWN_DISMISS,function(){p(e._element).one(nn.MOUSEUP_DISMISS,function(t){p(t.target).is(e._element)&&(e._ignoreBackdropClick=!0)})}),this._showBackdrop(function(){return e._showElement(t)}))}},t.hide=function(t){var e=this;if(t&&t.preventDefault(),this._isShown&&!this._isTransitioning){var n=p.Event(nn.HIDE);if(p(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var i=p(this._element).hasClass(ln);if(i&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),p(document).off(nn.FOCUSIN),p(this._element).removeClass(cn),p(this._element).off(nn.CLICK_DISMISS),p(this._dialog).off(nn.MOUSEDOWN_DISMISS),i){var o=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,function(t){return e._hideModal(t)}).emulateTransitionEnd(o)}else this._hideModal()}}},t.dispose=function(){[window,this._element,this._dialog].forEach(function(t){return p(t).off(Je)}),p(document).off(nn.FOCUSIN),p.removeData(this._element,$e),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null},t.handleUpdate=function(){this._adjustDialog()},t._getConfig=function(t){return t=l({},tn,t),m.typeCheckConfig(Ge,t,en),t},t._showElement=function(t){var e=this,n=p(this._element).hasClass(ln);this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),p(this._dialog).hasClass(on)?this._dialog.querySelector(un).scrollTop=0:this._element.scrollTop=0,n&&m.reflow(this._element),p(this._element).addClass(cn),this._config.focus&&this._enforceFocus();var i=p.Event(nn.SHOWN,{relatedTarget:t}),o=function(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,p(e._element).trigger(i)};if(n){var r=m.getTransitionDurationFromElement(this._dialog);p(this._dialog).one(m.TRANSITION_END,o).emulateTransitionEnd(r)}else o()},t._enforceFocus=function(){var e=this;p(document).off(nn.FOCUSIN).on(nn.FOCUSIN,function(t){document!==t.target&&e._element!==t.target&&0===p(e._element).has(t.target).length&&e._element.focus()})},t._setEscapeEvent=function(){var e=this;this._isShown&&this._config.keyboard?p(this._element).on(nn.KEYDOWN_DISMISS,function(t){27===t.which&&(t.preventDefault(),e.hide())}):this._isShown||p(this._element).off(nn.KEYDOWN_DISMISS)},t._setResizeEvent=function(){var e=this;this._isShown?p(window).on(nn.RESIZE,function(t){return e.handleUpdate(t)}):p(window).off(nn.RESIZE)},t._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._isTransitioning=!1,this._showBackdrop(function(){p(document.body).removeClass(an),t._resetAdjustments(),t._resetScrollbar(),p(t._element).trigger(nn.HIDDEN)})},t._removeBackdrop=function(){this._backdrop&&(p(this._backdrop).remove(),this._backdrop=null)},t._showBackdrop=function(t){var e=this,n=p(this._element).hasClass(ln)?ln:"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className=sn,n&&this._backdrop.classList.add(n),p(this._backdrop).appendTo(document.body),p(this._element).on(nn.CLICK_DISMISS,function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"===e._config.backdrop?e._element.focus():e.hide())}),n&&m.reflow(this._backdrop),p(this._backdrop).addClass(cn),!t)return;if(!n)return void t();var i=m.getTransitionDurationFromElement(this._backdrop);p(this._backdrop).one(m.TRANSITION_END,t).emulateTransitionEnd(i)}else if(!this._isShown&&this._backdrop){p(this._backdrop).removeClass(cn);var o=function(){e._removeBackdrop(),t&&t()};if(p(this._element).hasClass(ln)){var r=m.getTransitionDurationFromElement(this._backdrop);p(this._backdrop).one(m.TRANSITION_END,o).emulateTransitionEnd(r)}else o()}else t&&t()},t._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},t._setScrollbar=function(){var o=this;if(this._isBodyOverflowing){var t=[].slice.call(document.querySelectorAll(pn)),e=[].slice.call(document.querySelectorAll(mn));p(t).each(function(t,e){var n=e.style.paddingRight,i=p(e).css("padding-right");p(e).data("padding-right",n).css("padding-right",parseFloat(i)+o._scrollbarWidth+"px")}),p(e).each(function(t,e){var n=e.style.marginRight,i=p(e).css("margin-right");p(e).data("margin-right",n).css("margin-right",parseFloat(i)-o._scrollbarWidth+"px")});var n=document.body.style.paddingRight,i=p(document.body).css("padding-right");p(document.body).data("padding-right",n).css("padding-right",parseFloat(i)+this._scrollbarWidth+"px")}p(document.body).addClass(an)},t._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(pn));p(t).each(function(t,e){var n=p(e).data("padding-right");p(e).removeData("padding-right"),e.style.paddingRight=n||""});var e=[].slice.call(document.querySelectorAll(""+mn));p(e).each(function(t,e){var n=p(e).data("margin-right");"undefined"!=typeof n&&p(e).css("margin-right",n).removeData("margin-right")});var n=p(document.body).data("padding-right");p(document.body).removeData("padding-right"),document.body.style.paddingRight=n||""},t._getScrollbarWidth=function(){var t=document.createElement("div");t.className=rn,document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e},o._jQueryInterface=function(n,i){return this.each(function(){var t=p(this).data($e),e=l({},tn,p(this).data(),"object"==typeof n&&n?n:{});if(t||(t=new o(this,e),p(this).data($e,t)),"string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n](i)}else e.show&&t.show(i)})},s(o,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return tn}}]),o}();p(document).on(nn.CLICK_DATA_API,fn,function(t){var e,n=this,i=m.getSelectorFromElement(this);i&&(e=document.querySelector(i));var o=p(e).data($e)?"toggle":l({},p(e).data(),p(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var r=p(e).one(nn.SHOW,function(t){t.isDefaultPrevented()||r.one(nn.HIDDEN,function(){p(n).is(":visible")&&n.focus()})});gn._jQueryInterface.call(p(e),o,this)}),p.fn[Ge]=gn._jQueryInterface,p.fn[Ge].Constructor=gn,p.fn[Ge].noConflict=function(){return p.fn[Ge]=Ze,gn._jQueryInterface};var _n=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],vn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],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:[]},yn=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,En=/^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 bn(t,s,e){if(0===t.length)return t;if(e&&"function"==typeof e)return e(t);for(var n=(new window.DOMParser).parseFromString(t,"text/html"),a=Object.keys(s),l=[].slice.call(n.body.querySelectorAll("*")),i=function(t,e){var n=l[t],i=n.nodeName.toLowerCase();if(-1===a.indexOf(n.nodeName.toLowerCase()))return n.parentNode.removeChild(n),"continue";var o=[].slice.call(n.attributes),r=[].concat(s["*"]||[],s[i]||[]);o.forEach(function(t){(function(t,e){var n=t.nodeName.toLowerCase();if(-1!==e.indexOf(n))return-1===_n.indexOf(n)||Boolean(t.nodeValue.match(yn)||t.nodeValue.match(En));for(var i=e.filter(function(t){return t instanceof RegExp}),o=0,r=i.length;o<r;o++)if(n.match(i[o]))return!0;return!1})(t,r)||n.removeAttribute(t.nodeName)})},o=0,r=l.length;o<r;o++)i(o);return n.body.innerHTML}var wn="tooltip",Cn="bs.tooltip",Tn="."+Cn,Sn=p.fn[wn],Dn="bs-tooltip",In=new RegExp("(^|\\s)"+Dn+"\\S+","g"),An=["sanitize","whiteList","sanitizeFn"],On={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object"},Nn={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},kn={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:vn},Ln="show",xn="out",Pn={HIDE:"hide"+Tn,HIDDEN:"hidden"+Tn,SHOW:"show"+Tn,SHOWN:"shown"+Tn,INSERTED:"inserted"+Tn,CLICK:"click"+Tn,FOCUSIN:"focusin"+Tn,FOCUSOUT:"focusout"+Tn,MOUSEENTER:"mouseenter"+Tn,MOUSELEAVE:"mouseleave"+Tn},Hn="fade",jn="show",Rn=".tooltip-inner",Fn=".arrow",Mn="hover",Wn="focus",Un="click",Bn="manual",qn=function(){function i(t,e){if("undefined"==typeof be)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=p(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),p(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(p(this.getTipElement()).hasClass(jn))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),p.removeData(this.element,this.constructor.DATA_KEY),p(this.element).off(this.constructor.EVENT_KEY),p(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&p(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===p(this.element).css("display"))throw new Error("Please use show on visible elements");var t=p.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){p(this.element).trigger(t);var n=m.findShadowRoot(this.element),i=p.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!i)return;var o=this.getTipElement(),r=m.getUID(this.constructor.NAME);o.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&p(o).addClass(Hn);var s="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,a=this._getAttachment(s);this.addAttachmentClass(a);var l=this._getContainer();p(o).data(this.constructor.DATA_KEY,this),p.contains(this.element.ownerDocument.documentElement,this.tip)||p(o).appendTo(l),p(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new be(this.element,o,{placement:a,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:Fn},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),p(o).addClass(jn),"ontouchstart"in document.documentElement&&p(document.body).children().on("mouseover",null,p.noop);var c=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,p(e.element).trigger(e.constructor.Event.SHOWN),t===xn&&e._leave(null,e)};if(p(this.tip).hasClass(Hn)){var h=m.getTransitionDurationFromElement(this.tip);p(this.tip).one(m.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=p.Event(this.constructor.Event.HIDE),o=function(){e._hoverState!==Ln&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),p(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(p(this.element).trigger(i),!i.isDefaultPrevented()){if(p(n).removeClass(jn),"ontouchstart"in document.documentElement&&p(document.body).children().off("mouseover",null,p.noop),this._activeTrigger[Un]=!1,this._activeTrigger[Wn]=!1,this._activeTrigger[Mn]=!1,p(this.tip).hasClass(Hn)){var r=m.getTransitionDurationFromElement(n);p(n).one(m.TRANSITION_END,o).emulateTransitionEnd(r)}else o();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){p(this.getTipElement()).addClass(Dn+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||p(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(p(t.querySelectorAll(Rn)),this.getTitle()),p(t).removeClass(Hn+" "+jn)},t.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=bn(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?p(e).parent().is(t)||t.empty().append(e):t.text(p(e).text())},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getOffset=function(){var e=this,t={};return"function"==typeof this.config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,e.config.offset(t.offsets,e.element)||{}),t}:t.offset=this.config.offset,t},t._getContainer=function(){return!1===this.config.container?document.body:m.isElement(this.config.container)?p(this.config.container):p(document).find(this.config.container)},t._getAttachment=function(t){return Nn[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)p(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==Bn){var e=t===Mn?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===Mn?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;p(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}}),p(this.element).closest(".modal").on("hide.bs.modal",function(){i.element&&i.hide()}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||p(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),p(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Wn:Mn]=!0),p(e.getTipElement()).hasClass(jn)||e._hoverState===Ln?e._hoverState=Ln:(clearTimeout(e._timeout),e._hoverState=Ln,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===Ln&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||p(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),p(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Wn:Mn]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=xn,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===xn&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){var e=p(this.element).data();return Object.keys(e).forEach(function(t){-1!==An.indexOf(t)&&delete e[t]}),"number"==typeof(t=l({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),m.typeCheckConfig(wn,t,this.constructor.DefaultType),t.sanitize&&(t.template=bn(t.template,t.whiteList,t.sanitizeFn)),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=p(this.getTipElement()),e=t.attr("class").match(In);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(p(t).removeClass(Hn),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=p(this).data(Cn),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),p(this).data(Cn,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return kn}},{key:"NAME",get:function(){return wn}},{key:"DATA_KEY",get:function(){return Cn}},{key:"Event",get:function(){return Pn}},{key:"EVENT_KEY",get:function(){return Tn}},{key:"DefaultType",get:function(){return On}}]),i}();p.fn[wn]=qn._jQueryInterface,p.fn[wn].Constructor=qn,p.fn[wn].noConflict=function(){return p.fn[wn]=Sn,qn._jQueryInterface};var Kn="popover",Qn="bs.popover",Vn="."+Qn,Yn=p.fn[Kn],zn="bs-popover",Xn=new RegExp("(^|\\s)"+zn+"\\S+","g"),Gn=l({},qn.Default,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),$n=l({},qn.DefaultType,{content:"(string|element|function)"}),Jn="fade",Zn="show",ti=".popover-header",ei=".popover-body",ni={HIDE:"hide"+Vn,HIDDEN:"hidden"+Vn,SHOW:"show"+Vn,SHOWN:"shown"+Vn,INSERTED:"inserted"+Vn,CLICK:"click"+Vn,FOCUSIN:"focusin"+Vn,FOCUSOUT:"focusout"+Vn,MOUSEENTER:"mouseenter"+Vn,MOUSELEAVE:"mouseleave"+Vn},ii=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var o=i.prototype;return o.isWithContent=function(){return this.getTitle()||this._getContent()},o.addAttachmentClass=function(t){p(this.getTipElement()).addClass(zn+"-"+t)},o.getTipElement=function(){return this.tip=this.tip||p(this.config.template)[0],this.tip},o.setContent=function(){var t=p(this.getTipElement());this.setElementContent(t.find(ti),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(ei),e),t.removeClass(Jn+" "+Zn)},o._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},o._cleanTipClass=function(){var t=p(this.getTipElement()),e=t.attr("class").match(Xn);null!==e&&0<e.length&&t.removeClass(e.join(""))},i._jQueryInterface=function(n){return this.each(function(){var t=p(this).data(Qn),e="object"==typeof n?n:null;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),p(this).data(Qn,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return Gn}},{key:"NAME",get:function(){return Kn}},{key:"DATA_KEY",get:function(){return Qn}},{key:"Event",get:function(){return ni}},{key:"EVENT_KEY",get:function(){return Vn}},{key:"DefaultType",get:function(){return $n}}]),i}(qn);p.fn[Kn]=ii._jQueryInterface,p.fn[Kn].Constructor=ii,p.fn[Kn].noConflict=function(){return p.fn[Kn]=Yn,ii._jQueryInterface};var oi="scrollspy",ri="bs.scrollspy",si="."+ri,ai=p.fn[oi],li={offset:10,method:"auto",target:""},ci={offset:"number",method:"string",target:"(string|element)"},hi={ACTIVATE:"activate"+si,SCROLL:"scroll"+si,LOAD_DATA_API:"load"+si+".data-api"},ui="dropdown-item",fi="active",di='[data-spy="scroll"]',pi=".nav, .list-group",mi=".nav-link",gi=".nav-item",_i=".list-group-item",vi=".dropdown",yi=".dropdown-item",Ei=".dropdown-toggle",bi="offset",wi="position",Ci=function(){function n(t,e){var n=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(e),this._selector=this._config.target+" "+mi+","+this._config.target+" "+_i+","+this._config.target+" "+yi,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,p(this._scrollElement).on(hi.SCROLL,function(t){return n._process(t)}),this.refresh(),this._process()}var t=n.prototype;return t.refresh=function(){var e=this,t=this._scrollElement===this._scrollElement.window?bi:wi,o="auto"===this._config.method?t:this._config.method,r=o===wi?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map(function(t){var e,n=m.getSelectorFromElement(t);if(n&&(e=document.querySelector(n)),e){var i=e.getBoundingClientRect();if(i.width||i.height)return[p(e)[o]().top+r,n]}return null}).filter(function(t){return t}).sort(function(t,e){return t[0]-e[0]}).forEach(function(t){e._offsets.push(t[0]),e._targets.push(t[1])})},t.dispose=function(){p.removeData(this._element,ri),p(this._scrollElement).off(si),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},t._getConfig=function(t){if("string"!=typeof(t=l({},li,"object"==typeof t&&t?t:{})).target){var e=p(t.target).attr("id");e||(e=m.getUID(oi),p(t.target).attr("id",e)),t.target="#"+e}return m.typeCheckConfig(oi,t,ci),t},t._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},t._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},t._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},t._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),n<=t){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t<this._offsets[0]&&0<this._offsets[0])return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t<this._offsets[o+1])&&this._activate(this._targets[o])}}},t._activate=function(e){this._activeTarget=e,this._clear();var t=this._selector.split(",").map(function(t){return t+'[data-target="'+e+'"],'+t+'[href="'+e+'"]'}),n=p([].slice.call(document.querySelectorAll(t.join(","))));n.hasClass(ui)?(n.closest(vi).find(Ei).addClass(fi),n.addClass(fi)):(n.addClass(fi),n.parents(pi).prev(mi+", "+_i).addClass(fi),n.parents(pi).prev(gi).children(mi).addClass(fi)),p(this._scrollElement).trigger(hi.ACTIVATE,{relatedTarget:e})},t._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter(function(t){return t.classList.contains(fi)}).forEach(function(t){return t.classList.remove(fi)})},n._jQueryInterface=function(e){return this.each(function(){var t=p(this).data(ri);if(t||(t=new n(this,"object"==typeof e&&e),p(this).data(ri,t)),"string"==typeof e){if("undefined"==typeof t[e])throw new TypeError('No method named "'+e+'"');t[e]()}})},s(n,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return li}}]),n}();p(window).on(hi.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(di)),e=t.length;e--;){var n=p(t[e]);Ci._jQueryInterface.call(n,n.data())}}),p.fn[oi]=Ci._jQueryInterface,p.fn[oi].Constructor=Ci,p.fn[oi].noConflict=function(){return p.fn[oi]=ai,Ci._jQueryInterface};var Ti="bs.tab",Si="."+Ti,Di=p.fn.tab,Ii={HIDE:"hide"+Si,HIDDEN:"hidden"+Si,SHOW:"show"+Si,SHOWN:"shown"+Si,CLICK_DATA_API:"click"+Si+".data-api"},Ai="dropdown-menu",Oi="active",Ni="disabled",ki="fade",Li="show",xi=".dropdown",Pi=".nav, .list-group",Hi=".active",ji="> li > .active",Ri='[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',Fi=".dropdown-toggle",Mi="> .dropdown-menu .active",Wi=function(){function i(t){this._element=t}var t=i.prototype;return t.show=function(){var n=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&p(this._element).hasClass(Oi)||p(this._element).hasClass(Ni))){var t,i,e=p(this._element).closest(Pi)[0],o=m.getSelectorFromElement(this._element);if(e){var r="UL"===e.nodeName||"OL"===e.nodeName?ji:Hi;i=(i=p.makeArray(p(e).find(r)))[i.length-1]}var s=p.Event(Ii.HIDE,{relatedTarget:this._element}),a=p.Event(Ii.SHOW,{relatedTarget:i});if(i&&p(i).trigger(s),p(this._element).trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){o&&(t=document.querySelector(o)),this._activate(this._element,e);var l=function(){var t=p.Event(Ii.HIDDEN,{relatedTarget:n._element}),e=p.Event(Ii.SHOWN,{relatedTarget:i});p(i).trigger(t),p(n._element).trigger(e)};t?this._activate(t,t.parentNode,l):l()}}},t.dispose=function(){p.removeData(this._element,Ti),this._element=null},t._activate=function(t,e,n){var i=this,o=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?p(e).children(Hi):p(e).find(ji))[0],r=n&&o&&p(o).hasClass(ki),s=function(){return i._transitionComplete(t,o,n)};if(o&&r){var a=m.getTransitionDurationFromElement(o);p(o).removeClass(Li).one(m.TRANSITION_END,s).emulateTransitionEnd(a)}else s()},t._transitionComplete=function(t,e,n){if(e){p(e).removeClass(Oi);var i=p(e.parentNode).find(Mi)[0];i&&p(i).removeClass(Oi),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(p(t).addClass(Oi),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),m.reflow(t),t.classList.contains(ki)&&t.classList.add(Li),t.parentNode&&p(t.parentNode).hasClass(Ai)){var o=p(t).closest(xi)[0];if(o){var r=[].slice.call(o.querySelectorAll(Fi));p(r).addClass(Oi)}t.setAttribute("aria-expanded",!0)}n&&n()},i._jQueryInterface=function(n){return this.each(function(){var t=p(this),e=t.data(Ti);if(e||(e=new i(this),t.data(Ti,e)),"string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}}]),i}();p(document).on(Ii.CLICK_DATA_API,Ri,function(t){t.preventDefault(),Wi._jQueryInterface.call(p(this),"show")}),p.fn.tab=Wi._jQueryInterface,p.fn.tab.Constructor=Wi,p.fn.tab.noConflict=function(){return p.fn.tab=Di,Wi._jQueryInterface};var Ui="toast",Bi="bs.toast",qi="."+Bi,Ki=p.fn[Ui],Qi={CLICK_DISMISS:"click.dismiss"+qi,HIDE:"hide"+qi,HIDDEN:"hidden"+qi,SHOW:"show"+qi,SHOWN:"shown"+qi},Vi="fade",Yi="hide",zi="show",Xi="showing",Gi={animation:"boolean",autohide:"boolean",delay:"number"},$i={animation:!0,autohide:!0,delay:500},Ji='[data-dismiss="toast"]',Zi=function(){function i(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var t=i.prototype;return t.show=function(){var t=this;p(this._element).trigger(Qi.SHOW),this._config.animation&&this._element.classList.add(Vi);var e=function(){t._element.classList.remove(Xi),t._element.classList.add(zi),p(t._element).trigger(Qi.SHOWN),t._config.autohide&&t.hide()};if(this._element.classList.remove(Yi),this._element.classList.add(Xi),this._config.animation){var n=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},t.hide=function(t){var e=this;this._element.classList.contains(zi)&&(p(this._element).trigger(Qi.HIDE),t?this._close():this._timeout=setTimeout(function(){e._close()},this._config.delay))},t.dispose=function(){clearTimeout(this._timeout),this._timeout=null,this._element.classList.contains(zi)&&this._element.classList.remove(zi),p(this._element).off(Qi.CLICK_DISMISS),p.removeData(this._element,Bi),this._element=null,this._config=null},t._getConfig=function(t){return t=l({},$i,p(this._element).data(),"object"==typeof t&&t?t:{}),m.typeCheckConfig(Ui,t,this.constructor.DefaultType),t},t._setListeners=function(){var t=this;p(this._element).on(Qi.CLICK_DISMISS,Ji,function(){return t.hide(!0)})},t._close=function(){var t=this,e=function(){t._element.classList.add(Yi),p(t._element).trigger(Qi.HIDDEN)};if(this._element.classList.remove(zi),this._config.animation){var n=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},i._jQueryInterface=function(n){return this.each(function(){var t=p(this),e=t.data(Bi);if(e||(e=new i(this,"object"==typeof n&&n),t.data(Bi,e)),"string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n](this)}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"DefaultType",get:function(){return Gi}},{key:"Default",get:function(){return $i}}]),i}();p.fn[Ui]=Zi._jQueryInterface,p.fn[Ui].Constructor=Zi,p.fn[Ui].noConflict=function(){return p.fn[Ui]=Ki,Zi._jQueryInterface},function(){if("undefined"==typeof p)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=p.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||4<=t[0])throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}(),t.Util=m,t.Alert=g,t.Button=k,t.Carousel=at,t.Collapse=Ct,t.Dropdown=Xe,t.Modal=gn,t.Popover=ii,t.Scrollspy=Ci,t.Tab=Wi,t.Toast=Zi,t.Tooltip=qn,Object.defineProperty(t,"__esModule",{value:!0})});

- //# sourceMappingURL=bootstrap.bundle.min.js.map 

\ No newline at end of file

@@ -1,22 +1,22 @@ 

  {% extends "layout.html" %} {% block info %} {% endblock %} {% macro navactive(name, subname='') -%} {%- if name == (request.path | getname) and subname == (request.path | getsubname)

- -%} btn-primary {%- else -%}  {%- endif -%} {%- endmacro %}

+ -%} btn-primary font-weight-bolder {%- else -%}  {%- endif -%} {%- endmacro %}

  

  {% block navigation %}

- <div class="row justify-content-md-left" style="height: 40px;">

+ <div class="row justify-content-md-left">

      <nav class="navbar navbar-expand-lg navbar-light no-padding">

          <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">

            <span class="navbar-toggler-icon"></span>

          </button>

          <div class="collapse navbar-collapse" id="navbarNavDropdown">

-           <ul class="navbar-nav" id="height-fix">

+           <ul class="navbar-nav">

              {% for ms in g.milestones %}

-             <li class="nav-item {{navactive('milestone', ms.release.number ~ ms.version) }}">

+             <li class="nav-item btn py-0 mx-1 {{navactive('milestone', ms.release.number ~ ms.version) }} d-flex align-items-center">

                  <a class="nav-link" href="{{ url_for('main.display_buglist', num=ms.release.number, release_name=ms.version) }}"

                  >F{{ ms.release.number }} {{ ms.version | capitalize }}</a>

              </li>

              {% endfor %}

-             <li class="nav-item">

-                 <a class="nav-link" href="{{ url_for('main.propose_bug') }}" class="btn {{navactive('propose_bug') }}">Propose</a>

+             <li class="nav-item btn py-0 mx-1 {{navactive('propose_bug') }} d-flex align-items-center">

+                 <a class="nav-link" href="{{ url_for('main.propose_bug') }}">Propose</a>

              </li>

            </ul>

          </div>

@@ -1,42 +0,0 @@ 

- {% extends "base_nav.html" %}

- 

- {% block jsheader %}

- {% endblock %}

- 

- {% block body %}

- <div class="row">

-     <div class="col-md-12" id="index">

-         <div class="panel radius" id="main-info">

-             <h2>Fedora Blocker Bug Tracking</h2>

-             <p>

-             The BlockerBugs app is used to propose and track

-             <a href="http://fedoraproject.org/wiki/QA:SOP_blocker_bug_process">

-                 release blocking</a> and

-             <a href="http://fedoraproject.org/wiki/QA:SOP_freeze_exception_bug_process">

-                 freeze exception</a> bugs and related updates in Fedora releases

-             currently under development.

-             </p>

- 

-             <p>

-             If you notice bugs or have suggestions on how we can make this app

-             better, please report or discuss them in any of the following

-             places:

-             <ul>

-                 <li>

-                     <a href="https://pagure.io/fedora-qa/blockerbugs">BlockerBugs project page</a>

-                 </li>

-                 <li>

-                     Via email on the <a href="https://lists.fedoraproject.org/archives/list/qa-devel@lists.fedoraproject.org/">qa-devel list</a>

-                 </li>

-                 <li>In <i>#fedora-qa</i> channel on <a href="https://libera.chat">Libera.Chat</a> IRC</li>

-             </ul>

-             </p>

- 

-             <p>

-             Thanks for participating in Fedora development and/or testing!

-             </p>

- 

-         </div>

-     </div>

- </div>

- {% endblock %}

@@ -15,9 +15,9 @@ 

    <link rel="apple-touch-icon" href="{{ url_for('static', filename='bb-icon-128x128.png') }}">

    <meta property="og:image" content="{{ url_for('static', filename='bb-icon-128x128.png') }}" />

  

-   <link href="https://apps.fedoraproject.org/global/fedora-bootstrap-fonts/hack.css" type="text/css" rel="stylesheet" />

-   <link href="https://apps.fedoraproject.org/global/fedora-bootstrap-fonts/open-sans.css" type="text/css" rel="stylesheet" />

-   <link href="{{ url_for('static',filename='/css/fontawesome-5.15.3/css/all.css') }}" type="text/css" rel="stylesheet">

+   <link href="{{ url_for('static',filename='/css/fonts/fedora-bootstrap-fonts/hack.css') }}" type="text/css" rel="stylesheet">

+   <link href="{{ url_for('static',filename='/css/fonts/fedora-bootstrap-fonts/open-sans.css') }}" type="text/css" rel="stylesheet">

+   <link href="{{ url_for('static',filename='/css/fonts/fontawesome-5.15.3/css/all.css') }}" type="text/css" rel="stylesheet">

  

    <link rel= "stylesheet" type= "text/css" href= "{{ url_for('static',filename='css/fedora-bootstrap.css') }}">

    <link rel= "stylesheet" type= "text/css" href= "{{ url_for('static',filename='css/text.css') }}">
@@ -41,21 +41,21 @@ 

  </head>

  

  <body>

-     <div class="masthead">

+     <div class="masthead py-1">

          <div id="header" class="fedora-preheader">

              <div class="container">

-                 <div class="row">

-                     <div class="col-7 col-md-4">

+                 <div class="row vertical-align-center-lg vertical-align-start">

+                     <div class="col-lg-3 col-md-4 col-sm-5 col-6">

                          <a href="{{ url_for('main.index') }}">

                          <div id="logo" class="fedora-header">

                          </div>

                          </a>

                      </div>

-                     <div class="col-3 col-md-6">

+                     <div class="col-lg-7 col-md-4 col-sm-3 col-3">

                          {% block navigation %}

                          {% endblock %}

                      </div>

-                     <div class="col-2">

+                     <div class="col-lg-2 col-md-4 col-sm-4 col-3 d-flex justify-content-end">

                          <div class='login-header'>

                              {% if g.fas_user %}

                              <span class='login-link'>
@@ -78,7 +78,7 @@ 

          {% endblock %}

      </div>

  

-     <div class="container">

+     <div class="container pb-4">

          {% if not config['PRODUCTION'] %}

          <div class="row">

              <div class="col-md-12" id="info-container">
@@ -120,33 +120,61 @@ 

                  This is example content from the base layout. If you can see this, something

                  probably went wrong.

                  </p>

-           </div> <!--! end of twelve colum div for tables -->

-       </div> <!-- end of table row -->

-   </div> <!-- main 12 column -->

-   {% endblock %}

- 

- </div> <!-- end of main row -->

+             </div> <!--! end of twelve colum div for tables -->

+         </div> <!-- end of table row -->

+         {% endblock %}

+     </div> <!-- main 12 column -->

  

  {% block footer %}

- <div class="footerspacer"></div>

- <footer class="footer">

-     <div class="container">

-         <span class="text-white">

-             {% if info is defined %}

-                 {% if info.get('last_updated') %}

-                     Last synced with <a class="text-white-50" href="https://bugzilla.redhat.com/">

-                     Red Hat Bugzilla</a> at {{ info['last_updated'] }}.

-                 {% else %}

-                     Not synced with <a href="https://bugzilla.redhat.com/"> Red Hat Bugzilla</a>.

-                 {% endif %}

-             {% endif %}

-             <br /> This application is open source! Visit its

-             <a class="text-white-50" href="https://pagure.io/fedora-qa/blockerbugs">project page</a>.

-             <br /> Version {{ g.version }} ({{ g.version_date }})

-             <div class="fedora-footer"></div>

-         </span>

-     </div>

- </footer>

+     <footer class="footer">

+         <div class="container">

+             <span class="text-white">

+                 <p>

+                     The BlockerBugs app is used to propose and track

+                     <a class="text-white-50" href="https://fedoraproject.org/wiki/QA:SOP_blocker_bug_process">

+                         release blocking</a> and

+                     <a class="text-white-50" href="https://fedoraproject.org/wiki/QA:SOP_freeze_exception_bug_process">

+                         freeze exception</a>

+                     bugs and related updates in Fedora releases currently under development.

+                     <a class="standout" data-toggle="collapse" href="#participate" role="button">

+                         How to report problems and participate?</a>

+                 </p>

+ 

+                 <div id="participate" class="collapse">

+                     <p>

+                         If you notice bugs or have suggestions on how we can make this app better,

+                         please report or discuss them in any of the following places:

+                         <ul>

+                             <li>

+                                 <a class="text-white-50" href="https://pagure.io/fedora-qa/blockerbugs">

+                                 BlockerBugs project page</a>

+                             </li>

+                             <li>

+                                 <a class="text-white-50" href="https://lists.fedoraproject.org/archives/list/qa-devel@lists.fedoraproject.org/">

+                                 qa-devel mailing list</a>

+                             </li>

+                             <li><a class="text-white-50" href="https://matrix.to/#/#quality:fedoraproject.org">

+                                 #quality:fedoraproject.org</a> Matrix channel or

+                                 <a class="text-white-50" href="https://libera.chat">

+                                 #fedora-qa on Libera.Chat</a> IRC channel (bridged)

+                             </li>

+                         </ul>

+                     </p>

+ 

+                     <p>

+                         Thanks for participating in Fedora development and/or testing!

+                     </p>

+                 </div>

+ 

+                 <p>

+                     {% if info is defined %}

+                         Selected milestone last synced at: {{ info.get('last_updated') or 'never' }}<br>

+                     {% endif %}

+                     App version: {{ g.version }}

+                 </p>

+             </span>

+         </div>

+     </footer>

  {% endblock %}

  

  {% if config['FEDMENU_URL'] %}

@@ -10,25 +10,33 @@ 

      <div class="col-md-12" id="milestone-info">

          <h2>Fedora {{ info['number'] }} {{ info['phase'] }}</h2>

          <p>

-         The bugs listed on this page are the current blocker and freeze exception bugs for

-         <i>Fedora {{ info['number'] }} {{ info['phase'] }}</i> as identified by their

-         respective processes:

- 

-         <ul>

-             <li><a href="https://fedoraproject.org/wiki/QA:SOP_blocker_bug_process">Blocker Bug Process</a></li>

-             <li><a href="https://fedoraproject.org/wiki/QA:SOP_freeze_exception_bug_process">Freeze Exception Bug Process</a></li>

-         </ul>

+             The bugs listed in this section are the current blocker and freeze exception bugs for

+             <i>Fedora {{ info['number'] }} {{ info['phase'] }}</i> as identified by their

+             respective processes:

+             <ul>

+                 <li><a href="https://fedoraproject.org/wiki/QA:SOP_blocker_bug_process">Blocker Bug Process</a></li>

+                 <li><a href="https://fedoraproject.org/wiki/QA:SOP_freeze_exception_bug_process">Freeze Exception Bug Process</a></li>

+             </ul>

          </p>

          <p>

-         The criteria for bugs to qualify as blockers can be found in the

-         <a href="{{ info['criteria_url'] }}">Fedora {{ info['number'] }} {{ info['phase']}} Release Criteria</a>.

+             The criteria for bugs to qualify as blockers can be found in the

+             <a href="https://fedoraproject.org/wiki/Fedora_Release_Criteria">Fedora Release Criteria</a>,

+             in particular:

+             <ul>

+                 <li><a href="https://fedoraproject.org/wiki/Basic_Release_Criteria">Basic Release Criteria</a></li>

+                 <li><a href="https://fedoraproject.org/wiki/Fedora_{{ info['number'] }}_Beta_Release_Criteria">Fedora {{ info['number'] }} Beta Release Criteria</a></li>

+                 {% if info['phase'].lower() == 'final' %}

+                 <li><a href="https://fedoraproject.org/wiki/Fedora_{{ info['number'] }}_Final_Release_Criteria">Fedora {{ info['number'] }} Final Release Criteria</a></li>

+                 {% endif %}

+             </ul>

          </p>

          <p>

-         <h3>Tracking Bugs</h3>

+             The Bugzilla tracking bugs for this milestone are as following:

+         </p>

          <table class="table">

              <thead class="thead-light">

-                 <th scope="col">Blocker</th>

-                 <th scope="col">Freeze Exception</th>

+                 <th scope="col">Blocker tracker</th>

+                 <th scope="col">Freeze Exception tracker</th>

              </thead>

              <tbody>

                  <tr>
@@ -37,7 +45,6 @@ 

                  </tr>

              </tbody>

          </table>

-         </p>

      </div> <!-- end 12 columns -->

  </div> <!-- end row -->

  

@@ -19,9 +19,9 @@ 

      </div>

  </div>

  {% endblock %} {% block body %}

- <div class="row">

+ <div class="row pt-4">

      <div class="col-md-12">

-         <h3>Propose a Blocker or Freeze Exception</h3>

+         <h3>Propose a Blocker or a Freeze Exception</h3>

      </div>

  </div>

  
@@ -68,8 +68,8 @@ 

                  <label>Blocker</label>

                  <p>

                      A release blocking bug is a bug which is judged severe enough to justify blocking release until it is fixed. Blocker bugs

-                     generally violate a release criterion (

-                     <a href="https://fedoraproject.org/wiki/Basic_Release_Criteria">basic</a>,

+                     generally violate a release criterion

+                     (<a href="https://fedoraproject.org/wiki/Basic_Release_Criteria">basic</a>,

                      <a href="https://fedoraproject.org/wiki/Fedora_{{ release }}_Beta_Release_Criteria">beta</a>,

                      <a href="https://fedoraproject.org/wiki/Fedora_{{ release }}_Final_Release_Criteria">final</a>) and follow the

                      <a href="https://fedoraproject.org/wiki/QA:SOP_blocker_bug_process">blocker SOP</a>.
@@ -97,8 +97,8 @@ 

                  <p>

                      Proposing a bug as either blocker or freeze exception requires review by Fedora contributors. This process is much more straight

                      forward when there is a clear reason why a bug has been proposed. If you are proposing a blocker, please

-                     cite a violated release criterion (

-                     <a href="https://fedoraproject.org/wiki/Basic_Release_Criteria">basic</a>,

+                     cite a violated release criterion

+                     (<a href="https://fedoraproject.org/wiki/Basic_Release_Criteria">basic</a>,

                      <a href="https://fedoraproject.org/wiki/Fedora_{{ release }}_Beta_Release_Criteria">beta</a>,

                      <a href="https://fedoraproject.org/wiki/Fedora_{{ release }}_Final_Release_Criteria">final</a>) if possible.

                  </p>

file modified
+9 -5
@@ -1,6 +1,8 @@ 

  import datetime

  import re

  

+ import pytest

+ 

  from blockerbugs.models.milestone import Milestone

  from blockerbugs.models.release import Release

  from blockerbugs.models.bug import Bug
@@ -118,9 +120,11 @@ 

          db.session.rollback()

          db.drop_all()

  

-     def test_index_returns_200code(self):

-         rv = self.client.get('/')

-         assert rv.status_code == 200

+     def test_index_raises(self):

+         "An empty db means no milestone to display, should raise"

+         with pytest.raises(RuntimeError) as excinfo:

+             self.client.get('/')

+         assert 'current milestone' in str(excinfo.value)

  

  

  class TestNotSyncedMilestone(object):
@@ -140,7 +144,7 @@ 

          db.drop_all()

  

      def test_not_synced_index(self):

-         rv = self.client.get('/')

+         rv = self.client.get('/', follow_redirects=True)

          assert rv.status_code == 200

          assert b'F99 Final' in rv.data

          assert b'F99 Beta' not in rv.data
@@ -184,7 +188,7 @@ 

          db.drop_all()

  

      def test_display_index(self):

-         rv = self.client.get('/')

+         rv = self.client.get('/', follow_redirects=True)

          assert rv.status_code == 200

          assert b'F99 Final' in rv.data

          assert b'F99 Beta' not in rv.data

Several UI tweaks:

  • Landing page is removed, / now redirects to current milestone.
  • Titlebar style is changed to look like as intended when using Fedora bootstrap
  • Buttons in titlebar are now more pronounced
  • Titlebar responsivity improvement

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

rebased onto 6065b72

2 years ago

Build succeeded.

Metadata Update from @kparal:
- Request assigned

2 years ago

Thanks a lot, @lbrabec . I'm not sure if I manage to review it today, but I'll definitely look at it next week.

An immediate thought - what happens if the current milestone is not set at the moment, by mistake? Because up until now, nobody really cared for it. A reasonable approach would probably be to display the first visible milestone, I guess. Hmm, and what if current is set to an old milestone which is not visible anymore? Do the same thing? Or is it better to fail with an error in both cases and force admins to configure milestones properly?

2 new commits added

  • better fallback with no current milestone, raise in some cases
  • remove index.html, it's no longer needed
2 years ago

Build succeeded.

1 new commit added

  • make the footer collapsible + a few more tiny tweaks
2 years ago

Build succeeded.

Hey @lbrabec, I like the new look! I added a few more tweaks, please review.

I found just a single problem. If I have a few more milestones active (e.g. including test data), the top bar is not displayed properly:
https://i.imgur.com/nyA1aLr.png

Can you please fix that?

If I have a few more milestones active (e.g. including test data), the top bar is not displayed properly

@lbrabec Hey, will you have time to look at it? Thanks!

Sure, I will! Once I return from my vacation :-)

1 new commit added

  • navbar fix on narrow screens
2 years ago

Build succeeded.

It looks great, but unfortunately breaks if I make my window too wide:
https://youtu.be/h1dVRRbwXVE

Strange, works fine for me (chrome, firefox, with and without CORS allowed, which affects fonts used). I'll investigate.

I was not able to reproduce this problem so far: https://www.youtube.com/watch?v=pomsltNJgVA
I'll investigate further.

Even F36 on bare metal does not show this issue (both firefox and chrome).

Do you have any custom font or CSS related settings or extensions in your browser? Also, could you please try to force refresh the page (i.e. without cache)?

Hmm, it works in Chromium. But in Firefox, it fails even with a completely clean profile. In the developer console, I see:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://apps.fedoraproject.org/global/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-regular.woff2. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing). Status code: 200.
downloadable font: download failed (font-family: "Open Sans" style:normal weight:400 stretch:100 src index:3): bad URI or cross-site access not allowed source: https://apps.fedoraproject.org/global/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-regular.woff2
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://apps.fedoraproject.org/global/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-700.woff2. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing). Status code: 200.
downloadable font: download failed (font-family: "Open Sans" style:normal weight:700 stretch:100 src index:3): bad URI or cross-site access not allowed source: https://apps.fedoraproject.org/global/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-700.woff2
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://apps.fedoraproject.org/global/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-regular.woff. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing). Status code: 200.
downloadable font: download failed (font-family: "Open Sans" style:normal weight:400 stretch:100 src index:4): bad URI or cross-site access not allowed source: https://apps.fedoraproject.org/global/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-regular.woff
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://apps.fedoraproject.org/global/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-700.woff. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing). Status code: 200.
downloadable font: download failed (font-family: "Open Sans" style:normal weight:700 stretch:100 src index:4): bad URI or cross-site access not allowed source: https://apps.fedoraproject.org/global/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-700.woff
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://apps.fedoraproject.org/global/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-regular.ttf. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing). Status code: 200.
downloadable font: download failed (font-family: "Open Sans" style:normal weight:400 stretch:100 src index:5): bad URI or cross-site access not allowed source: https://apps.fedoraproject.org/global/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-regular.ttf
downloadable font: no supported format found (font-family: "Open Sans" style:normal weight:400 stretch:100 src index:7) source: (end of source list)
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://apps.fedoraproject.org/global/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-700.ttf. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing). Status code: 200.
downloadable font: download failed (font-family: "Open Sans" style:normal weight:700 stretch:100 src index:5): bad URI or cross-site access not allowed source: https://apps.fedoraproject.org/global/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-700.ttf
downloadable font: no supported format found (font-family: "Open Sans" style:normal weight:700 stretch:100 src index:7) source: (end of source list)

If it helps, I'd be fine with bundling and serving fedora-bootstrap ourselves. Because not being able to use it during development is just stupid.

Hmm, it works in Chromium. But in Firefox, it fails even with a completely clean profile.

By fail here, do you mean "fail to get proper fonts" or "buttons are broken"? On my setup even with fallback font (I get Times New Roman on one machine and Noto Serif on other) I don't see broken buttons.

If it helps, I'd be fine with bundling and serving fedora-bootstrap ourselves. Because not being able to use it during development is just stupid.

Well, we're bundling fedora-bootstrap already, but we're not bundling open-sans fonts. We could start to, that would be great improvement.

3 new commits added

  • move fontawesome to fonts/
  • css: remove sourceMappingURL
  • bundle fedora-bootstrap-fonts
2 years ago

Build succeeded.

I've bundled the fonts. With that done, my particular setup works right now. But if I add approx. one more character to the milestone names, the buttons break again, both in Firefox and Chrome.

Video recording is broken for some reason right now, so see at least these screenshots:
https://imgur.com/a/IGnOFuE

Create exactly the same milestone names as I have (feel free to use ./run cli create-test-data) and you should reproduce it as I did. Or simply add more characters to multiple milestone names until it happens.

After experimenting, I decided that the cleanest solution is to remove CSS rules restricting the height of navbar. Let the bootstrap do its job instead of fighting it by trying to squeeze text into restricted area. The height of navbar will grow to accommodate buttons with more lines.

1 new commit added

  • remove navbar height restriction
2 years ago

Build succeeded.

1 new commit added

  • align navbar items to start on small screens
2 years ago

Build succeeded.

rebased onto f2518e5

2 years ago

Build succeeded.

Thanks, Lukas. Looks good! I squashed some of the commits and will merge this.

Commit f2518e5 fixes this pull-request

Pull-Request has been merged by kparal

2 years ago
Metadata
Changes Summary 94
+18 -8
file changed
blockerbugs/controllers/main.py
+62 -18
file changed
blockerbugs/static/css/blockerbugs.css
+37
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack.css
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/eot/hack-bold-webfont.eot
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/eot/hack-bolditalic-webfont.eot
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/eot/hack-italic-webfont.eot
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/eot/hack-regular-webfont.eot
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/eot/latin/hack-bold-latin-webfont.eot
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/eot/latin/hack-bolditalic-latin-webfont.eot
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/eot/latin/hack-italic-latin-webfont.eot
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/eot/latin/hack-regular-latin-webfont.eot
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/web-ttf/hack-bold-webfont.ttf
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/web-ttf/hack-bolditalic-webfont.ttf
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/web-ttf/hack-italic-webfont.ttf
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/web-ttf/hack-regular-webfont.ttf
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/web-ttf/latin/hack-bold-latin-webfont.ttf
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/web-ttf/latin/hack-bolditalic-latin-webfont.ttf
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/web-ttf/latin/hack-italic-latin-webfont.ttf
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/web-ttf/latin/hack-regular-latin-webfont.ttf
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/woff/hack-bold-webfont.woff
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/woff/hack-bolditalic-webfont.woff
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/woff/hack-italic-webfont.woff
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/woff/hack-regular-webfont.woff
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/woff/latin/hack-bold-latin-webfont.woff
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/woff/latin/hack-bolditalic-latin-webfont.woff
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/woff/latin/hack-italic-latin-webfont.woff
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/woff/latin/hack-regular-latin-webfont.woff
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/woff2/hack-bold-webfont.woff2
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/woff2/hack-bolditalic-webfont.woff2
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/woff2/hack-italic-webfont.woff2
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/woff2/hack-regular-webfont.woff2
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/woff2/latin/hack-bold-latin-webfont.woff2
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/woff2/latin/hack-bolditalic-latin-webfont.woff2
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/woff2/latin/hack-italic-latin-webfont.woff2
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/hack/woff2/latin/hack-regular-latin-webfont.woff2
+101
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans.css
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/OpenSans-Semibold.woff
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/OpenSans-Semibold.woff2
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/OpenSans-SemiboldItalic.woff
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/OpenSans-SemiboldItalic.woff2
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-300.eot
+5074
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-300.svg
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-300.ttf
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-300.woff
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-300.woff2
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-300italic.eot
+5087
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-300italic.svg
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-300italic.ttf
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-300italic.woff
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-300italic.woff2
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-700.eot
+5076
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-700.svg
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-700.ttf
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-700.woff
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-700.woff2
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-700italic.eot
+5084
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-700italic.svg
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-700italic.ttf
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-700italic.woff
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-700italic.woff2
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-italic.eot
+5091
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-italic.svg
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-italic.ttf
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-italic.woff
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-italic.woff2
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-regular.eot
+5078
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-regular.svg
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-regular.ttf
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-regular.woff
+0
file added
blockerbugs/static/css/fonts/fedora-bootstrap-fonts/open-sans/open-sans-v13-latin_latin-ext-regular.woff2
+0 -0
file renamed
blockerbugs/static/css/fontawesome-5.15.3/LICENSE.txt
blockerbugs/static/css/fonts/fontawesome-5.15.3/LICENSE.txt
+0 -0
file renamed
blockerbugs/static/css/fontawesome-5.15.3/css/all.css
blockerbugs/static/css/fonts/fontawesome-5.15.3/css/all.css
+0 -0
file renamed
blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-brands-400.eot
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-brands-400.eot
+0 -0
file renamed
blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-brands-400.svg
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-brands-400.svg
+0 -0
file renamed
blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-brands-400.ttf
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-brands-400.ttf
+0 -0
file renamed
blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-brands-400.woff
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-brands-400.woff
+0 -0
file renamed
blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-brands-400.woff2
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-brands-400.woff2
+0 -0
file renamed
blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-regular-400.eot
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-regular-400.eot
+0 -0
file renamed
blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-regular-400.svg
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-regular-400.svg
+0 -0
file renamed
blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-regular-400.ttf
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-regular-400.ttf
+0 -0
file renamed
blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-regular-400.woff
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-regular-400.woff
+0 -0
file renamed
blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-regular-400.woff2
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-regular-400.woff2
+0 -0
file renamed
blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-solid-900.eot
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-solid-900.eot
+0 -0
file renamed
blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-solid-900.svg
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-solid-900.svg
+0 -0
file renamed
blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-solid-900.ttf
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-solid-900.ttf
+0 -0
file renamed
blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-solid-900.woff
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-solid-900.woff
+0 -0
file renamed
blockerbugs/static/css/fontawesome-5.15.3/webfonts/fa-solid-900.woff2
blockerbugs/static/css/fonts/fontawesome-5.15.3/webfonts/fa-solid-900.woff2
+0 -1
file changed
blockerbugs/static/js/fedora-bootstrap.js
+6 -6
file changed
blockerbugs/templates/base_nav.html
-42
file removed
blockerbugs/templates/index.html
+62 -34
file changed
blockerbugs/templates/layout.html
+21 -14
file changed
blockerbugs/templates/milestone_info.html
+6 -6
file changed
blockerbugs/templates/propose_bug.html
+9 -5
file changed
testing/test_controllers.py