
* fix scraping failure with wepb image (merge upstream/fix-webp-scrape) * add filetype to requirements * add proxycrawl.com as fallback for douban scraper * load 3p js/css from cdn * add fix-cover task * fix book/album cover tasks * scrapestack * bandcamp scrape and preview ; manage.py scrape <url> ; make ^C work when DEBUG * use scrapestack when fix cover * add user agent to improve compatibility * search BandCamp for music albums * add missing MovieGenre * fix search 500 when song has no parent album * adjust timeout * individual scrapers * fix tmdb parser * export marks via rq; pref to send public toot; move import to data page * fix spotify import * fix edge cases * export: fix dupe tags * use rq to manage doufen import * add django command to manage rq jobs * fix export edge case * tune rq admin * fix detail page 502 step 1: async pull mastodon follow/block/mute list * fix detail page 502 step 2: calculate relationship by local cached data * manual sync mastodon follow info * domain_blocks parsing fix * marks by who i follows * adjust label * use username in urls * add page to list a user\'s review * review widget on user home page * fix preview 500 * fix typo * minor fix * fix google books parsing * allow mark/review visible to oneself * fix auto sync masto for new user * fix search 500 * add command to restart a sync task * reset visibility * delete user data * fix tag search result pagination * not upgrade to django 4 yet * basic doc * wip: collection * wip * wip * collection use htmx * show in-collection section for entities * fix typo * add su for easier debug * fix some 500s * fix login using alternative domain * hide data from disabled user * add item to list from detail page * my tags * collection: inline comment edit * show number of ratings * fix collection delete * more detail in collection view * use item template in search result * fix 500 * write index to meilisearch * fix search * reindex in batch * fix 500 * show search result from meilisearch * more search commands * index less fields * index new items only * search highlights * fix 500 * auto set search category * classic search if no meili server * fix index stats error * support typesense backend * workaround typesense bug * make external search async * fix 500, typo * fix cover scripts * fix minor issue in douban parser * supports m.douban.com and customized bandcamp domain * move account * reword with gender-friendly and instance-neutral language * Friendica does not have vapid_key in api response * enable anonymous search * tweak book result template * API v0 API v0 * fix meilisearch reindex * fix search by url error * login via twitter.com * login via pixelfed * minor fix * no refresh on inactive users * support refresh access token * get rid of /users/number-id/ * refresh twitter handler automatically * paste image when review * support PixelFed (very long token) * fix django-markdownx version * ignore single quote for meilisearch for now * update logo * show book review/mark from same isbn * show movie review/mark from same imdb * fix login with older mastodon servers * import Goodreads book list and profile * add timestamp to Goodreads import * support new google books api * import goodreads list * minor goodreads fix * click corner action icon to add to wishlist * clean up duplicated code * fix anonymous search * fix 500 * minor fix search 500 * show rating only if votes > 5 * Entity.refresh_rating() * preference to append text when sharing; clean up duplicated code * fix missing data for user tagged view * fix page link for tag view * fix 500 when language field longer than 10 * fix 500 when sharing mark for song * fix error when reimport goodread profile * fix minor typo * fix a rare 500 * error log dump less * fix tags in marks export * fix missing param in pagination * import douban review * clarify text * fix missing sheet in review import * review: show in progress * scrape douban: ignore unknown genre * minor fix * improve review import by guess entity urls * clear guide text for review import * improve review import form text * workaround some 500 * fix mark import error * fix img in review import * load external results earlier * ignore search server errors * simplify user register flow to avoid inconsistent state * Add a learn more link on login page * Update login.html * show mark created timestamp as mark time * no 500 for api error * redirect for expired tokens * ensure preference object created. * mark collections * tag list * fix tag display * fix sorting etc * fix 500 * fix potential export 500; save shared links * fix share to twittwe * fix review url * fix 500 * fix 500 * add timeline, etc * missing status change in timeline * missing id in timeline * timeline view by default * workaround bug in markdownx... * fix typo * option to create new collection when add from detail page * add missing announcement and tags in timeline home * add missing announcement * add missing announcement * opensearch * show fediverse shared link * public review no longer requires login * fix markdownx bug * fix 500 * use cloudflare cdn * validate jquery load and domain input * fix 500 * tips for goodreads import * collaborative collection * show timeline and profile link on nav bar * minor tweak * share collection * fix Goodreads search * show wish mark in timeline * resync failed urls with local proxy * resync failed urls with local proxy: check proxy first * scraper minor fix * resync failed urls * fix fields limit * fix douban parsing error * resync * scraper minor fix * scraper minor fix * scraper minor fix * local proxy * local proxy * sync default config from neodb * configurable site name * fix 500 * fix 500 for anonymous user * add sentry * add git version in log * add git version in log * no longer rely on cdnjs.cloudflare.com * move jq/cash to _common_libs template partial * fix rare js error * fix 500 * avoid double submission error * import tag in lower case * catch some js network errors * catch some js network errors * support more goodread urls * fix unaired tv in tmdb * support more google book urls * fix related series * more goodreads urls * robust googlebooks search * robust search * Update settings.py * Update scraper.py * Update requirements.txt * make nicedb work * doc update * simplify permission check * update doc * update doc for bug report link * skip spotify tracks * fix 500 * improve search api * blind fix import compatibility * show years for movie in timeline * show years for movie in timeline; thinner font * export reviews * revert user home to use jquery https://github.com/fabiospampinato/cash/issues/246 * IGDB * use IGDB for Steam * use TMDB for IMDb * steam: igdb then fallback to steam * keep change history * keep change history: add django settings * Steam: keep localized title/brief while merging IGDB * basic Docker support * rescrape * Create codeql-analysis.yml * Create SECURITY.md * Create pysa.yml Co-authored-by: doubaniux <goodsir@vivaldi.net> Co-authored-by: Your Name <you@example.com> Co-authored-by: Their Name <they@example.com> Co-authored-by: Mt. Front <mfcndw@gmail.com>
400 lines
No EOL
8.7 KiB
Sass
400 lines
No EOL
8.7 KiB
Sass
$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
|
|
|
|
& &__img
|
|
height: 150px
|
|
|
|
& &__rating-star
|
|
position: relative
|
|
top: 4px
|
|
left: -3px
|
|
|
|
& &__rating-score
|
|
position: relative
|
|
top: 1px
|
|
margin-left: 2px
|
|
|
|
& &__title
|
|
margin-bottom: 10px
|
|
margin-top: 5px
|
|
|
|
& &__info-wrapper
|
|
&--horizontal
|
|
margin-left: 20px
|
|
|
|
& &__img-wrapper
|
|
flex-basis: 100px
|
|
|
|
|
|
// Small devices (landscape phones, 576px and up)
|
|
@media (max-width: $small-devices)
|
|
.add-entity-entries
|
|
display: block !important
|
|
& &__button
|
|
width: 100%
|
|
margin: 5px 0 5px 0;
|
|
|
|
.aside-section-wrapper
|
|
&:first-child
|
|
margin-right: 0 !important
|
|
margin-bottom: 0 !important
|
|
&--singular:first-child
|
|
margin-bottom: 20px !important
|
|
// &--no-padding
|
|
// padding: $aside-section-padding-mobile !important
|
|
// margin-top: 0 !important
|
|
.action-panel
|
|
flex-direction: column !important
|
|
|
|
.entity-card
|
|
&--horizontal
|
|
flex-direction: column !important
|
|
// 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)
|
|
pass
|
|
// Large devices (desktops, 992px and up)
|
|
@media (max-width: $large-devices)
|
|
.add-entity-entries
|
|
display: flex
|
|
justify-content: space-around
|
|
|
|
.aside-section-wrapper
|
|
padding: $aside-section-padding-mobile
|
|
|
|
margin-top: 20px
|
|
// &:not(:first-child)
|
|
&:not(:last-child)
|
|
margin-right: 20px
|
|
&--collapse
|
|
padding: $aside-section-padding-mobile !important
|
|
margin-top: 0
|
|
margin-bottom: 0
|
|
&:first-child
|
|
margin-right: 0
|
|
&--no-margin
|
|
margin: 0
|
|
|
|
.action-panel
|
|
flex-direction: row
|
|
& &__button-group
|
|
justify-content: space-evenly
|
|
|
|
.relation-dropdown
|
|
margin-bottom: 20px
|
|
& &__button
|
|
padding-bottom: 10px
|
|
background-color: $color-bright
|
|
width: 100%
|
|
display: flex
|
|
justify-content: center
|
|
align-items: center
|
|
cursor: pointer
|
|
transition: transform 0.3s
|
|
&:focus
|
|
background-color: red
|
|
|
|
& &__button > .icon-arrow
|
|
transition: transform 0.3s
|
|
|
|
& &__button:hover > .icon-arrow > svg
|
|
fill: $color-primary
|
|
|
|
& &__button > .icon-arrow--expand
|
|
transform: rotate(-180deg)
|
|
|
|
& &__button + &__body--expand
|
|
max-height: 2000px
|
|
transition: max-height 1s ease-in
|
|
|
|
& &__body
|
|
background-color: $color-bright
|
|
max-height: 0
|
|
transition: max-height 1s ease-out
|
|
overflow: hidden
|
|
|
|
.entity-card
|
|
flex-direction: row
|
|
& &__info-wrapper
|
|
margin-left: 30px
|
|
// Extra large devices (large desktops, 1200px and up)
|
|
@media (max-width: $x-large-devices)
|
|
pass |