From 92200d6327858d5520114664e2aeafd6dcf1f7f1 Mon Sep 17 00:00:00 2001 From: George Cushen Date: Wed, 24 Apr 2019 23:56:41 +0100 Subject: [PATCH] refactor: convert CSS to SCSS Remove Bootstrap from Header and assets.toml Remove Bootstrap JS CDN version in footer and assets.toml Add latest Bootstrap v4 SASS files locally Include Bootstrap JS locally Convert Academic's CSS to SASS (mainly SASS variables + Go templating) Convert Academic's theming system to integrate with SASS Parse SASS in header using Hugo and convert to CSS Minify and md5 fingerprint bundled CSS Fix Slider widget (reuses .wg-hero but animation and `clear` removed) Add Bootstrap files to repo so that Node is not required See #680 --- .gitignore | 3 + assets/js/academic.js | 19 + assets/js/vendor/bootstrap.min.js | 7 + .../academic.css => assets/sass/academic.scss | 156 +-- assets/sass/bootstrap_variables.scss | 2 + assets/sass/main.scss | 36 + assets/sass/vendor/bootstrap/_alert.scss | 51 + assets/sass/vendor/bootstrap/_badge.scss | 54 + assets/sass/vendor/bootstrap/_breadcrumb.scss | 41 + .../sass/vendor/bootstrap/_button-group.scss | 163 +++ assets/sass/vendor/bootstrap/_buttons.scss | 137 ++ assets/sass/vendor/bootstrap/_card.scss | 289 +++++ assets/sass/vendor/bootstrap/_carousel.scss | 197 +++ assets/sass/vendor/bootstrap/_close.scss | 41 + assets/sass/vendor/bootstrap/_code.scss | 48 + .../sass/vendor/bootstrap/_custom-forms.scss | 507 ++++++++ assets/sass/vendor/bootstrap/_dropdown.scss | 191 +++ assets/sass/vendor/bootstrap/_forms.scss | 330 +++++ assets/sass/vendor/bootstrap/_functions.scss | 86 ++ assets/sass/vendor/bootstrap/_grid.scss | 52 + assets/sass/vendor/bootstrap/_images.scss | 42 + .../sass/vendor/bootstrap/_input-group.scss | 193 +++ assets/sass/vendor/bootstrap/_jumbotron.scss | 17 + assets/sass/vendor/bootstrap/_list-group.scss | 149 +++ assets/sass/vendor/bootstrap/_media.scss | 8 + assets/sass/vendor/bootstrap/_mixins.scss | 47 + assets/sass/vendor/bootstrap/_modal.scss | 229 ++++ assets/sass/vendor/bootstrap/_nav.scss | 120 ++ assets/sass/vendor/bootstrap/_navbar.scss | 294 +++++ assets/sass/vendor/bootstrap/_pagination.scss | 73 ++ assets/sass/vendor/bootstrap/_popover.scss | 171 +++ assets/sass/vendor/bootstrap/_print.scss | 141 +++ assets/sass/vendor/bootstrap/_progress.scss | 43 + assets/sass/vendor/bootstrap/_reboot.scss | 483 +++++++ assets/sass/vendor/bootstrap/_root.scss | 19 + assets/sass/vendor/bootstrap/_spinners.scss | 55 + assets/sass/vendor/bootstrap/_tables.scss | 185 +++ assets/sass/vendor/bootstrap/_toasts.scss | 44 + assets/sass/vendor/bootstrap/_tooltip.scss | 115 ++ .../sass/vendor/bootstrap/_transitions.scss | 20 + assets/sass/vendor/bootstrap/_type.scss | 125 ++ assets/sass/vendor/bootstrap/_utilities.scss | 17 + assets/sass/vendor/bootstrap/_variables.scss | 1123 +++++++++++++++++ .../sass/vendor/bootstrap/bootstrap-grid.scss | 29 + .../vendor/bootstrap/bootstrap-reboot.scss | 12 + assets/sass/vendor/bootstrap/bootstrap.scss | 44 + .../sass/vendor/bootstrap/mixins/_alert.scss | 13 + .../bootstrap/mixins/_background-variant.scss | 21 + .../sass/vendor/bootstrap/mixins/_badge.scss | 17 + .../bootstrap/mixins/_border-radius.scss | 63 + .../vendor/bootstrap/mixins/_box-shadow.scss | 20 + .../vendor/bootstrap/mixins/_breakpoints.scss | 123 ++ .../vendor/bootstrap/mixins/_buttons.scss | 107 ++ .../sass/vendor/bootstrap/mixins/_caret.scss | 62 + .../vendor/bootstrap/mixins/_clearfix.scss | 7 + .../vendor/bootstrap/mixins/_deprecate.scss | 10 + .../sass/vendor/bootstrap/mixins/_float.scss | 14 + .../sass/vendor/bootstrap/mixins/_forms.scss | 192 +++ .../vendor/bootstrap/mixins/_gradients.scss | 45 + .../bootstrap/mixins/_grid-framework.scss | 66 + .../sass/vendor/bootstrap/mixins/_grid.scss | 51 + .../sass/vendor/bootstrap/mixins/_hover.scss | 37 + .../sass/vendor/bootstrap/mixins/_image.scss | 36 + .../vendor/bootstrap/mixins/_list-group.scss | 21 + .../sass/vendor/bootstrap/mixins/_lists.scss | 7 + .../vendor/bootstrap/mixins/_nav-divider.scss | 10 + .../vendor/bootstrap/mixins/_pagination.scss | 22 + .../vendor/bootstrap/mixins/_reset-text.scss | 17 + .../sass/vendor/bootstrap/mixins/_resize.scss | 6 + .../bootstrap/mixins/_screen-reader.scss | 33 + .../sass/vendor/bootstrap/mixins/_size.scss | 7 + .../vendor/bootstrap/mixins/_table-row.scss | 39 + .../bootstrap/mixins/_text-emphasis.scss | 16 + .../vendor/bootstrap/mixins/_text-hide.scss | 11 + .../bootstrap/mixins/_text-truncate.scss | 8 + .../vendor/bootstrap/mixins/_transition.scss | 16 + .../vendor/bootstrap/mixins/_visibility.scss | 8 + .../vendor/bootstrap/utilities/_align.scss | 8 + .../bootstrap/utilities/_background.scss | 19 + .../vendor/bootstrap/utilities/_borders.scss | 75 ++ .../vendor/bootstrap/utilities/_clearfix.scss | 3 + .../vendor/bootstrap/utilities/_display.scss | 26 + .../vendor/bootstrap/utilities/_embed.scss | 39 + .../vendor/bootstrap/utilities/_flex.scss | 51 + .../vendor/bootstrap/utilities/_float.scss | 11 + .../vendor/bootstrap/utilities/_overflow.scss | 5 + .../vendor/bootstrap/utilities/_position.scss | 32 + .../bootstrap/utilities/_screenreaders.scss | 11 + .../vendor/bootstrap/utilities/_shadows.scss | 6 + .../vendor/bootstrap/utilities/_sizing.scss | 20 + .../vendor/bootstrap/utilities/_spacing.scss | 73 ++ .../bootstrap/utilities/_stretched-link.scss | 19 + .../vendor/bootstrap/utilities/_text.scss | 72 ++ .../bootstrap/utilities/_visibility.scss | 13 + assets/sass/vendor/bootstrap/vendor/_rfs.scss | 204 +++ data/assets.toml | 8 - exampleSite/config/_default/config.toml | 2 +- exampleSite/content/home/slider.md | 4 - layouts/index.css | 9 - layouts/partials/footer.html | 11 +- layouts/partials/header.html | 7 +- layouts/partials/widgets/slider.html | 4 +- package-lock.json | 13 + package.json | 23 + 104 files changed, 7977 insertions(+), 104 deletions(-) create mode 100644 assets/js/vendor/bootstrap.min.js rename layouts/partials/css/academic.css => assets/sass/academic.scss (93%) create mode 100644 assets/sass/bootstrap_variables.scss create mode 100644 assets/sass/main.scss create mode 100644 assets/sass/vendor/bootstrap/_alert.scss create mode 100644 assets/sass/vendor/bootstrap/_badge.scss create mode 100644 assets/sass/vendor/bootstrap/_breadcrumb.scss create mode 100644 assets/sass/vendor/bootstrap/_button-group.scss create mode 100644 assets/sass/vendor/bootstrap/_buttons.scss create mode 100644 assets/sass/vendor/bootstrap/_card.scss create mode 100644 assets/sass/vendor/bootstrap/_carousel.scss create mode 100644 assets/sass/vendor/bootstrap/_close.scss create mode 100644 assets/sass/vendor/bootstrap/_code.scss create mode 100644 assets/sass/vendor/bootstrap/_custom-forms.scss create mode 100644 assets/sass/vendor/bootstrap/_dropdown.scss create mode 100644 assets/sass/vendor/bootstrap/_forms.scss create mode 100644 assets/sass/vendor/bootstrap/_functions.scss create mode 100644 assets/sass/vendor/bootstrap/_grid.scss create mode 100644 assets/sass/vendor/bootstrap/_images.scss create mode 100644 assets/sass/vendor/bootstrap/_input-group.scss create mode 100644 assets/sass/vendor/bootstrap/_jumbotron.scss create mode 100644 assets/sass/vendor/bootstrap/_list-group.scss create mode 100644 assets/sass/vendor/bootstrap/_media.scss create mode 100644 assets/sass/vendor/bootstrap/_mixins.scss create mode 100644 assets/sass/vendor/bootstrap/_modal.scss create mode 100644 assets/sass/vendor/bootstrap/_nav.scss create mode 100644 assets/sass/vendor/bootstrap/_navbar.scss create mode 100644 assets/sass/vendor/bootstrap/_pagination.scss create mode 100644 assets/sass/vendor/bootstrap/_popover.scss create mode 100644 assets/sass/vendor/bootstrap/_print.scss create mode 100644 assets/sass/vendor/bootstrap/_progress.scss create mode 100644 assets/sass/vendor/bootstrap/_reboot.scss create mode 100644 assets/sass/vendor/bootstrap/_root.scss create mode 100644 assets/sass/vendor/bootstrap/_spinners.scss create mode 100644 assets/sass/vendor/bootstrap/_tables.scss create mode 100644 assets/sass/vendor/bootstrap/_toasts.scss create mode 100644 assets/sass/vendor/bootstrap/_tooltip.scss create mode 100644 assets/sass/vendor/bootstrap/_transitions.scss create mode 100644 assets/sass/vendor/bootstrap/_type.scss create mode 100644 assets/sass/vendor/bootstrap/_utilities.scss create mode 100644 assets/sass/vendor/bootstrap/_variables.scss create mode 100644 assets/sass/vendor/bootstrap/bootstrap-grid.scss create mode 100644 assets/sass/vendor/bootstrap/bootstrap-reboot.scss create mode 100644 assets/sass/vendor/bootstrap/bootstrap.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_alert.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_background-variant.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_badge.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_border-radius.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_box-shadow.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_breakpoints.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_buttons.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_caret.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_clearfix.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_deprecate.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_float.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_forms.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_gradients.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_grid-framework.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_grid.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_hover.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_image.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_list-group.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_lists.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_nav-divider.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_pagination.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_reset-text.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_resize.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_screen-reader.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_size.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_table-row.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_text-emphasis.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_text-hide.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_text-truncate.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_transition.scss create mode 100644 assets/sass/vendor/bootstrap/mixins/_visibility.scss create mode 100644 assets/sass/vendor/bootstrap/utilities/_align.scss create mode 100644 assets/sass/vendor/bootstrap/utilities/_background.scss create mode 100644 assets/sass/vendor/bootstrap/utilities/_borders.scss create mode 100644 assets/sass/vendor/bootstrap/utilities/_clearfix.scss create mode 100644 assets/sass/vendor/bootstrap/utilities/_display.scss create mode 100644 assets/sass/vendor/bootstrap/utilities/_embed.scss create mode 100644 assets/sass/vendor/bootstrap/utilities/_flex.scss create mode 100644 assets/sass/vendor/bootstrap/utilities/_float.scss create mode 100644 assets/sass/vendor/bootstrap/utilities/_overflow.scss create mode 100644 assets/sass/vendor/bootstrap/utilities/_position.scss create mode 100644 assets/sass/vendor/bootstrap/utilities/_screenreaders.scss create mode 100644 assets/sass/vendor/bootstrap/utilities/_shadows.scss create mode 100644 assets/sass/vendor/bootstrap/utilities/_sizing.scss create mode 100644 assets/sass/vendor/bootstrap/utilities/_spacing.scss create mode 100644 assets/sass/vendor/bootstrap/utilities/_stretched-link.scss create mode 100644 assets/sass/vendor/bootstrap/utilities/_text.scss create mode 100644 assets/sass/vendor/bootstrap/utilities/_visibility.scss create mode 100644 assets/sass/vendor/bootstrap/vendor/_rfs.scss delete mode 100644 layouts/index.css create mode 100644 package-lock.json create mode 100644 package.json diff --git a/.gitignore b/.gitignore index 512a2ea8..385bf43e 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,6 @@ resources/ # Jupyter .ipynb_checkpoints/ + +# Node +node_modules/ diff --git a/assets/js/academic.js b/assets/js/academic.js index 37c58df7..4a6c18bd 100644 --- a/assets/js/academic.js +++ b/assets/js/academic.js @@ -328,6 +328,22 @@ } } + /* --------------------------------------------------------------------------- + * Normalize Bootstrap Carousel Slide Heights. + * --------------------------------------------------------------------------- */ + + function normalizeCarouselSlideHeights() { + $('.carousel').each(function(){ + // Get carousel slides. + let items = $('.carousel-item', this); + // Reset all slide heights. + items.css('min-height', 0); + // Normalize all slide heights. + let maxHeight = Math.max.apply(null, items.map(function(){return $(this).outerHeight()}).get()); + items.css('min-height', maxHeight + 'px'); + }) + } + /* --------------------------------------------------------------------------- * On document ready. * --------------------------------------------------------------------------- */ @@ -509,4 +525,7 @@ }); + // Normalize Bootstrap carousel slide heights. + $(window).on('load resize orientationchange', normalizeCarouselSlideHeights); + })(jQuery); diff --git a/assets/js/vendor/bootstrap.min.js b/assets/js/vendor/bootstrap.min.js new file mode 100644 index 00000000..c4c0d1f9 --- /dev/null +++ b/assets/js/vendor/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v4.3.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e((t=t||self).bootstrap={},t.jQuery,t.Popper)}(this,function(t,g,u){"use strict";function i(t,e){for(var n=0;nthis._items.length-1||t<0))if(this._isSliding)g(this._element).one(Q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=ndocument.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
',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:Ee},je="show",He="out",Re={HIDE:"hide"+De,HIDDEN:"hidden"+De,SHOW:"show"+De,SHOWN:"shown"+De,INSERTED:"inserted"+De,CLICK:"click"+De,FOCUSIN:"focusin"+De,FOCUSOUT:"focusout"+De,MOUSEENTER:"mouseenter"+De,MOUSELEAVE:"mouseleave"+De},xe="fade",Fe="show",Ue=".tooltip-inner",We=".arrow",qe="hover",Me="focus",Ke="click",Qe="manual",Be=function(){function i(t,e){if("undefined"==typeof u)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=g(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(g(this.getTipElement()).hasClass(Fe))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),g.removeData(this.element,this.constructor.DATA_KEY),g(this.element).off(this.constructor.EVENT_KEY),g(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&g(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"===g(this.element).css("display"))throw new Error("Please use show on visible elements");var t=g.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){g(this.element).trigger(t);var n=_.findShadowRoot(this.element),i=g.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!i)return;var o=this.getTipElement(),r=_.getUID(this.constructor.NAME);o.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&g(o).addClass(xe);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();g(o).data(this.constructor.DATA_KEY,this),g.contains(this.element.ownerDocument.documentElement,this.tip)||g(o).appendTo(l),g(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new u(this.element,o,{placement:a,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:We},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),g(o).addClass(Fe),"ontouchstart"in document.documentElement&&g(document.body).children().on("mouseover",null,g.noop);var c=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,g(e.element).trigger(e.constructor.Event.SHOWN),t===He&&e._leave(null,e)};if(g(this.tip).hasClass(xe)){var h=_.getTransitionDurationFromElement(this.tip);g(this.tip).one(_.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=g.Event(this.constructor.Event.HIDE),o=function(){e._hoverState!==je&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),g(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(g(this.element).trigger(i),!i.isDefaultPrevented()){if(g(n).removeClass(Fe),"ontouchstart"in document.documentElement&&g(document.body).children().off("mouseover",null,g.noop),this._activeTrigger[Ke]=!1,this._activeTrigger[Me]=!1,this._activeTrigger[qe]=!1,g(this.tip).hasClass(xe)){var r=_.getTransitionDurationFromElement(n);g(n).one(_.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){g(this.getTipElement()).addClass(Ae+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(g(t.querySelectorAll(Ue)),this.getTitle()),g(t).removeClass(xe+" "+Fe)},t.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=Se(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?g(e).parent().is(t)||t.empty().append(e):t.text(g(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:_.isElement(this.config.container)?g(this.config.container):g(document).find(this.config.container)},t._getAttachment=function(t){return Pe[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)g(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==Qe){var e=t===qe?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===qe?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;g(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}}),g(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||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Me:qe]=!0),g(e.getTipElement()).hasClass(Fe)||e._hoverState===je?e._hoverState=je:(clearTimeout(e._timeout),e._hoverState=je,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===je&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Me:qe]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=He,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===He&&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=g(this.element).data();return Object.keys(e).forEach(function(t){-1!==Oe.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()),_.typeCheckConfig(be,t,this.constructor.DefaultType),t.sanitize&&(t.template=Se(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=g(this.getTipElement()),e=t.attr("class").match(Ne);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")&&(g(t).removeClass(xe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=g(this).data(Ie),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),g(this).data(Ie,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 Le}},{key:"NAME",get:function(){return be}},{key:"DATA_KEY",get:function(){return Ie}},{key:"Event",get:function(){return Re}},{key:"EVENT_KEY",get:function(){return De}},{key:"DefaultType",get:function(){return ke}}]),i}();g.fn[be]=Be._jQueryInterface,g.fn[be].Constructor=Be,g.fn[be].noConflict=function(){return g.fn[be]=we,Be._jQueryInterface};var Ve="popover",Ye="bs.popover",ze="."+Ye,Xe=g.fn[Ve],$e="bs-popover",Ge=new RegExp("(^|\\s)"+$e+"\\S+","g"),Je=l({},Be.Default,{placement:"right",trigger:"click",content:"",template:''}),Ze=l({},Be.DefaultType,{content:"(string|element|function)"}),tn="fade",en="show",nn=".popover-header",on=".popover-body",rn={HIDE:"hide"+ze,HIDDEN:"hidden"+ze,SHOW:"show"+ze,SHOWN:"shown"+ze,INSERTED:"inserted"+ze,CLICK:"click"+ze,FOCUSIN:"focusin"+ze,FOCUSOUT:"focusout"+ze,MOUSEENTER:"mouseenter"+ze,MOUSELEAVE:"mouseleave"+ze},sn=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){g(this.getTipElement()).addClass($e+"-"+t)},o.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},o.setContent=function(){var t=g(this.getTipElement());this.setElementContent(t.find(nn),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(on),e),t.removeClass(tn+" "+en)},o._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},o._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Ge);null!==e&&0=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t .dropdown-toggle.btn-primary { - background: {{ .Get "primary" }}; + background: $sta-primary; } .btn-outline-light:hover, @@ -1674,8 +1686,8 @@ a.badge:hover { .btn-outline-primary:not(:disabled):not(.disabled):active, .show > .btn-outline-primary.dropdown-toggle { color: #fff; - background-color: {{ .Get "primary" }}; - border-color: {{ .Get "primary" }}; + background-color: $sta-primary; + border-color: $sta-primary; } .dark .btn-outline-primary:not(:disabled):not(.disabled).active, @@ -1686,8 +1698,8 @@ a.badge:hover { .btn-outline-primary:hover { color: #fff; - background-color: {{ .Get "primary" }}; - border-color: {{ .Get "primary" }}; + background-color: $sta-primary; + border-color: $sta-primary; } .dark .btn-outline-primary:hover { @@ -1714,18 +1726,18 @@ a.badge:hover { .btn-toolbar .btn.btn-primary:hover, .btn-toolbar .btn.btn-primary:focus { - background-color: {{ .Get "primary_light" }} !important; + background-color: $sta-primary-light !important; } .btn-toolbar .btn.btn-primary:active, .btn-toolbar .btn.btn-primary.active { - background-color: {{ .Get "primary_dark" }} !important; + background-color: $sta-primary-dark !important; } .btn-primary:not(:disabled):not(.disabled).active:focus, .btn-primary:not(:disabled):not(.disabled):active:focus, .show > .btn-primary.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem {{ .Get "primary_light" }}; + box-shadow: 0 0 0 .2rem $sta-primary-light; } /************************************************* @@ -1737,7 +1749,7 @@ a.badge:hover { } .navbar-light { - background: {{ .Get "menu_primary" }} !important; + background: $sta-menu-primary !important; box-shadow: 0 0.125rem 0.25rem 0 rgba(0,0,0,.11) } @@ -1746,7 +1758,7 @@ a.badge:hover { } .navbar-toggler { - color: {{ .Get "menu_text" }} !important; + color: $sta-menu-text !important; } .navbar-light .navbar-toggler:focus, @@ -1756,7 +1768,7 @@ a.badge:hover { .dropdown-menu, nav#navbar-main li.nav-item { - font-size: {{ .Get "font_size_small" }}px; + font-size: #{$sta-font-size-small}px; } .navbar-light .navbar-nav>.nav-item>.nav-link, @@ -1765,24 +1777,24 @@ nav#navbar-main li.nav-item { white-space: nowrap; -webkit-transition: 0.2s ease; transition: 0.2s ease; - color: {{ .Get "menu_text" }}; + color: $sta-menu-text; font-weight: 600; } .navbar-light .navbar-nav>.nav-item>.nav-link:focus { - color: {{ .Get "menu_text" }}; + color: $sta-menu-text; background-color: transparent; } .navbar-light .navbar-nav>.nav-item>.nav-link:hover { - color: {{ .Get "menu_text_active" }}; + color: $sta-menu-text-active; background-color: transparent; } .navbar-light .navbar-nav>li.nav-item>a.active, .navbar-light .navbar-nav>li.nav-item>a.active:focus, .navbar-light .navbar-nav>li.nav-item>a.active:hover { - color: {{ .Get "menu_text_active" }}; + color: $sta-menu-text-active; font-weight: 700; background-color: transparent !important; /* Override Bootstrap. */ } @@ -1800,11 +1812,11 @@ nav#navbar-main li.nav-item { } .navbar-light .navbar-toggler .icon-bar { - background-color: {{ .Get "menu_text" }} !important; + background-color: $sta-menu-text !important; } .dropdown-menu { - background-color: {{ .Get "menu_primary" }} !important; + background-color: $sta-menu-primary !important; } .dropdown-menu > li > a { @@ -1813,23 +1825,23 @@ nav#navbar-main li.nav-item { clear: both; font-weight: 400; line-height: 1.42857143; - color: {{ .Get "menu_text" }}; + color: $sta-menu-text; white-space: nowrap; } .dropdown-menu>li>a:focus, .dropdown-menu>li>a:hover { - color: {{ .Get "menu_text_active" }}; + color: $sta-menu-text-active; text-decoration: none; - background-color: {{ .Get "menu_primary" }}; + background-color: $sta-menu-primary; } .dropdown-menu > .active, .dropdown-menu > .active:focus, .dropdown-menu > .active:hover { - color: {{ .Get "menu_primary" }}; + color: $sta-menu-primary; text-decoration: none; - background-color: {{ .Get "menu_text_active" }}; + background-color: $sta-menu-text-active; outline: 0; } @@ -1837,19 +1849,19 @@ nav#navbar-main li.nav-item { .navbar-light .navbar-nav>.open>a:focus, .navbar-light .navbar-nav>.open>a:hover, .navbar-light .navbar-nav>.open>a:visited { - color: {{ .Get "menu_text" }} !important; - background-color: {{ .Get "menu_primary" }} !important; + color: $sta-menu-text !important; + background-color: $sta-menu-primary !important; } .navbar-light .navbar-brand { font-weight: bold; font-size: 1.2em; - color: {{ .Get "menu_title" }}; + color: $sta-menu-title; } .navbar-light .navbar-brand:focus, .navbar-light .navbar-brand:hover { - color: {{ .Get "menu_title" }}; + color: $sta-menu-title; background-color: transparent; } @@ -1891,7 +1903,7 @@ nav#navbar-main li.nav-item { clear: both; font-weight: 400; line-height: 1.42857143; - color: {{ .Get "menu_text" }}; + color: $sta-menu-text; white-space: nowrap; } @@ -1907,7 +1919,7 @@ nav#navbar-main li.nav-item { .navbar-light .navbar-nav .open .dropdown-menu > li > a { padding: 5px 15px 5px 25px; line-height: 20px; - color: {{ .Get "menu_text" }}; + color: $sta-menu-text; } .navbar-light .navbar-nav .open .dropdown-menu > li > a:focus, @@ -1919,7 +1931,7 @@ nav#navbar-main li.nav-item { .navbar-light .navbar-nav .open .dropdown-menu >.nav-item> .active, .navbar-light .navbar-nav .open .dropdown-menu >.nav-item> .active:focus, .navbar-light .navbar-nav .open .dropdown-menu >.nav-item> .active:hover { - color: {{ .Get "menu_text_active" }}; + color: $sta-menu-text-active; background-color: transparent; } @@ -2091,8 +2103,8 @@ div.alert a { } .docs-search .form-control:focus { - border-color: {{ .Get "primary" }}; - box-shadow: 0 0 0 3px {{ .Get "primary_light" }}; + border-color: $sta-primary; + box-shadow: 0 0 0 3px $sta-primary-light; } /* Docs sidebar. */ @@ -2157,7 +2169,7 @@ div.alert a { .docs-sidebar .nav>.active:hover>a, .docs-sidebar .nav>.active>a { font-weight: bold; - color: {{ .Get "primary" }}; + color: $sta-primary; background-color: transparent; } @@ -2166,7 +2178,7 @@ div.alert a { .docs-toggle { line-height: 1; font-size: 1.2rem; - color: {{ .Get "primary" }}; + color: $sta-primary; background-color: transparent; } @@ -2283,7 +2295,7 @@ ul.toc-top { #TableOfContents li a:hover, .toc-top li a:hover { - color: {{ .Get "primary" }}; + color: $sta-primary; text-decoration: none; } @@ -2291,12 +2303,12 @@ ul.toc-top { .anchorjs-link { font-weight: 400; - color: {{ .Get "primary_dark" }}; + color: $sta-primary-dark; transition: color .16s linear; } .anchorjs-link:hover { - color: {{ .Get "primary" }}; + color: $sta-primary; text-decoration: none; } @@ -2312,7 +2324,7 @@ body.dark, .dark .form-control, .dark .form-control:focus { color: rgb(248, 248, 242); - background: {{ .Get "dark_background" }}; + background: $sta-dark-background; } .dark .form-control { @@ -2321,8 +2333,8 @@ body.dark, .dark .form-control:focus { background-color: rgb(68, 71, 90); - border-color: {{ .Get "primary" }}; - box-shadow: 0 0 0 .2rem {{ .Get "primary_dark" }}; + border-color: $sta-primary; + box-shadow: 0 0 0 .2rem $sta-primary-dark; } .dark h1, @@ -2354,7 +2366,7 @@ body.dark, } .dark ul.share li a { - background-color: {{ .Get "primary" }}; + background-color: $sta-primary; } .dark table table { @@ -2407,7 +2419,7 @@ body.dark, } .dark .card h4 a { - color: {{ .Get "primary" }}; + color: $sta-primary; border-bottom: solid 1px transparent; } diff --git a/assets/sass/bootstrap_variables.scss b/assets/sass/bootstrap_variables.scss new file mode 100644 index 00000000..8dbf7951 --- /dev/null +++ b/assets/sass/bootstrap_variables.scss @@ -0,0 +1,2 @@ +/* Set Bootstrap variables */ +$primary: $sta-primary; diff --git a/assets/sass/main.scss b/assets/sass/main.scss new file mode 100644 index 00000000..e615457c --- /dev/null +++ b/assets/sass/main.scss @@ -0,0 +1,36 @@ +{{- $scr := .Scratch -}} +{{- $site := $scr.Get "site" -}} +{{- partial "css/parse_theme.css" . -}} + +$sta-font-size: {{ $scr.Get "font_size" }}; +$sta-font-size-small: {{ $scr.Get "font_size_small" }}; + +$sta-font-body: {{ $scr.Get "body_font" }}; +$sta-font-heading: {{ $scr.Get "heading_font" }}; +$sta-font-nav: {{ $scr.Get "nav_font" }}; +$sta-font-mono: {{ $scr.Get "mono_font" }}; + +$sta-primary: {{ $scr.Get "primary" }}; +$sta-primary-light: {{ $scr.Get "primary_light" }}; +$sta-primary-dark: {{ $scr.Get "primary_dark" }}; + +$sta-link: {{ $scr.Get "link" }}; +$sta-link-hover: {{ $scr.Get "link_hover" }}; + +$sta-menu-primary: {{ $scr.Get "menu_primary" }}; +$sta-menu-text: {{ $scr.Get "menu_text" }}; +$sta-menu-text-active: {{ $scr.Get "menu_text_active" }}; +$sta-menu-title: {{ $scr.Get "menu_title" }}; + +$sta-background: {{ $scr.Get "background" }}; +$sta-dark-background: {{ $scr.Get "dark_background" }}; + +$sta-home-section-odd: {{ $scr.Get "home_section_odd" }}; +$sta-home-section-even: {{ $scr.Get "home_section_even" }}; + +$sta-dark-home-section-odd: {{ $scr.Get "dark_home_section_odd" }}; +$sta-dark-home-section-even: {{ $scr.Get "dark_home_section_even" }}; + +@import "bootstrap_variables"; +@import "vendor/bootstrap/bootstrap"; +@import "academic.scss"; diff --git a/assets/sass/vendor/bootstrap/_alert.scss b/assets/sass/vendor/bootstrap/_alert.scss new file mode 100644 index 00000000..da2a98af --- /dev/null +++ b/assets/sass/vendor/bootstrap/_alert.scss @@ -0,0 +1,51 @@ +// +// Base styles +// + +.alert { + position: relative; + padding: $alert-padding-y $alert-padding-x; + margin-bottom: $alert-margin-bottom; + border: $alert-border-width solid transparent; + @include border-radius($alert-border-radius); +} + +// Headings for larger alerts +.alert-heading { + // Specified to prevent conflicts of changing $headings-color + color: inherit; +} + +// Provide class for links that match alerts +.alert-link { + font-weight: $alert-link-font-weight; +} + + +// Dismissible alerts +// +// Expand the right padding and account for the close button's positioning. + +.alert-dismissible { + padding-right: $close-font-size + $alert-padding-x * 2; + + // Adjust close link position + .close { + position: absolute; + top: 0; + right: 0; + padding: $alert-padding-y $alert-padding-x; + color: inherit; + } +} + + +// Alternate styles +// +// Generate contextual modifier classes for colorizing the alert. + +@each $color, $value in $theme-colors { + .alert-#{$color} { + @include alert-variant(theme-color-level($color, $alert-bg-level), theme-color-level($color, $alert-border-level), theme-color-level($color, $alert-color-level)); + } +} diff --git a/assets/sass/vendor/bootstrap/_badge.scss b/assets/sass/vendor/bootstrap/_badge.scss new file mode 100644 index 00000000..2082f058 --- /dev/null +++ b/assets/sass/vendor/bootstrap/_badge.scss @@ -0,0 +1,54 @@ +// Base class +// +// Requires one of the contextual, color modifier classes for `color` and +// `background-color`. + +.badge { + display: inline-block; + padding: $badge-padding-y $badge-padding-x; + @include font-size($badge-font-size); + font-weight: $badge-font-weight; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + @include border-radius($badge-border-radius); + @include transition($badge-transition); + + @at-root a#{&} { + @include hover-focus { + text-decoration: none; + } + } + + // Empty badges collapse automatically + &:empty { + display: none; + } +} + +// Quick fix for badges in buttons +.btn .badge { + position: relative; + top: -1px; +} + +// Pill badges +// +// Make them extra rounded with a modifier to replace v3's badges. + +.badge-pill { + padding-right: $badge-pill-padding-x; + padding-left: $badge-pill-padding-x; + @include border-radius($badge-pill-border-radius); +} + +// Colors +// +// Contextual variations (linked badges get darker on :hover). + +@each $color, $value in $theme-colors { + .badge-#{$color} { + @include badge-variant($value); + } +} diff --git a/assets/sass/vendor/bootstrap/_breadcrumb.scss b/assets/sass/vendor/bootstrap/_breadcrumb.scss new file mode 100644 index 00000000..be309506 --- /dev/null +++ b/assets/sass/vendor/bootstrap/_breadcrumb.scss @@ -0,0 +1,41 @@ +.breadcrumb { + display: flex; + flex-wrap: wrap; + padding: $breadcrumb-padding-y $breadcrumb-padding-x; + margin-bottom: $breadcrumb-margin-bottom; + list-style: none; + background-color: $breadcrumb-bg; + @include border-radius($breadcrumb-border-radius); +} + +.breadcrumb-item { + // The separator between breadcrumbs (by default, a forward-slash: "/") + + .breadcrumb-item { + padding-left: $breadcrumb-item-padding; + + &::before { + display: inline-block; // Suppress underlining of the separator in modern browsers + padding-right: $breadcrumb-item-padding; + color: $breadcrumb-divider-color; + content: $breadcrumb-divider; + } + } + + // IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built + // without `