[//]: #@corifeus-header # π€ P3X Gitlist - A decorated enhanced elegant, feature rich and modern private git ui repository viewer [//]: #@corifeus-header:end # Migration: Bootstrap 3 β 5, LESS β SCSS, jQuery 3.4 β 3.7, snackbarjs β BS5 Toasts ## Overview This document covers the full package migration done in a single session. If the session crashes, use this to pick up where we left off. **Status: In progress - NOT YET COMMITTED** --- ## 1. Bootstrap 3.4.1 β Bootstrap 5.3.8 ### Build system: LESS β SCSS - **Removed**: `grunt-contrib-less`, `less-loader` from devDependencies - **Added**: `grunt-sass` (^3.1.0), `sass` (^1.86.0) to devDependencies - **Added**: `@popperjs/core` (^2.11.8) to dependencies (required by BS5) - **Removed**: entire `src/browser/less/` directory (23 .less files + theme dir with solar custom theme) - **Created**: `src/browser/scss/` directory with all converted SCSS files #### Files created in src/browser/scss/: - `_default.scss` - main custom styles (converted from default.less) - `_bs3-compat.scss` - **compatibility layer** mapping BS3 variable names to BS5 equivalents - `_blame.scss`, `_browser.scss`, `_clone-button.scss`, `_codemirror.scss`, `_commit.scss`, `_commits-lists.scss`, `_file-fragment.scss`, `_file.scss`, `_footer.scss`, `_html-viewer.scss`, `_index.scss`, `_list-group-striped.scss`, `_markdown.scss`, `_menu.scss`, `_navigation.scss`, `_network.scss`, `_overlay.scss`, `_pager.scss`, `_search.scss`, `_tree.scss`, `_treegraph.scss` - `style.scss` - entry point (no underscore prefix) - `theme/` - auto-generated per-theme entry files by grunt #### LESS β SCSS syntax changes applied: - `@variable` β `$variable` (all Bootstrap variable references) - `@import (less) "file"` β `@import "file"` - `fadein(@var, 50%)` β `rgba($var, 0.5)` - Local variables like `@fontSize` β `$fontSize` - Snackbar imports removed (see section 3) #### BS3-compat.scss variable mappings: ```scss $padding-base-vertical: $spacer * .375 $padding-base-horizontal: $spacer * .75 $navbar-height: 3.5rem $gray-lighter: $gray-200 $navbar-default-bg: $gray-200 $navbar-inverse-bg: $gray-900 $text-color: $body-color $table-bg-accent: rgba(0, 0, 0, 0.05) // BS5 uses CSS vars, can't nest in rgba() $state-danger-text: #a94442 // hardcoded, BS5 uses CSS vars $brand-primary: $primary $list-group-border: $list-group-border-color ``` #### Build config changes: - `Gruntfile.js`: `grunt-contrib-less` β `grunt-sass`, task names `less` β `sass` - `src/browser/grunt/less.js` β `src/browser/grunt/sass.js` (new file) - Scans `node_modules/bootswatch/dist/{theme}/` (BS5 path) - Import order: variables β bootstrap β bootswatch β bs3-compat β default - Solar theme now from bootswatch natively (no custom files) - Cache path: `build/sass/` instead of `build/less/` - `webpack.config.js`: removed `less-loader` from CSS rule, changed test from `/\.(css|less)$/` to `/\.css$/` - `package.json` scripts: `less-watch` β `sass-watch`, `default-less` β `default-sass` - Added `fix-perms` grunt task to handle Docker root-owned files in `public/prod/` and `build/` #### Themes: 18 β 27 - **Removed**: `paper`, `readable` (not in Bootswatch 5) - **Added**: `brite`, `litera`, `lux`, `materia`, `minty`, `morph`, `pulse`, `quartz`, `sketchy`, `vapor`, `zephyr` - **Solar**: now from Bootswatch 5 natively, custom `src/browser/less/theme/solar/` deleted ### Twig template changes (18 files) #### Data attributes (all files): - `data-toggle` β `data-bs-toggle` - `data-dismiss` β `data-bs-dismiss` - `data-target` β `data-bs-target` - `data-placement` β `data-bs-placement` #### CSS class replacements: - `btn-default` β `btn-secondary` - `pull-left` β `float-start` - `pull-right` β `float-end` - `hidden-xs` β `d-none d-sm-block` (or `d-none d-sm-inline-block`) - `visible-xs` β `d-block d-sm-none` (or `d-inline-block d-sm-none`) - `panel panel-default` β `card` - `panel-heading` β `card-header` - `panel-body` β `card-body` - `label label-primary` β `badge bg-primary` - `label label-info` β `badge bg-info` - `input-group-addon` β `input-group-text` - `input-group-btn` β removed wrapper (buttons directly in input-group) - `` β removed (BS5 dropdown-toggle has built-in caret) - `` β removed - `