diff --git a/ram/bookshelf/migrations/0026_alter_basebook_language_alter_magazine_image_and_more.py b/ram/bookshelf/migrations/0026_alter_basebook_language_alter_magazine_image_and_more.py new file mode 100644 index 0000000..189c84b --- /dev/null +++ b/ram/bookshelf/migrations/0026_alter_basebook_language_alter_magazine_image_and_more.py @@ -0,0 +1,244 @@ +# Generated by Django 6.0 on 2025-12-10 20:59 + +import bookshelf.models +import ram.utils +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookshelf", "0025_magazine_magazineissue"), + ] + + operations = [ + migrations.AlterField( + model_name="basebook", + name="language", + field=models.CharField( + choices=[ + ("af", "Afrikaans"), + ("sq", "Albanian"), + ("ar-dz", "Algerian Arabic"), + ("ar", "Arabic"), + ("es-ar", "Argentinian Spanish"), + ("hy", "Armenian"), + ("ast", "Asturian"), + ("en-au", "Australian English"), + ("az", "Azerbaijani"), + ("eu", "Basque"), + ("be", "Belarusian"), + ("bn", "Bengali"), + ("bs", "Bosnian"), + ("pt-br", "Brazilian Portuguese"), + ("br", "Breton"), + ("en-gb", "British English"), + ("bg", "Bulgarian"), + ("my", "Burmese"), + ("ca", "Catalan"), + ("ckb", "Central Kurdish (Sorani)"), + ("es-co", "Colombian Spanish"), + ("hr", "Croatian"), + ("cs", "Czech"), + ("da", "Danish"), + ("nl", "Dutch"), + ("en", "English"), + ("eo", "Esperanto"), + ("et", "Estonian"), + ("fi", "Finnish"), + ("fr", "French"), + ("fy", "Frisian"), + ("gl", "Galician"), + ("ka", "Georgian"), + ("de", "German"), + ("el", "Greek"), + ("ht", "Haitian Creole"), + ("he", "Hebrew"), + ("hi", "Hindi"), + ("hu", "Hungarian"), + ("is", "Icelandic"), + ("io", "Ido"), + ("ig", "Igbo"), + ("id", "Indonesian"), + ("ia", "Interlingua"), + ("ga", "Irish"), + ("it", "Italian"), + ("ja", "Japanese"), + ("kab", "Kabyle"), + ("kn", "Kannada"), + ("kk", "Kazakh"), + ("km", "Khmer"), + ("ko", "Korean"), + ("ky", "Kyrgyz"), + ("lv", "Latvian"), + ("lt", "Lithuanian"), + ("dsb", "Lower Sorbian"), + ("lb", "Luxembourgish"), + ("mk", "Macedonian"), + ("ms", "Malay"), + ("ml", "Malayalam"), + ("mr", "Marathi"), + ("es-mx", "Mexican Spanish"), + ("mn", "Mongolian"), + ("ne", "Nepali"), + ("es-ni", "Nicaraguan Spanish"), + ("nb", "Norwegian Bokmål"), + ("nn", "Norwegian Nynorsk"), + ("os", "Ossetic"), + ("fa", "Persian"), + ("pl", "Polish"), + ("pt", "Portuguese"), + ("pa", "Punjabi"), + ("ro", "Romanian"), + ("ru", "Russian"), + ("gd", "Scottish Gaelic"), + ("sr", "Serbian"), + ("sr-latn", "Serbian Latin"), + ("zh-hans", "Simplified Chinese"), + ("sk", "Slovak"), + ("sl", "Slovenian"), + ("es", "Spanish"), + ("sw", "Swahili"), + ("sv", "Swedish"), + ("tg", "Tajik"), + ("ta", "Tamil"), + ("tt", "Tatar"), + ("te", "Telugu"), + ("th", "Thai"), + ("zh-hant", "Traditional Chinese"), + ("tr", "Turkish"), + ("tk", "Turkmen"), + ("udm", "Udmurt"), + ("uk", "Ukrainian"), + ("hsb", "Upper Sorbian"), + ("ur", "Urdu"), + ("ug", "Uyghur"), + ("uz", "Uzbek"), + ("es-ve", "Venezuelan Spanish"), + ("vi", "Vietnamese"), + ("cy", "Welsh"), + ], + default="en", + max_length=7, + ), + ), + migrations.AlterField( + model_name="magazine", + name="image", + field=models.ImageField( + blank=True, + storage=ram.utils.DeduplicatedStorage, + upload_to=bookshelf.models.magazine_image_upload, + ), + ), + migrations.AlterField( + model_name="magazine", + name="language", + field=models.CharField( + choices=[ + ("af", "Afrikaans"), + ("sq", "Albanian"), + ("ar-dz", "Algerian Arabic"), + ("ar", "Arabic"), + ("es-ar", "Argentinian Spanish"), + ("hy", "Armenian"), + ("ast", "Asturian"), + ("en-au", "Australian English"), + ("az", "Azerbaijani"), + ("eu", "Basque"), + ("be", "Belarusian"), + ("bn", "Bengali"), + ("bs", "Bosnian"), + ("pt-br", "Brazilian Portuguese"), + ("br", "Breton"), + ("en-gb", "British English"), + ("bg", "Bulgarian"), + ("my", "Burmese"), + ("ca", "Catalan"), + ("ckb", "Central Kurdish (Sorani)"), + ("es-co", "Colombian Spanish"), + ("hr", "Croatian"), + ("cs", "Czech"), + ("da", "Danish"), + ("nl", "Dutch"), + ("en", "English"), + ("eo", "Esperanto"), + ("et", "Estonian"), + ("fi", "Finnish"), + ("fr", "French"), + ("fy", "Frisian"), + ("gl", "Galician"), + ("ka", "Georgian"), + ("de", "German"), + ("el", "Greek"), + ("ht", "Haitian Creole"), + ("he", "Hebrew"), + ("hi", "Hindi"), + ("hu", "Hungarian"), + ("is", "Icelandic"), + ("io", "Ido"), + ("ig", "Igbo"), + ("id", "Indonesian"), + ("ia", "Interlingua"), + ("ga", "Irish"), + ("it", "Italian"), + ("ja", "Japanese"), + ("kab", "Kabyle"), + ("kn", "Kannada"), + ("kk", "Kazakh"), + ("km", "Khmer"), + ("ko", "Korean"), + ("ky", "Kyrgyz"), + ("lv", "Latvian"), + ("lt", "Lithuanian"), + ("dsb", "Lower Sorbian"), + ("lb", "Luxembourgish"), + ("mk", "Macedonian"), + ("ms", "Malay"), + ("ml", "Malayalam"), + ("mr", "Marathi"), + ("es-mx", "Mexican Spanish"), + ("mn", "Mongolian"), + ("ne", "Nepali"), + ("es-ni", "Nicaraguan Spanish"), + ("nb", "Norwegian Bokmål"), + ("nn", "Norwegian Nynorsk"), + ("os", "Ossetic"), + ("fa", "Persian"), + ("pl", "Polish"), + ("pt", "Portuguese"), + ("pa", "Punjabi"), + ("ro", "Romanian"), + ("ru", "Russian"), + ("gd", "Scottish Gaelic"), + ("sr", "Serbian"), + ("sr-latn", "Serbian Latin"), + ("zh-hans", "Simplified Chinese"), + ("sk", "Slovak"), + ("sl", "Slovenian"), + ("es", "Spanish"), + ("sw", "Swahili"), + ("sv", "Swedish"), + ("tg", "Tajik"), + ("ta", "Tamil"), + ("tt", "Tatar"), + ("te", "Telugu"), + ("th", "Thai"), + ("zh-hant", "Traditional Chinese"), + ("tr", "Turkish"), + ("tk", "Turkmen"), + ("udm", "Udmurt"), + ("uk", "Ukrainian"), + ("hsb", "Upper Sorbian"), + ("ur", "Urdu"), + ("ug", "Uyghur"), + ("uz", "Uzbek"), + ("es-ve", "Venezuelan Spanish"), + ("vi", "Vietnamese"), + ("cy", "Welsh"), + ], + default="en", + max_length=7, + ), + ), + ] diff --git a/ram/bookshelf/models.py b/ram/bookshelf/models.py index d8a98ed..58de694 100644 --- a/ram/bookshelf/models.py +++ b/ram/bookshelf/models.py @@ -43,8 +43,8 @@ class BaseBook(BaseModel): ISBN = models.CharField(max_length=17, blank=True) # 13 + dashes language = models.CharField( max_length=7, - choices=settings.LANGUAGES, - default='en' + choices=sorted(settings.LANGUAGES, key=lambda s: s[1]), + default="en", ) number_of_pages = models.SmallIntegerField(null=True, blank=True) publication_year = models.SmallIntegerField(null=True, blank=True) @@ -177,7 +177,7 @@ class Magazine(BaseModel): ) language = models.CharField( max_length=7, - choices=settings.LANGUAGES, + choices=sorted(settings.LANGUAGES, key=lambda s: s[1]), default='en' ) tags = models.ManyToManyField( @@ -234,6 +234,10 @@ class MagazineIssue(BaseBook): def preview(self): return self.image.first().image_thumbnail(100) + @property + def publisher(self): + return self.magazine.publisher + def get_absolute_url(self): return reverse( "issue", diff --git a/ram/portal/templates/bookshelf/book.html b/ram/portal/templates/bookshelf/book.html index 778fcd4..34c66d1 100644 --- a/ram/portal/templates/bookshelf/book.html +++ b/ram/portal/templates/bookshelf/book.html @@ -89,7 +89,30 @@
Tags:
{% for t in magazine.tags.all %}
@@ -87,13 +87,19 @@
-
+ Company
+ Name
+ {{ magazine }}
+
+
Publisher
+
{{ magazine.publisher }}
+ {% if magazine.publisher.website %} {% endif %}
-
{% if magazine.description %}
Era
- {{ magazine.era }}
+ ISBN
+ {{ magazine.ISBN | default:"-" }}
@@ -101,14 +107,6 @@
{% endif %}
- {{ magazine.description | safe }}
-
- Length
- {{ magazine.length }}
-
-
diff --git a/ram/portal/templatetags/show_menu.py b/ram/portal/templatetags/show_menu.py
index 35421dd..4ae0fd9 100644
--- a/ram/portal/templatetags/show_menu.py
+++ b/ram/portal/templatetags/show_menu.py
@@ -1,6 +1,6 @@
from django import template
from portal.models import Flatpage
-from bookshelf.models import Book, Catalog
+from bookshelf.models import Book, Catalog, Magazine
register = template.Library()
@@ -8,10 +8,14 @@ register = template.Library()
@register.inclusion_tag('bookshelf/bookshelf_menu.html')
def show_bookshelf_menu():
# FIXME: Filter out unpublished books and catalogs?
+ books = Book.objects.exists()
+ catalogs = Catalog.objects.exists()
+ magazines = Magazine.objects.exists()
return {
- "bookshelf_menu": (Book.objects.exists() or Catalog.objects.exists()),
- "books_menu": Book.objects.exists(),
- "catalogs_menu": Catalog.objects.exists(),
+ "bookshelf_menu": (books or catalogs or magazines),
+ "books_menu": books,
+ "catalogs_menu": catalogs,
+ "magazines_menu": magazines,
}
diff --git a/ram/portal/views.py b/ram/portal/views.py
index 88a19be..8141761 100644
--- a/ram/portal/views.py
+++ b/ram/portal/views.py
@@ -646,7 +646,7 @@ class Magazines(GetData):
Magazine.objects.get_published(request.user)
.all()
.annotate(
- num_issues=Count(
+ issues=Count(
"issue",
filter=Q(
issue__in=(
@@ -668,7 +668,7 @@ class GetMagazine(View):
raise Http404
data = [
{
- "type": "issue",
+ "type": "magazineissue",
"item": i,
}
for i in magazine.issue.get_published(request.user).all()
@@ -686,6 +686,7 @@ class GetMagazine(View):
"title": magazine,
"magazine": magazine,
"data": data,
+ "matches": paginator.count,
"page_range": page_range,
},
)
diff --git a/ram/ram/__init__.py b/ram/ram/__init__.py
index 4e27f29..01e66b5 100644
--- a/ram/ram/__init__.py
+++ b/ram/ram/__init__.py
@@ -1,4 +1,4 @@
from ram.utils import git_suffix
-__version__ = "0.18.00"
+__version__ = "0.18.1"
__version__ += git_suffix(__file__)
Composition
- {% for t in magazine.get_type_count %}{{ t.count }}x {{ t.type }} {{t.category }}{% if not forloop.last %} » {% endif %}{% endfor %}
-