refactor(scss): drop dead selectors and modernize .tag-input#1466
refactor(scss): drop dead selectors and modernize .tag-input#1466alphatownsman wants to merge 1 commit intoneodb-social:mainfrom
Conversation
Removes ~860 lines of unreferenced SCSS accumulated in the legacy partials:
- _legacy.sass: trim dead blocks (entity-list/detail/desc/marks/reviews,
review-head, related-user-list, action/mark/review/report/import-panel,
user-profile/relation, relation-dropdown, track-carousel,
aside-section-wrapper, add-entity-entries, dividing-line, tag-collection,
unused vars and clear mixin); keep entity-card, entity-sort(-control),
main-section-wrapper, img.emoji
- _legacy2.scss: drop unused input:invalid#position
- _dialog.scss: remove keyframes nested inside dialog{}; top-level copies
in _legacy2.scss cover both usages
- _mark.scss: swap hardcoded colors in .tag-input for Pico CSS variables
and drop -webkit-/-ms- flex/transition prefixes
- _common.scss: drop .post span.invisible (redundant with broader rule)
There was a problem hiding this comment.
Code Review
This pull request performs a significant cleanup of legacy SCSS and Sass files, removing unused styles, keyframes, and variables while modernizing code by replacing hardcoded colors with CSS variables and removing obsolete vendor prefixes. Feedback focuses on _legacy.sass, specifically regarding the incorrect ordering of max-width media queries—which necessitated the use of !important—and a discrepancy between the documentation and the actual value assigned to the $large-devices breakpoint.
| // Small devices (landscape phones, 576px and up) | ||
| @media (max-width: $small-devices) | ||
| .entity-list | ||
| & &__entity | ||
| // flex-direction: column | ||
| // margin-bottom: 30px | ||
| & &__entity-text | ||
| // margin-left: 0 | ||
| & &__entity-img-wrapper | ||
| // margin-bottom: 8px | ||
| & &__entity-img | ||
| max-width: 25vw | ||
| min-width: 25vw | ||
| & &__entity-info | ||
| // max-width: unset | ||
| white-space: unset | ||
| & &__rating--empty + &__entity-info | ||
| // max-width: 70% | ||
| & &__entity-brief | ||
| -webkit-line-clamp: 5 | ||
|
|
||
| .action-bar | ||
| display: flex | ||
| flex-direction: column | ||
|
|
||
| .entity-detail | ||
| flex-direction: column | ||
| & &__title | ||
| margin-bottom: 5px | ||
| & &__info | ||
| margin-left: 0 | ||
| float: none | ||
| display: flex | ||
| flex-direction: column | ||
| width: 100% | ||
| & &__img | ||
| margin-bottom: 24px | ||
| float: none | ||
| height: unset | ||
| max-width: 170px; | ||
| & &__fields | ||
| width: unset | ||
| margin-left: unset | ||
| & + .tag-collection | ||
| margin-left: -3px | ||
|
|
||
| .entity-marks | ||
| & &__mark-list | ||
|
|
||
| & &__mark | ||
|
|
||
| & &__rating-star | ||
|
|
||
| & &__rating-star + &__mark-time | ||
| // display: block | ||
|
|
||
| .dividing-line | ||
| margin-top: 24px | ||
|
|
||
| .entity-sort | ||
| & &__entity | ||
| flex-basis: 50% | ||
| // margin-left: 10px | ||
| // margin-right: 10px | ||
| & &__entity-img | ||
| height: 130px | ||
|
|
||
| .review-head | ||
| & &__info | ||
| float: unset | ||
| & &__actions | ||
| float: unset | ||
|
|
||
| .track-carousel | ||
| &__content | ||
| padding-bottom: 10px | ||
| &__track | ||
| min-width: 31% | ||
| max-width: 31% | ||
| margin-right: 4.5% | ||
|
|
||
| .entity-card | ||
| &--horizontal | ||
| flex-direction: column !important | ||
| & &__info-wrapper | ||
| margin-left: 10px !important | ||
| &--horizontal | ||
| margin-left: 0 !important | ||
|
|
||
| // Medium devices (tablets, 768px and up) | ||
| @media (max-width: $medium-devices) | ||
| .calendar_view | ||
| overflow-x: scroll | ||
|
|
||
| // Large devices (desktops, 992px and up) | ||
| @media (max-width: $large-devices) | ||
| .main-section-wrapper | ||
| padding: $main-section-padding-mobile | ||
|
|
||
| .entity-detail | ||
| display: flex | ||
| & &__info | ||
| // display: flex | ||
| // Extra large devices (large desktops, 1200px and up) | ||
| @media (max-width: $x-large-devices) | ||
| pass | ||
|
|
||
| $aside-section-padding: 28px 25px 12px 25px | ||
| $aside-section-padding-mobile: 24px 25px 10px 25px | ||
|
|
||
| .aside-section-wrapper | ||
| display: flex | ||
| flex: 1 | ||
| flex-direction: column | ||
| // align-items: center | ||
| width: 100% | ||
| padding: $aside-section-padding | ||
| background-color: $color-bright | ||
| margin-bottom: 30px | ||
| overflow: auto | ||
|
|
||
| &--transparent | ||
| background-color: unset | ||
| &--collapse | ||
| padding: unset | ||
|
|
||
| .add-entity-entries | ||
|
|
||
| & &__entry | ||
| margin-bottom: 10px | ||
|
|
||
| & &__label | ||
| font-size: 1.2em | ||
| margin-bottom: 8px | ||
|
|
||
| & &__button | ||
| line-height: unset; | ||
| height: unset; | ||
| padding: 4px 15px; | ||
| margin: 5px; | ||
|
|
||
| .action-panel | ||
| margin-bottom: 20px | ||
|
|
||
| & &__label | ||
| // font-size: 1.2em | ||
| font-weight: bold | ||
| margin-bottom: 12px | ||
|
|
||
| & &__button-group | ||
| display: flex | ||
| justify-content: space-between | ||
| &--center | ||
| justify-content: center | ||
|
|
||
| & &__button | ||
| line-height: unset | ||
| height: unset | ||
| padding: 4px 15px | ||
| margin: 0 5px | ||
| // width: 100% | ||
|
|
||
| .mark-panel | ||
| margin-bottom: 20px | ||
|
|
||
| & &__status | ||
| font-weight: bold | ||
|
|
||
| & &__rating-star | ||
| position: relative | ||
| top: 2px | ||
|
|
||
| & &__actions | ||
| float: right | ||
| & form | ||
| display: inline | ||
|
|
||
| & &__time | ||
| color: $color-light | ||
| margin-bottom: 10px | ||
|
|
||
| & &__content | ||
|
|
||
| & &__clear | ||
| @include clear | ||
|
|
||
| .review-panel | ||
| & &__label | ||
| font-weight: bold | ||
| & &__actions | ||
| float: right | ||
| & &__time | ||
| color: $color-light | ||
| margin-bottom: 10px | ||
|
|
||
| & &__review-title | ||
| display: block | ||
| margin-bottom: 15px | ||
| font-weight: bold | ||
|
|
||
| & &__clear | ||
| @include clear | ||
|
|
||
| .user-profile | ||
| & &__header | ||
| display: flex | ||
| align-items: flex-start | ||
| margin-bottom: 15px | ||
|
|
||
| & &__avatar | ||
| width: 72px | ||
|
|
||
| & &__username | ||
| font-size: large | ||
| margin-left: 10px | ||
| margin-bottom: 0 | ||
|
|
||
| & &__bio | ||
|
|
||
| & &__report-link | ||
| color: $color-light | ||
|
|
||
| .user-relation | ||
| & &__label | ||
| display: inline-block | ||
| font-size: large | ||
| margin-bottom: 10px | ||
|
|
||
| & &__more-link | ||
| margin-left: 5px | ||
|
|
||
| & &__related-user-list | ||
| display: flex | ||
| justify-content: flex-start | ||
| &:last-of-type | ||
| margin-bottom: 0 | ||
|
|
||
| & &__related-user | ||
| flex-basis: 25% | ||
| padding: 0px 3px | ||
| text-align: center | ||
| display: inline-block | ||
| overflow: hidden | ||
| & > a | ||
| &:hover | ||
| color: $color-secondary | ||
|
|
||
| & &__related-user-avatar | ||
| background-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7") | ||
| width: 48px | ||
| height: 48px | ||
| @media (min-width: $small-devices) and (max-width: $large-devices) | ||
| height: unset | ||
| width: 60% | ||
| max-width: 96px | ||
|
|
||
|
|
||
| & &__related-user-name | ||
| color: inherit | ||
| overflow: hidden | ||
| text-overflow: ellipsis | ||
| // display: -webkit-box; | ||
| -webkit-box-orient: vertical; | ||
| -webkit-line-clamp: 2; | ||
|
|
||
| $panel-padding : 0 | ||
|
|
||
| .report-panel | ||
| & &__label | ||
| display: inline-block | ||
| margin-bottom: 10px | ||
|
|
||
| & &__body | ||
| padding-left: $panel-padding | ||
|
|
||
| & &__report-list | ||
|
|
||
| & &__report | ||
| margin: 2px 0 | ||
|
|
||
| & &__user-link | ||
| margin: 0 2px | ||
|
|
||
| & &__all-link | ||
| margin-left: 5px | ||
|
|
||
| .import-panel | ||
| overflow-x: hidden | ||
|
|
||
| & &__label | ||
| display: inline-block | ||
| margin-bottom: 10px | ||
|
|
||
| & &__body | ||
| padding-left: $panel-padding | ||
| border: 2px dashed #00a1cc | ||
| padding: 6px 9px | ||
| form | ||
| margin: 0 | ||
|
|
||
| @media (max-width: $large-devices) | ||
| border: unset | ||
| padding-left: 0 | ||
|
|
||
| & &__help | ||
| background-color: $color-quinary | ||
| border-radius: 100000px | ||
| display: inline-block | ||
| width: 16px | ||
| height: 16px | ||
| text-align: center | ||
| font-size: 12px | ||
| cursor: help | ||
|
|
||
| & &__checkbox | ||
| display: inline-block | ||
| margin-right: 10px | ||
| label | ||
| display: inline | ||
| input[type="checkbox"] | ||
| margin: 0 | ||
| position: relative | ||
| top: 2px | ||
| &--last | ||
| margin-right: 0 | ||
|
|
||
| & &__file-input | ||
| margin-top: 10px | ||
|
|
||
| & &__button | ||
| line-height: unset | ||
| height: unset | ||
| padding: 4px 15px | ||
|
|
||
| & &__progress | ||
| padding-top: 10px | ||
| // padding-top: 4px | ||
| &:not(:first-child) | ||
| border-top: $color-tertiary 1px dashed | ||
| label | ||
| display: inline | ||
| progress | ||
| background-color: $color-quaternary | ||
| border-radius: 0 | ||
| height: 10px | ||
| width: 54% | ||
|
|
||
| progress::-webkit-progress-bar | ||
| background-color: $color-quaternary | ||
|
|
||
| progress::-webkit-progress-value | ||
| background-color: $color-primary | ||
|
|
||
| progress::-moz-progress-bar | ||
| background-color: $color-quaternary | ||
|
|
||
| & &__last-task | ||
| &:not(:first-child) | ||
| padding-top: 4px | ||
| border-top: $color-tertiary 1px dashed | ||
| .index:not(:last-of-type) | ||
| margin-right: 8px | ||
|
|
||
| & &__fail-urls | ||
| margin-top: 10px | ||
| li | ||
| word-break: break-all | ||
| ul | ||
| // padding: 4px | ||
| max-height: 100px | ||
| overflow-y: auto | ||
|
|
||
|
|
||
| .relation-dropdown | ||
| & &__button | ||
| display: none | ||
|
|
||
| .entity-card | ||
| display: flex | ||
| margin-bottom: 10px | ||
| flex-direction: column | ||
| &--horizontal | ||
| flex-direction: row | ||
| .entity-card | ||
| flex-direction: row | ||
| & &__info-wrapper | ||
| margin-left: 30px | ||
|
|
There was a problem hiding this comment.
When using max-width media queries, they should be ordered from largest to smallest. Currently, the smaller breakpoint ($small-devices) is defined before the larger one ($large-devices), which causes the latter to override the former for small devices. This necessitated the use of !important to force the small-screen styles. Swapping the order allows for a cleaner cascade and removes the need for !important.
| // Large devices (desktops, 992px and up) | ||
| $large-devices: 767.98px |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #1466 +/- ##
==========================================
- Coverage 60.86% 60.86% -0.01%
==========================================
Files 268 268
Lines 26450 26450
Branches 3925 3925
==========================================
- Hits 16100 16098 -2
- Misses 9016 9018 +2
Partials 1334 1334 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Summary
Removes ~866 lines of unreferenced SCSS accumulated in the legacy partials, with no behavior change for anything currently rendered. Every class that remains is used by a live template or JS file (verified via grep across
**/*.htmland**/*.js)._legacy.sass(981 → 170): trim dead blocks (entity-list,entity-detail,entity-desc/marks/reviews,review-head,related-user-list,action-panel,mark-panel,review-panel,user-profile,user-relation,report-panel,import-panel,relation-dropdown,track-carousel,aside-section-wrapper,add-entity-entries,dividing-line,tag-collection), unused vars andclearmixin. Keepentity-card,entity-sort(-control),main-section-wrapper,img.emoji._legacy2.scss: drop unusedinput:invalid#position.#modal,.modal-*,.add-to-list-modal__*,.donut/.hole,.gg-play-button-oare live and kept._dialog.scss: remove@keyframes fadeIn/fadeOut/zoomIn/zoomOutthat were illegally nested insidedialog { }; identical top-level keyframes in_legacy2.scsscover both#modaland<dialog>usages._mark.scss: swap hard-coded#ccc,#d5d5d5,#00a1cc,#606c76in.tag-input*for Pico tokens (--pico-muted-border-color,--pico-muted-color,--pico-primary); drop redundant-webkit-box/-ms-flexbox/-webkit-transitionprefixes._common.scss: drop.post span.invisible(redundant with the broaderspan.invisiblerule).No file deletions, no import changes. All 22 partials in
neodb.scssstill compile.Test plan
uv run pre-commit run -acleanmanage.py compilescssproducesneodb.csswithout errors.tag-inputchips render correctly in both light and dark mode.gg-play-button-o) still renders