diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index bc646e211..4331abb49 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -28,7 +28,7 @@ body: label: Kavita Version Number - If you don not see your version number listed, please update Kavita and see if your issue still persists. multiple: false options: - - 0.8.2 - Stable + - 0.8.3 - Stable - Nightly Testing Branch validations: required: true diff --git a/API/Controllers/AccountController.cs b/API/Controllers/AccountController.cs index 2276a5a83..888be5eff 100644 --- a/API/Controllers/AccountController.cs +++ b/API/Controllers/AccountController.cs @@ -773,6 +773,7 @@ public class AccountController : BaseApiController { validationErrors.AddRange(await _accountService.ValidateUsername(dto.Username)); } + validationErrors.AddRange(await _accountService.ValidatePassword(user, dto.Password)); if (validationErrors.Any()) diff --git a/README.md b/README.md index e665a7e4e..0c083b900 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # []() Kavita
-![new_github_preview_stills](https://user-images.githubusercontent.com/735851/169657008-37812c18-5490-4e2a-9dcb-4806f8c87c69.gif) +![new_github_preview_stills](https://github.com/user-attachments/assets/f016b34f-3c4c-4f07-8e72-12cd6f4e71ea) -Kavita is a fast, feature rich, cross platform reading server. Built with a focus for being a full solution for all your reading needs. Setup your own server and share +Kavita is a fast, feature rich, cross-platform reading server. Built with a focus for being a full solution for all your reading needs. Set up your own server and share your reading collection with your friends and family! [![Release](https://img.shields.io/github/release/Kareadita/Kavita.svg?style=flat&maxAge=3600)](https://github.com/Kareadita/Kavita/releases) @@ -24,14 +24,14 @@ your reading collection with your friends and family! ## What Kavita Provides - Serve up Manga/Webtoons/Comics (cbr, cbz, zip/rar/rar5, 7zip, raw images) and Books (epub, pdf) - First class responsive readers that work great on any device (phone, tablet, desktop) -- Dark mode and customizable theming support -- External metadata integration and scrobbling for read status, ratings, and reviews (available via Kavita+) +- Customizable theming support: [Theme Repo](https://github.com/Kareadita/Themes) and [Documentation](https://wiki.kavitareader.com/guides/themes) +- External metadata integration and scrobbling for read status, ratings, and reviews (available via [Kavita+](https://wiki.kavitareader.com/kavita+)) - Rich Metadata support with filtering and searching - Ways to group reading material: Collections, Reading Lists (CBL Import), Want to Read - Ability to manage users with rich Role-based management for age restrictions, abilities within the app, etc - Rich web readers supporting webtoon, continuous reading mode (continue without leaving the reader), virtual pages (epub), etc +- Ability to customize your dashboard and side nav with smart filters, custom order and visibility toggles - Full Localization Support -- Ability to customize your dashboard and side nav with smart filters, custom order and visibility toggles. ## Support @@ -52,7 +52,7 @@ install methods and platforms. [https://wiki.kavitareader.com/installation/getting-started](https://wiki.kavitareader.com/installation/getting-started) ## Feature Requests -Got a great idea? Throw it up on [Discussions](https://github.com/Kareadita/Kavita/discussions/2529) or vote on another idea. Please check the [Project Board](https://github.com/Kareadita/Kavita/projects?type=classic) first for a list of planned features before you submit an idea. +Got a great idea? Throw it up on [Discussions](https://github.com/Kareadita/Kavita/discussions/2529) or vote on another idea. Many great features in Kavita are driven by our community. ## Notice Kavita is being actively developed and should be considered beta software until the 1.0 release. @@ -62,7 +62,7 @@ vision. You may lose data and have to restart. The Kavita team strives to avoid ## Donate If you like Kavita, have gotten good use out of it, or feel like you want to say thanks with a few bucks, feel free to donate. Money will go towards expenses related to Kavita. Back us through [OpenCollective](https://opencollective.com/Kavita#backer). You can also use [Paypal](https://www.paypal.com/paypalme/majora2007?locale.x=en_US), however your name will not show below. Kavita+ is also an -option which provides funding and you get a benefit. +option which provides funding, and you get a benefit. ## Kavita+ [Kavita+](https://wiki.kavitareader.com/kavita+) is a paid subscription that offers premium features that otherwise wouldn't be feasible to include in Kavita. It is ran and operated by majora2007, the creator and developer of Kavita. @@ -72,7 +72,7 @@ If you are interested, you can use the promo code `FIRSTTIME` for your initial s **If you already contribute via OpenCollective, please reach out to majora2007 for a provisioned license.** ## Localization -Thank you to [Weblate](https://hosted.weblate.org/engage/kavita/) who hosts our localization infrastructure pro-bono. If you want to see Kavita in your language, please help us localize. +Thank you to [Weblate](https://hosted.weblate.org/engage/kavita/) who hosts our localization infrastructure pro bono. If you want to see Kavita in your language, please help us localize. Translation status diff --git a/UI/Web/src/_card-item-common.scss b/UI/Web/src/_card-item-common.scss index 093b1ddd9..29924c495 100644 --- a/UI/Web/src/_card-item-common.scss +++ b/UI/Web/src/_card-item-common.scss @@ -160,16 +160,15 @@ $image-width: 160px; .card-title-container { display: flex; - justify-content: end; + justify-content: space-between; align-items: center; padding: 0 5px; .card-title { font-size: 0.8rem; margin: 0; - padding: 10px 0; text-align: center; - max-width: 120px; + max-width: 110px; a { overflow: hidden; @@ -178,14 +177,28 @@ $image-width: 160px; } } +.card-actions { + min-width: 15.82px; +} + +.card-format { + min-width: 22px; +} + ::ng-deep app-card-actionables .dropdown .dropdown-toggle { padding: 0 5px; } +.meta-title { + .card-title { + max-width: unset; + } +} + .card-title { font-size: 0.8rem; margin: 0; - padding: 10px; + padding: 10px 0; text-align: center; max-width: 120px; @@ -208,6 +221,9 @@ $image-width: 160px; .overlay-information { visibility: hidden; display: none; + .card-title { + padding: 10px; + } } .chapter, diff --git a/UI/Web/src/app/cards/card-item/card-item.component.html b/UI/Web/src/app/cards/card-item/card-item.component.html index 415f4c30a..6c23a0b27 100644 --- a/UI/Web/src/app/cards/card-item/card-item.component.html +++ b/UI/Web/src/app/cards/card-item/card-item.component.html @@ -73,9 +73,11 @@
@if (title.length > 0 || actions.length > 0) {
- @if (showFormat) { - - } + + @if (showFormat) { + + } + @if (isPromoted(); as isPromoted) { @@ -87,14 +89,13 @@ {{title}} } - + @if (actions && actions.length > 0) { - - - - } @else { - } + + + } +
} diff --git a/UI/Web/src/app/cards/card-item/card-item.component.scss b/UI/Web/src/app/cards/card-item/card-item.component.scss index 09471a3ff..1fb2791ee 100644 --- a/UI/Web/src/app/cards/card-item/card-item.component.scss +++ b/UI/Web/src/app/cards/card-item/card-item.component.scss @@ -1,5 +1 @@ @use '../../../card-item-common'; - -.card-title-container { - justify-content: center; -} diff --git a/UI/Web/src/app/cards/chapter-card/chapter-card.component.html b/UI/Web/src/app/cards/chapter-card/chapter-card.component.html index f249a922a..c39ce980c 100644 --- a/UI/Web/src/app/cards/chapter-card/chapter-card.component.html +++ b/UI/Web/src/app/cards/chapter-card/chapter-card.component.html @@ -73,6 +73,8 @@
+ + @if (chapter.isSpecial) { @@ -82,12 +84,11 @@ } - + @if (actions && actions.length > 0) { - - } +
diff --git a/UI/Web/src/app/cards/external-series-card/external-series-card.component.html b/UI/Web/src/app/cards/external-series-card/external-series-card.component.html index 776c355eb..886a93134 100644 --- a/UI/Web/src/app/cards/external-series-card/external-series-card.component.html +++ b/UI/Web/src/app/cards/external-series-card/external-series-card.component.html @@ -19,14 +19,16 @@
@if (data.name.length > 0) { + - {{data.name}} - } + } + +
diff --git a/UI/Web/src/app/cards/external-series-card/external-series-card.component.scss b/UI/Web/src/app/cards/external-series-card/external-series-card.component.scss index 2aec60dba..40de98a3a 100644 --- a/UI/Web/src/app/cards/external-series-card/external-series-card.component.scss +++ b/UI/Web/src/app/cards/external-series-card/external-series-card.component.scss @@ -9,6 +9,6 @@ a { } .card-title { - padding: 5px; + padding: 5px 0; max-width: unset; } \ No newline at end of file diff --git a/UI/Web/src/app/cards/volume-card/volume-card.component.html b/UI/Web/src/app/cards/volume-card/volume-card.component.html index 66a15d8b3..9484264d4 100644 --- a/UI/Web/src/app/cards/volume-card/volume-card.component.html +++ b/UI/Web/src/app/cards/volume-card/volume-card.component.html @@ -52,13 +52,23 @@ @if (libraryType === LibraryType.LightNovel || libraryType === LibraryType.Book) {
+ +
{{volume.name}}
+ + @if (actions && actions.length > 0) { + + + + }
}
+ + {{volume.name}} diff --git a/UI/Web/src/app/reading-list/_components/import-cbl/import-cbl.component.html b/UI/Web/src/app/reading-list/_components/import-cbl/import-cbl.component.html index 2300b2f73..ee122452b 100644 --- a/UI/Web/src/app/reading-list/_components/import-cbl/import-cbl.component.html +++ b/UI/Web/src/app/reading-list/_components/import-cbl/import-cbl.component.html @@ -10,6 +10,7 @@ @case (Step.Import) {

{{t('import-description')}}

+

{{t('cbl-repo') | safeHtml}}

diff --git a/UI/Web/src/assets/langs/en.json b/UI/Web/src/assets/langs/en.json index 0c499eac7..efff0d901 100644 --- a/UI/Web/src/assets/langs/en.json +++ b/UI/Web/src/assets/langs/en.json @@ -740,7 +740,8 @@ "required-field": "{{common.required-field}}", "valid-email": "{{common.valid-email}}", "password-validation": "{{validation.password-validation}}", - "register": "Register" + "register": "Register", + "error-label": "Error:" }, "confirm-email-change": { @@ -1461,6 +1462,7 @@ "theme": "Theme", "customize": "Customize", "cbl-import": "CBL Reading List", + "cbl-repo": "You can find many reading lists in the community
repo.", "mal-stack-import": "MAL Stack" }, diff --git a/openapi.json b/openapi.json index d78f16318..4e95289cf 100644 --- a/openapi.json +++ b/openapi.json @@ -2,7 +2,7 @@ "openapi": "3.0.1", "info": { "title": "Kavita", - "description": "Kavita provides a set of APIs that are authenticated by JWT. JWT token can be copied from local storage. Assume all fields of a payload are required. Built against v0.8.2.9", + "description": "Kavita provides a set of APIs that are authenticated by JWT. JWT token can be copied from local storage. Assume all fields of a payload are required. Built against v0.8.2.10", "license": { "name": "GPL-3.0", "url": "https://github.com/Kareadita/Kavita/blob/develop/LICENSE"