Skip to content

refactor(scss): drop dead selectors and modernize .tag-input#1466

Open
alphatownsman wants to merge 1 commit intoneodb-social:mainfrom
alphatownsman:refactor/scss-cleanup
Open

refactor(scss): drop dead selectors and modernize .tag-input#1466
alphatownsman wants to merge 1 commit intoneodb-social:mainfrom
alphatownsman:refactor/scss-cleanup

Conversation

@alphatownsman
Copy link
Copy Markdown
Member

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 **/*.html and **/*.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 and clear mixin. Keep entity-card, entity-sort(-control), main-section-wrapper, img.emoji.
  • _legacy2.scss: drop unused input:invalid#position. #modal, .modal-*, .add-to-list-modal__*, .donut/.hole, .gg-play-button-o are live and kept.
  • _dialog.scss: remove @keyframes fadeIn/fadeOut/zoomIn/zoomOut that were illegally nested inside dialog { }; identical top-level keyframes in _legacy2.scss cover both #modal and <dialog> usages.
  • _mark.scss: swap hard-coded #ccc, #d5d5d5, #00a1cc, #606c76 in .tag-input* for Pico tokens (--pico-muted-border-color, --pico-muted-color, --pico-primary); drop redundant -webkit-box/-ms-flexbox/-webkit-transition prefixes.
  • _common.scss: drop .post span.invisible (redundant with the broader span.invisible rule).

No file deletions, no import changes. All 22 partials in neodb.scss still compile.

Test plan

  • uv run pre-commit run -a clean
  • manage.py compilescss produces neodb.css without errors
  • Manual: .tag-input chips render correctly in both light and dark mode
  • Manual: add-to-collection and share-collection modals still animate in/out
  • Manual: profile/discover sort-shelves still drag, reorder, and hide
  • Manual: podcast play-button icon (.gg-play-button-o) still renders

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)
Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment on lines 135 to 158
// 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

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

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.

Comment on lines 8 to 9
// Large devices (desktops, 992px and up)
$large-devices: 767.98px
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The comment for $large-devices mentions '992px and up', but the variable is set to 767.98px. This is inconsistent and misleading. The comment should be updated to reflect the actual value used in the code.

@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 18, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 60.86%. Comparing base (d5f57ae) to head (fe38c2e).

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.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Wishlist

Development

Successfully merging this pull request may close these issues.

1 participant