diff --git a/Gemfile b/Gemfile index a4853dc9..ca9375ed 100644 --- a/Gemfile +++ b/Gemfile @@ -57,7 +57,7 @@ gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] # Custom -gem 'bootstrap', '~> 4.6.0' +gem 'bootstrap', '~> 5.0.1' gem 'inline_svg', '~> 1.7' gem 'jquery-rails' gem 'kramdown', '~> 2.3' diff --git a/Gemfile.lock b/Gemfile.lock index 4484807f..405204eb 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -62,14 +62,14 @@ GEM zeitwerk (~> 2.3) addressable (2.7.0) public_suffix (>= 2.0.2, < 5.0) - autoprefixer-rails (10.2.0.0) - execjs + autoprefixer-rails (10.2.5.0) + execjs (< 2.8.0) bindex (0.8.1) bootsnap (1.7.2) msgpack (~> 1.0) - bootstrap (4.6.0) + bootstrap (5.0.1) autoprefixer-rails (>= 9.1.0) - popper_js (>= 1.14.3, < 2) + popper_js (>= 2.9.2, < 3) sassc-rails (>= 2.0.0) builder (3.2.4) byebug (11.1.3) @@ -89,7 +89,7 @@ GEM nokogiri (>= 1.4.3) erubi (1.10.0) execjs (2.7.0) - ffi (1.14.2) + ffi (1.15.0) globalid (0.4.2) activesupport (>= 4.2.0) i18n (1.8.10) @@ -126,7 +126,7 @@ GEM mini_portile2 (~> 2.5.0) racc (~> 1.4) pg (1.2.3) - popper_js (1.16.0) + popper_js (2.9.2) public_suffix (4.0.6) puma (5.3.1) nio4r (~> 2.0) @@ -229,7 +229,7 @@ PLATFORMS DEPENDENCIES bootsnap (>= 1.4.4) - bootstrap (~> 4.6.0) + bootstrap (~> 5.0.1) byebug capybara (>= 3.26) diffy diff --git a/app/assets/images/custom.png b/app/assets/images/custom.png deleted file mode 100644 index e7dad6d6..00000000 Binary files a/app/assets/images/custom.png and /dev/null differ diff --git a/app/assets/javascripts/password_controller.js b/app/assets/javascripts/password_controller.js index c7221919..a1939aa0 100644 --- a/app/assets/javascripts/password_controller.js +++ b/app/assets/javascripts/password_controller.js @@ -1,8 +1,8 @@ $(document).ready(function() { 'use strict'; - var $bootstrap = $('#exampleInputPassword').next('.input-group-append'); - var $simple_form = $('#user_password').next('.input-group-append'); + var $bootstrap = $("#exampleInputPassword").next(".input-group-text"); + var $simple_form = $("#user_password").next(".input-group-text"); var $pw_appends = $bootstrap.add($simple_form); @@ -11,10 +11,10 @@ $(document).ready(function() { $(this).toggleClass('active'); if ( $(this).hasClass('active') ) { $(this).prev().prop("type", "text"); - $(this).find('.input-group-text').html("🙈"); + $(this).text("🙈"); } else { $(this).prev().prop("type", "password"); - $(this).find('.input-group-text').html("🙊"); + $(this).text("🙊"); } $(this).prev().focus(); }); diff --git a/app/assets/javascripts/toggle_controller.js b/app/assets/javascripts/toggle_controller.js index 9ef1a81b..9938f770 100644 --- a/app/assets/javascripts/toggle_controller.js +++ b/app/assets/javascripts/toggle_controller.js @@ -2,8 +2,8 @@ $(document).ready(function() { 'use strict'; var $grid_target = $('[data-target="toggle.grid"]'); - var $button = $('[data-toggle="button"]'); - var $buttons = $('[data-toggle="buttons"]'); + var $button = $('[data-bs-toggle="button"]'); + var $buttons = $('[data-bs-toggle="buttons"]'); // init if ( $grid_target.length >= 2 ) { @@ -18,9 +18,9 @@ $(document).ready(function() { // stack / split view $buttons.click(function(event) { - event.preventDefault(); - if ( $(event.target).hasClass("active") ) { return } - $grid_target.toggleClass("col-md-12"); + if ( $(event.target).hasClass("btn") ) { return; } + var stack = $buttons.find(":checked").attr("id") === "stack"; + $grid_target.toggleClass("col-md-12", stack); }); // swap by press "s" diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index baf024db..52197bf5 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -1,5 +1,56 @@ -$theme-colors: ( "bootstrap": #563d7c, "simpleform": #00617f ); -@import "bootstrap"; +/* + * Keep in sync with `assets/stylesheets/_bootstrap.scss` from + * `bootstrap-rubygem`. + */ + +@import "bootstrap/functions"; + +$custom-colors: ( "bootstrap": #563d7c, "simpleform": #00617f ); + +@import "bootstrap/variables"; +@import "bootstrap/mixins"; + +$theme-colors: map-merge($theme-colors, $custom-colors); + +@import "bootstrap/utilities"; + +// Layout & components +@import "bootstrap/root"; +@import "bootstrap/reboot"; +@import "bootstrap/type"; +@import "bootstrap/images"; +@import "bootstrap/containers"; +@import "bootstrap/grid"; +@import "bootstrap/tables"; +@import "bootstrap/forms"; +@import "bootstrap/buttons"; +@import "bootstrap/transitions"; +@import "bootstrap/dropdown"; +@import "bootstrap/button-group"; +@import "bootstrap/nav"; +@import "bootstrap/navbar"; +@import "bootstrap/card"; +@import "bootstrap/accordion"; +@import "bootstrap/breadcrumb"; +@import "bootstrap/pagination"; +@import "bootstrap/badge"; +@import "bootstrap/alert"; +@import "bootstrap/progress"; +@import "bootstrap/list-group"; +@import "bootstrap/close"; +@import "bootstrap/toasts"; +@import "bootstrap/modal"; +@import "bootstrap/tooltip"; +@import "bootstrap/popover"; +@import "bootstrap/carousel"; +@import "bootstrap/spinners"; +@import "bootstrap/offcanvas"; + +// Helpers +@import "bootstrap/helpers"; + +// Utilities +@import "bootstrap/utilities/api"; // App sections @import "application/breadcrumb"; diff --git a/app/assets/stylesheets/application/_breadcrumb.scss b/app/assets/stylesheets/application/_breadcrumb.scss index b205ea40..07e05a9f 100644 --- a/app/assets/stylesheets/application/_breadcrumb.scss +++ b/app/assets/stylesheets/application/_breadcrumb.scss @@ -1,6 +1,6 @@ .app-breadcrumb { - [data-toggle] { - @include media-breakpoint-down(sm) { + [data-bs-toggle] { + @include media-breakpoint-down(md) { & { display: none; } } } diff --git a/app/assets/stylesheets/simple_form-bootstrap/_form_collection_label.scss b/app/assets/stylesheets/simple_form-bootstrap/_form_collection_label.scss index c9bbcca8..26222836 100644 --- a/app/assets/stylesheets/simple_form-bootstrap/_form_collection_label.scss +++ b/app/assets/stylesheets/simple_form-bootstrap/_form_collection_label.scss @@ -7,27 +7,3 @@ } } } - -// optional custom form spacing -.custom-control-inline { - .custom-control-label { - &.collection_check_boxes, - &.collection_radio_buttons { - margin-right: .265625rem; - } - } -} - -// required custom form radio button fix -.form-group.radio_buttons { - > .custom-control { - @extend .custom-radio; - } -} - -// required custom form check box fix -.form-group.check_boxes { - > .custom-control { - @extend .custom-checkbox; - } -} diff --git a/app/assets/stylesheets/simple_form-bootstrap/_form_floating_labels.scss b/app/assets/stylesheets/simple_form-bootstrap/_form_floating_labels.scss deleted file mode 100644 index 5484b923..00000000 --- a/app/assets/stylesheets/simple_form-bootstrap/_form_floating_labels.scss +++ /dev/null @@ -1,106 +0,0 @@ -// extracted from: -// https://getbootstrap.com/docs/4.3/examples/floating-labels/ - -$sf-floating-input-padding-x: $input-padding-x !default; -$sf-floating-input-padding-y: $input-padding-y * 2 !default; - -.form-label-group { - position: relative; - margin-bottom: 1rem; -} - -.form-label-group > input, -.form-label-group > .custom-select:not([multiple]) { - height: 3.125rem; -} - -.form-label-group > textarea, -.form-label-group > input, -.form-label-group > select, -.form-label-group > label { - padding: $sf-floating-input-padding-y $sf-floating-input-padding-x; -} - -.form-label-group { - > label { - position: absolute; - top: 0; - left: 0; - display: block; - width: 100%; - margin-bottom: 0; /* Override default `