Added manga collections
This commit is contained in:
parent
10a04e1b9d
commit
c5d639f271
|
@ -9,7 +9,10 @@ from import_export.admin import ImportExportModelAdmin
|
||||||
import reversion
|
import reversion
|
||||||
|
|
||||||
|
|
||||||
from .models import Publisher, Series, Volume, Person, Language
|
from .models import (
|
||||||
|
Publisher, Series, Volume, Person, Language, VolumeCollection,
|
||||||
|
SeriesSummary, SeriesPublisher
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
###
|
###
|
||||||
|
@ -82,6 +85,15 @@ class PublisherAdmin(ImportExportModelAdmin, reversion.VersionAdmin):
|
||||||
admin.site.register(Publisher, PublisherAdmin)
|
admin.site.register(Publisher, PublisherAdmin)
|
||||||
|
|
||||||
|
|
||||||
|
class SeriesSummaryInline(admin.TabularInline):
|
||||||
|
model = SeriesSummary
|
||||||
|
fields = ('summary', 'language', )
|
||||||
|
|
||||||
|
|
||||||
|
class SeriesPublisherInline(admin.TabularInline):
|
||||||
|
model = SeriesPublisher
|
||||||
|
fields = ('publisher', 'status', 'actual_publisher')
|
||||||
|
|
||||||
class SeriesAdmin(ImportExportModelAdmin, reversion.VersionAdmin):
|
class SeriesAdmin(ImportExportModelAdmin, reversion.VersionAdmin):
|
||||||
resource_class = SeriesResource
|
resource_class = SeriesResource
|
||||||
list_display = ['name', 'volumes_count']
|
list_display = ['name', 'volumes_count']
|
||||||
|
@ -89,6 +101,7 @@ class SeriesAdmin(ImportExportModelAdmin, reversion.VersionAdmin):
|
||||||
search_fields = ('name', )
|
search_fields = ('name', )
|
||||||
search_filters = ('hidden', )
|
search_filters = ('hidden', )
|
||||||
actions = (mark_for_review, unmark_for_review, )
|
actions = (mark_for_review, unmark_for_review, )
|
||||||
|
inlines = (SeriesSummaryInline, SeriesPublisherInline)
|
||||||
|
|
||||||
suit_form_tabs = (
|
suit_form_tabs = (
|
||||||
('general', _('General')),
|
('general', _('General')),
|
||||||
|
@ -127,7 +140,7 @@ admin.site.register(Series, SeriesAdmin)
|
||||||
class VolumeAdmin(ImportExportModelAdmin, reversion.VersionAdmin):
|
class VolumeAdmin(ImportExportModelAdmin, reversion.VersionAdmin):
|
||||||
resource_class = VolumeResource
|
resource_class = VolumeResource
|
||||||
# list_display_links = ('number', )
|
# list_display_links = ('number', )
|
||||||
list_display = ('series', 'publisher', 'number', 'name', 'release_date',)
|
list_display = ('series', 'collection', 'language', 'publisher', 'number', 'name', 'release_date',)
|
||||||
search_fields = ('number', 'series__name', )
|
search_fields = ('number', 'series__name', )
|
||||||
list_filter = ('series', 'for_review', )
|
list_filter = ('series', 'for_review', )
|
||||||
# list_editable = ('series', )
|
# list_editable = ('series', )
|
||||||
|
@ -207,6 +220,17 @@ admin.site.register(Person, PersonAdmin)
|
||||||
class LanguageAdmin(ImportExportModelAdmin, reversion.VersionAdmin):
|
class LanguageAdmin(ImportExportModelAdmin, reversion.VersionAdmin):
|
||||||
list_display = ('name', 'code', 'flag_image', )
|
list_display = ('name', 'code', 'flag_image', )
|
||||||
|
|
||||||
|
suit_form_tabs = (
|
||||||
|
('general', _('General')),
|
||||||
|
)
|
||||||
|
|
||||||
|
fieldsets = [
|
||||||
|
(None, {
|
||||||
|
'classes': ('suit-tab suit-tab-general',),
|
||||||
|
'fields': ('name', 'code', )
|
||||||
|
})
|
||||||
|
]
|
||||||
|
|
||||||
def flag_image(self, obj):
|
def flag_image(self, obj):
|
||||||
return u'<img src="{src}" />'.format(
|
return u'<img src="{src}" />'.format(
|
||||||
src=static('images/flags/{}.gif'.format(obj.code))
|
src=static('images/flags/{}.gif'.format(obj.code))
|
||||||
|
@ -215,3 +239,31 @@ class LanguageAdmin(ImportExportModelAdmin, reversion.VersionAdmin):
|
||||||
flag_image.allow_tags = True
|
flag_image.allow_tags = True
|
||||||
|
|
||||||
admin.site.register(Language, LanguageAdmin)
|
admin.site.register(Language, LanguageAdmin)
|
||||||
|
|
||||||
|
|
||||||
|
class VolumeCollectionAdmin(ImportExportModelAdmin, reversion.VersionAdmin):
|
||||||
|
list_display = ('name', 'series', 'default', )
|
||||||
|
search_fields = ('name', 'series__name', )
|
||||||
|
|
||||||
|
suit_form_tabs = (
|
||||||
|
('general', _('General')),
|
||||||
|
('review', _('Review')),
|
||||||
|
('advanced', _('Advanced')),
|
||||||
|
)
|
||||||
|
|
||||||
|
fieldsets = [
|
||||||
|
(None, {
|
||||||
|
'classes': ('suit-tab suit-tab-general',),
|
||||||
|
'fields': ('name', 'series', 'default')
|
||||||
|
}),
|
||||||
|
(None, {
|
||||||
|
'classes': ('suit-tab suit-tab-review',),
|
||||||
|
'fields': ('for_review', 'for_review_comment')
|
||||||
|
}),
|
||||||
|
(None, {
|
||||||
|
'classes': ('suit-tab suit-tab-advanced',),
|
||||||
|
'fields': ('hidden', )
|
||||||
|
}),
|
||||||
|
]
|
||||||
|
|
||||||
|
admin.site.register(VolumeCollection, VolumeCollectionAdmin)
|
||||||
|
|
|
@ -0,0 +1,226 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from south.utils import datetime_utils as datetime
|
||||||
|
from south.db import db
|
||||||
|
from south.v2 import SchemaMigration
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(SchemaMigration):
|
||||||
|
|
||||||
|
def forwards(self, orm):
|
||||||
|
# Adding model 'VolumeCollection'
|
||||||
|
db.create_table(u'manga_volumecollection', (
|
||||||
|
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
|
||||||
|
('for_review', self.gf('django.db.models.fields.BooleanField')(default=False)),
|
||||||
|
('for_review_comment', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
|
||||||
|
('hidden', self.gf('django.db.models.fields.BooleanField')(default=False)),
|
||||||
|
('name', self.gf('django.db.models.fields.CharField')(max_length=32)),
|
||||||
|
('series', self.gf('django.db.models.fields.related.ForeignKey')(related_name='collections', to=orm['manga.Series'])),
|
||||||
|
('default', self.gf('django.db.models.fields.BooleanField')(default=True)),
|
||||||
|
))
|
||||||
|
db.send_create_signal(u'manga', ['VolumeCollection'])
|
||||||
|
|
||||||
|
# Adding field 'Volume.collection'
|
||||||
|
db.add_column(u'manga_volume', 'collection',
|
||||||
|
self.gf('django.db.models.fields.related.ForeignKey')(to=orm['manga.VolumeCollection'], null=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
|
||||||
|
def backwards(self, orm):
|
||||||
|
# Deleting model 'VolumeCollection'
|
||||||
|
db.delete_table(u'manga_volumecollection')
|
||||||
|
|
||||||
|
# Deleting field 'Volume.collection'
|
||||||
|
db.delete_column(u'manga_volume', 'collection_id')
|
||||||
|
|
||||||
|
|
||||||
|
models = {
|
||||||
|
u'auth.group': {
|
||||||
|
'Meta': {'object_name': 'Group'},
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
|
||||||
|
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
u'auth.permission': {
|
||||||
|
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
|
||||||
|
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
|
||||||
|
},
|
||||||
|
u'auth.user': {
|
||||||
|
'Meta': {'object_name': 'User'},
|
||||||
|
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||||
|
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
|
||||||
|
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||||
|
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||||
|
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||||
|
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||||
|
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
|
||||||
|
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
|
||||||
|
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '75'})
|
||||||
|
},
|
||||||
|
u'contenttypes.contenttype': {
|
||||||
|
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
|
||||||
|
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||||
|
},
|
||||||
|
'filer.file': {
|
||||||
|
'Meta': {'object_name': 'File'},
|
||||||
|
'_file_size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'folder': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'all_files'", 'null': 'True', 'to': "orm['filer.Folder']"}),
|
||||||
|
'has_all_mandatory_data': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||||
|
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
|
||||||
|
'original_filename': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'owned_files'", 'null': 'True', 'to': u"orm['auth.User']"}),
|
||||||
|
'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_filer.file_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}),
|
||||||
|
'sha1': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '40', 'blank': 'True'}),
|
||||||
|
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
'filer.folder': {
|
||||||
|
'Meta': {'ordering': "('name',)", 'unique_together': "(('parent', 'name'),)", 'object_name': 'Folder'},
|
||||||
|
'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
|
||||||
|
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
|
||||||
|
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||||
|
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'filer_owned_folders'", 'null': 'True', 'to': u"orm['auth.User']"}),
|
||||||
|
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['filer.Folder']"}),
|
||||||
|
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
|
||||||
|
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
|
||||||
|
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
'filer.image': {
|
||||||
|
'Meta': {'object_name': 'Image', '_ormbases': ['filer.File']},
|
||||||
|
'_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'author': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'date_taken': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'default_alt_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'default_caption': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
|
||||||
|
u'file_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['filer.File']", 'unique': 'True', 'primary_key': 'True'}),
|
||||||
|
'must_always_publish_author_credit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
'must_always_publish_copyright': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
'subject_location': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '64', 'null': 'True', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
u'manga.language': {
|
||||||
|
'Meta': {'ordering': "['name']", 'object_name': 'Language'},
|
||||||
|
'code': ('django.db.models.fields.CharField', [], {'max_length': '5'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'})
|
||||||
|
},
|
||||||
|
u'manga.person': {
|
||||||
|
'Meta': {'ordering': "['name']", 'object_name': 'Person'},
|
||||||
|
'for_review': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
'for_review_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
|
||||||
|
'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
u'manga.publisher': {
|
||||||
|
'Meta': {'ordering': "['name']", 'object_name': 'Publisher'},
|
||||||
|
'for_review': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
'for_review_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
|
||||||
|
'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
u'manga.series': {
|
||||||
|
'Meta': {'ordering': "['name']", 'object_name': 'Series'},
|
||||||
|
'art': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'artist_of'", 'null': 'True', 'to': u"orm['manga.Person']"}),
|
||||||
|
'cover': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['filer.Image']", 'null': 'True', 'blank': 'True'}),
|
||||||
|
'finished': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
'folder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['filer.Folder']", 'null': 'True', 'blank': 'True'}),
|
||||||
|
'for_review': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
'for_review_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
|
||||||
|
'original_publisher': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'original_series'", 'null': 'True', 'to': u"orm['manga.Publisher']"}),
|
||||||
|
'slug': ('django.db.models.fields.SlugField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'status': ('django.db.models.fields.CharField', [], {'default': "'open'", 'max_length': '16'}),
|
||||||
|
'story': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'scriptwriter_of'", 'null': 'True', 'to': u"orm['manga.Person']"}),
|
||||||
|
'summary': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
u'manga.seriespublisher': {
|
||||||
|
'Meta': {'object_name': 'SeriesPublisher'},
|
||||||
|
'actual_publisher': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||||
|
'for_review': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
'for_review_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'publisher': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'series_published'", 'to': u"orm['manga.Publisher']"}),
|
||||||
|
'series': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'publishers'", 'to': u"orm['manga.Series']"}),
|
||||||
|
'status': ('django.db.models.fields.CharField', [], {'default': "'open'", 'max_length': '16'})
|
||||||
|
},
|
||||||
|
u'manga.seriessummary': {
|
||||||
|
'Meta': {'unique_together': "(('series', 'language'),)", 'object_name': 'SeriesSummary'},
|
||||||
|
'for_review': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
'for_review_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'language': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['manga.Language']"}),
|
||||||
|
'series': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'summaries'", 'to': u"orm['manga.Series']"}),
|
||||||
|
'summary': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
u'manga.userhavevolume': {
|
||||||
|
'Meta': {'ordering': "('volume__series__name', 'volume__number')", 'object_name': 'UserHaveVolume'},
|
||||||
|
'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'have_volumes'", 'to': u"orm['auth.User']"}),
|
||||||
|
'volume': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owned_by'", 'to': u"orm['manga.Volume']"})
|
||||||
|
},
|
||||||
|
u'manga.userwishlistvolume': {
|
||||||
|
'Meta': {'ordering': "('volume__series__name', 'volume__number')", 'object_name': 'UserWishlistVolume'},
|
||||||
|
'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wishlisted_volumes'", 'to': u"orm['auth.User']"}),
|
||||||
|
'volume': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wishlisted_by'", 'to': u"orm['manga.Volume']"})
|
||||||
|
},
|
||||||
|
u'manga.volume': {
|
||||||
|
'Meta': {'ordering': "['series__name', 'language', 'number']", 'object_name': 'Volume'},
|
||||||
|
'collection': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['manga.VolumeCollection']", 'null': 'True'}),
|
||||||
|
'cover': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['filer.Image']", 'null': 'True', 'blank': 'True'}),
|
||||||
|
'for_review': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
'for_review_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'isbn_10': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'isbn_13': ('django.db.models.fields.CharField', [], {'max_length': '13', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'language': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['manga.Language']", 'null': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'number': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'pages': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'publisher': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'volumes'", 'to': u"orm['manga.Publisher']"}),
|
||||||
|
'release_date': ('django.db.models.fields.DateField', [], {'null': 'True'}),
|
||||||
|
'retail_price': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '5', 'decimal_places': '2', 'blank': 'True'}),
|
||||||
|
'series': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'volumes'", 'to': u"orm['manga.Series']"})
|
||||||
|
},
|
||||||
|
u'manga.volumecollection': {
|
||||||
|
'Meta': {'ordering': "['name']", 'object_name': 'VolumeCollection'},
|
||||||
|
'default': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||||
|
'for_review': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
'for_review_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||||
|
'series': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'collections'", 'to': u"orm['manga.Series']"})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
complete_apps = ['manga']
|
|
@ -71,12 +71,12 @@ class Series(Model):
|
||||||
default='open', max_length=16)
|
default='open', max_length=16)
|
||||||
|
|
||||||
original_publisher = models.ForeignKey(
|
original_publisher = models.ForeignKey(
|
||||||
Publisher, related_name='original_series', null=True)
|
Publisher, related_name='original_series', null=True, blank=True)
|
||||||
|
|
||||||
art = models.ManyToManyField(
|
art = models.ManyToManyField(
|
||||||
'Person', related_name='artist_of', null=True)
|
'Person', related_name='artist_of', null=True, blank=True)
|
||||||
story = models.ManyToManyField(
|
story = models.ManyToManyField(
|
||||||
'Person', related_name='scriptwriter_of', null=True)
|
'Person', related_name='scriptwriter_of', null=True, blank=True)
|
||||||
|
|
||||||
folder = models.ForeignKey(Folder, null=True, blank=True)
|
folder = models.ForeignKey(Folder, null=True, blank=True)
|
||||||
|
|
||||||
|
@ -129,6 +129,17 @@ class Series(Model):
|
||||||
|
|
||||||
return self._languages
|
return self._languages
|
||||||
|
|
||||||
|
def collections(self):
|
||||||
|
if not self._collections:
|
||||||
|
result = []
|
||||||
|
queryset = self.volumes.order_by('collection__id')\
|
||||||
|
.distinct('collection').values_list('collection')
|
||||||
|
result = VolumeCollection.objects.filter(pk__in=queryset)
|
||||||
|
|
||||||
|
self._collections = result
|
||||||
|
|
||||||
|
return self._collections
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ['name']
|
ordering = ['name']
|
||||||
verbose_name = _('Series')
|
verbose_name = _('Series')
|
||||||
|
@ -166,6 +177,8 @@ class SeriesPublisher(Model):
|
||||||
|
|
||||||
|
|
||||||
class Volume(Model):
|
class Volume(Model):
|
||||||
|
collection = models.ForeignKey('VolumeCollection', null=True,
|
||||||
|
related_name='volumes')
|
||||||
number = models.IntegerField(_('Number'), null=True, blank=True)
|
number = models.IntegerField(_('Number'), null=True, blank=True)
|
||||||
name = models.CharField(_('Name'), max_length=64, null=True, blank=True)
|
name = models.CharField(_('Name'), max_length=64, null=True, blank=True)
|
||||||
series = models.ForeignKey(Series, related_name="volumes")
|
series = models.ForeignKey(Series, related_name="volumes")
|
||||||
|
@ -198,6 +211,20 @@ class Volume(Model):
|
||||||
verbose_name_plural = _('Volumes')
|
verbose_name_plural = _('Volumes')
|
||||||
|
|
||||||
|
|
||||||
|
class VolumeCollection(Model):
|
||||||
|
name = models.CharField(_('Name'), max_length=32)
|
||||||
|
series = models.ForeignKey('Series', related_name='collections')
|
||||||
|
default = models.BooleanField(_('Default'), default=True)
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
ordering = ['name', ]
|
||||||
|
verbose_name = _('Collection')
|
||||||
|
verbose_name_plural = _('Collections')
|
||||||
|
|
||||||
|
|
||||||
class Person(Model):
|
class Person(Model):
|
||||||
name = models.CharField(_('Name'), max_length=256)
|
name = models.CharField(_('Name'), max_length=256)
|
||||||
slug = models.SlugField(_('Slug'), blank=True, null=True)
|
slug = models.SlugField(_('Slug'), blank=True, null=True)
|
||||||
|
@ -223,6 +250,7 @@ class Language(models.Model):
|
||||||
verbose_name = _('Language')
|
verbose_name = _('Language')
|
||||||
verbose_name_plural = _('Languages')
|
verbose_name_plural = _('Languages')
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# RELATIONS
|
# RELATIONS
|
||||||
#
|
#
|
||||||
|
@ -266,6 +294,14 @@ def series_check_filer(sender, instance, created, **kwargs):
|
||||||
name = instance.name
|
name = instance.name
|
||||||
|
|
||||||
# Check folder
|
# Check folder
|
||||||
|
# Fix for loaddata import
|
||||||
|
if instance.folder_id:
|
||||||
|
try:
|
||||||
|
Folder.objects.get(pk=instance.folder_id)
|
||||||
|
except Folder.DoesNotExist:
|
||||||
|
instance.folder_id = None
|
||||||
|
instance.folder = None
|
||||||
|
|
||||||
if not instance.folder:
|
if not instance.folder:
|
||||||
folder, is_new = Folder.objects.get_or_create(
|
folder, is_new = Folder.objects.get_or_create(
|
||||||
name=name,
|
name=name,
|
||||||
|
|
|
@ -43,8 +43,17 @@ class SeriesListView(SeriesView):
|
||||||
|
|
||||||
class SeriesDetailView(SeriesView):
|
class SeriesDetailView(SeriesView):
|
||||||
template = 'manga/series/detail.html'
|
template = 'manga/series/detail.html'
|
||||||
|
filters = ('language', 'publisher', 'collection')
|
||||||
|
|
||||||
def get(self, request, sid, slug=None):
|
def get(self, request, sid, slug=None):
|
||||||
|
vol_filters = {}
|
||||||
|
for search_filter in self.filters:
|
||||||
|
if search_filter in request.POST and request.POST[search_filter] != "0":
|
||||||
|
vol_filters['{}_id'.format(search_filter)] = \
|
||||||
|
int(request.POST[search_filter])
|
||||||
|
|
||||||
|
print(vol_filters)
|
||||||
|
|
||||||
if slug:
|
if slug:
|
||||||
item = get_object_or_404(Series, pk=sid, slug=slug)
|
item = get_object_or_404(Series, pk=sid, slug=slug)
|
||||||
else:
|
else:
|
||||||
|
@ -52,8 +61,12 @@ class SeriesDetailView(SeriesView):
|
||||||
|
|
||||||
context = {
|
context = {
|
||||||
'item': item,
|
'item': item,
|
||||||
# 'publisher_volumes': publisher_volumes
|
'item_volumes': item.volumes.filter(**vol_filters),
|
||||||
|
'volume_filters': vol_filters,
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx = RequestContext(request, self.get_context(context))
|
ctx = RequestContext(request, self.get_context(context))
|
||||||
return render_to_response(self.template, context_instance=ctx)
|
return render_to_response(self.template, context_instance=ctx)
|
||||||
|
|
||||||
|
def post(self, request, sid, slug=None):
|
||||||
|
return self.get(request, sid, slug)
|
||||||
|
|
Binary file not shown.
|
@ -8,8 +8,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2014-08-25 18:01+0200\n"
|
"POT-Creation-Date: 2014-08-25 20:12+0200\n"
|
||||||
"PO-Revision-Date: 2014-08-25 18:01+0200\n"
|
"PO-Revision-Date: 2014-08-25 20:12+0200\n"
|
||||||
"Last-Translator: Felipe Martin <fmartingr@me.com>\n"
|
"Last-Translator: Felipe Martin <fmartingr@me.com>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
@ -74,7 +74,7 @@ msgstr "Para revisión"
|
||||||
msgid "Advanced"
|
msgid "Advanced"
|
||||||
msgstr "Avanzado"
|
msgstr "Avanzado"
|
||||||
|
|
||||||
#: apps/manga/admin.py:80 apps/manga/models.py:134 apps/manga/models.py:135
|
#: apps/manga/admin.py:80 apps/manga/models.py:145 apps/manga/models.py:146
|
||||||
#: themes/bootflat/templates/_layout.html:40
|
#: themes/bootflat/templates/_layout.html:40
|
||||||
#: themes/bootflat/templates/homepage/home.html:94
|
#: themes/bootflat/templates/homepage/home.html:94
|
||||||
#: themes/bootflat/templates/manga/publishers/detail.html:24
|
#: themes/bootflat/templates/manga/publishers/detail.html:24
|
||||||
|
@ -82,7 +82,7 @@ msgstr "Avanzado"
|
||||||
msgid "Series"
|
msgid "Series"
|
||||||
msgstr "Series"
|
msgstr "Series"
|
||||||
|
|
||||||
#: apps/manga/admin.py:95 apps/manga/admin.py:122 apps/manga/models.py:198
|
#: apps/manga/admin.py:95 apps/manga/admin.py:122 apps/manga/models.py:211
|
||||||
#: themes/bootflat/templates/homepage/home.html:97
|
#: themes/bootflat/templates/homepage/home.html:97
|
||||||
#: themes/bootflat/templates/manga/publishers/detail.html:27
|
#: themes/bootflat/templates/manga/publishers/detail.html:27
|
||||||
msgid "Volumes"
|
msgid "Volumes"
|
||||||
|
@ -102,12 +102,12 @@ msgstr "Cambiar serie de los volúmenes"
|
||||||
msgid "Flag"
|
msgid "Flag"
|
||||||
msgstr "Bandera"
|
msgstr "Bandera"
|
||||||
|
|
||||||
#: apps/manga/models.py:15 apps/manga/models.py:65 apps/manga/models.py:170
|
#: apps/manga/models.py:15 apps/manga/models.py:65 apps/manga/models.py:183
|
||||||
#: apps/manga/models.py:202 apps/manga/models.py:215
|
#: apps/manga/models.py:215 apps/manga/models.py:229 apps/manga/models.py:242
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Nombre"
|
msgstr "Nombre"
|
||||||
|
|
||||||
#: apps/manga/models.py:16 apps/manga/models.py:66 apps/manga/models.py:203
|
#: apps/manga/models.py:16 apps/manga/models.py:66 apps/manga/models.py:230
|
||||||
msgid "Slug"
|
msgid "Slug"
|
||||||
msgstr "Álias"
|
msgstr "Álias"
|
||||||
|
|
||||||
|
@ -142,78 +142,93 @@ msgstr "Cancelada"
|
||||||
msgid "On-hold"
|
msgid "On-hold"
|
||||||
msgstr "Parada"
|
msgstr "Parada"
|
||||||
|
|
||||||
#: apps/manga/models.py:68 apps/manga/models.py:141
|
#: apps/manga/models.py:68 apps/manga/models.py:152
|
||||||
#: themes/bootflat/templates/users/profile.html:27
|
#: themes/bootflat/templates/users/profile.html:27
|
||||||
msgid "Summary"
|
msgid "Summary"
|
||||||
msgstr "Resumen"
|
msgstr "Resumen"
|
||||||
|
|
||||||
#: apps/manga/models.py:70 apps/manga/models.py:150
|
#: apps/manga/models.py:70 apps/manga/models.py:161
|
||||||
#: themes/bootflat/templates/manga/series/detail.html:29
|
#: themes/bootflat/templates/manga/series/detail.html:29
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
msgstr "Estado"
|
msgstr "Estado"
|
||||||
|
|
||||||
#: apps/manga/models.py:152
|
#: apps/manga/models.py:163
|
||||||
msgid "Current publisher"
|
msgid "Current publisher"
|
||||||
msgstr "Editorial original"
|
msgstr "Editorial original"
|
||||||
|
|
||||||
#: apps/manga/models.py:169
|
#: apps/manga/models.py:182
|
||||||
msgid "Number"
|
msgid "Number"
|
||||||
msgstr "Número"
|
msgstr "Número"
|
||||||
|
|
||||||
#: apps/manga/models.py:175
|
#: apps/manga/models.py:188
|
||||||
msgid "ISBN-10"
|
msgid "ISBN-10"
|
||||||
msgstr "ISBN-10"
|
msgstr "ISBN-10"
|
||||||
|
|
||||||
#: apps/manga/models.py:177
|
#: apps/manga/models.py:190
|
||||||
msgid "ISBN-13"
|
msgid "ISBN-13"
|
||||||
msgstr "ISBN-13"
|
msgstr "ISBN-13"
|
||||||
|
|
||||||
#: apps/manga/models.py:182
|
#: apps/manga/models.py:195
|
||||||
msgid "Retail price"
|
msgid "Retail price"
|
||||||
msgstr "Precio recomendado"
|
msgstr "Precio recomendado"
|
||||||
|
|
||||||
#: apps/manga/models.py:184
|
#: apps/manga/models.py:197
|
||||||
msgid "Pages"
|
msgid "Pages"
|
||||||
msgstr "Páginas"
|
msgstr "Páginas"
|
||||||
|
|
||||||
#: apps/manga/models.py:185
|
#: apps/manga/models.py:198
|
||||||
msgid "Release date"
|
msgid "Release date"
|
||||||
msgstr "Fecha de lanzamiento"
|
msgstr "Fecha de lanzamiento"
|
||||||
|
|
||||||
#: apps/manga/models.py:197
|
#: apps/manga/models.py:210
|
||||||
msgid "Volume"
|
msgid "Volume"
|
||||||
msgstr "Volumen"
|
msgstr "Volumen"
|
||||||
|
|
||||||
#: apps/manga/models.py:210
|
#: apps/manga/models.py:217
|
||||||
|
msgid "Default"
|
||||||
|
msgstr "Por defecto"
|
||||||
|
|
||||||
|
#: apps/manga/models.py:224
|
||||||
|
#: themes/bootflat/templates/manga/series/detail.html:136
|
||||||
|
#: themes/bootflat/templates/users/profile.html:30
|
||||||
|
#: themes/bootflat/templates/users/profile/collection.html:4
|
||||||
|
msgid "Collection"
|
||||||
|
msgstr "Colección"
|
||||||
|
|
||||||
|
#: apps/manga/models.py:225
|
||||||
|
msgid "Collections"
|
||||||
|
msgstr "Colecciones"
|
||||||
|
|
||||||
|
#: apps/manga/models.py:237
|
||||||
msgid "Person"
|
msgid "Person"
|
||||||
msgstr "Persona"
|
msgstr "Persona"
|
||||||
|
|
||||||
#: apps/manga/models.py:211
|
#: apps/manga/models.py:238
|
||||||
msgid "Persons"
|
msgid "Persons"
|
||||||
msgstr "Personas"
|
msgstr "Personas"
|
||||||
|
|
||||||
#: apps/manga/models.py:216
|
#: apps/manga/models.py:243
|
||||||
msgid "Code"
|
msgid "Code"
|
||||||
msgstr "Código"
|
msgstr "Código"
|
||||||
|
|
||||||
#: apps/manga/models.py:223
|
#: apps/manga/models.py:250
|
||||||
#: themes/bootflat/templates/manga/series/detail.html:116
|
#: themes/bootflat/templates/manga/series/detail.html:116
|
||||||
msgid "Language"
|
msgid "Language"
|
||||||
msgstr "Idioma"
|
msgstr "Idioma"
|
||||||
|
|
||||||
#: apps/manga/models.py:224
|
#: apps/manga/models.py:251
|
||||||
msgid "Languages"
|
msgid "Languages"
|
||||||
msgstr "Idiomas"
|
msgstr "Idiomas"
|
||||||
|
|
||||||
#: apps/manga/models.py:233 apps/manga/models.py:250
|
#: apps/manga/models.py:261 apps/manga/models.py:278
|
||||||
msgid "Date"
|
msgid "Date"
|
||||||
msgstr "Fecha"
|
msgstr "Fecha"
|
||||||
|
|
||||||
#: apps/manga/models.py:238
|
#: apps/manga/models.py:266
|
||||||
msgid "have"
|
msgid "have"
|
||||||
msgstr "tiene"
|
msgstr "tiene"
|
||||||
|
|
||||||
#: apps/manga/models.py:255
|
#: apps/manga/models.py:283
|
||||||
msgid "wants"
|
msgid "wants"
|
||||||
msgstr "quiere"
|
msgstr "quiere"
|
||||||
|
|
||||||
|
@ -368,13 +383,13 @@ msgstr "Sin resultados"
|
||||||
|
|
||||||
#: themes/bootflat/templates/manga/publishers/detail.html:10
|
#: themes/bootflat/templates/manga/publishers/detail.html:10
|
||||||
#: themes/bootflat/templates/manga/series/detail.html:10
|
#: themes/bootflat/templates/manga/series/detail.html:10
|
||||||
#: themes/bootflat/templates/manga/series/includes/volume.html:48
|
#: themes/bootflat/templates/manga/series/includes/volume.html:51
|
||||||
msgid "Edit in admin"
|
msgid "Edit in admin"
|
||||||
msgstr "Editar en el admin"
|
msgstr "Editar en el admin"
|
||||||
|
|
||||||
#: themes/bootflat/templates/manga/publishers/detail.html:20
|
#: themes/bootflat/templates/manga/publishers/detail.html:20
|
||||||
#: themes/bootflat/templates/manga/series/detail.html:25
|
#: themes/bootflat/templates/manga/series/detail.html:25
|
||||||
#: themes/bootflat/templates/manga/series/includes/volume.html:41
|
#: themes/bootflat/templates/manga/series/includes/volume.html:44
|
||||||
msgid "Requires review"
|
msgid "Requires review"
|
||||||
msgstr "Requiere revisión"
|
msgstr "Requiere revisión"
|
||||||
|
|
||||||
|
@ -400,14 +415,19 @@ msgstr "Más información"
|
||||||
|
|
||||||
#: themes/bootflat/templates/manga/series/detail.html:118
|
#: themes/bootflat/templates/manga/series/detail.html:118
|
||||||
#: themes/bootflat/templates/manga/series/detail.html:128
|
#: themes/bootflat/templates/manga/series/detail.html:128
|
||||||
|
#: themes/bootflat/templates/manga/series/detail.html:138
|
||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr "Todos"
|
msgstr "Todos"
|
||||||
|
|
||||||
|
#: themes/bootflat/templates/manga/series/detail.html:144
|
||||||
|
msgid "Filter"
|
||||||
|
msgstr "Filtrar"
|
||||||
|
|
||||||
#: themes/bootflat/templates/manga/series/list.html:17
|
#: themes/bootflat/templates/manga/series/list.html:17
|
||||||
msgid "other"
|
msgid "other"
|
||||||
msgstr "otros"
|
msgstr "otros"
|
||||||
|
|
||||||
#: themes/bootflat/templates/manga/series/includes/volume.html:38
|
#: themes/bootflat/templates/manga/series/includes/volume.html:41
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "%(pages)s pages"
|
msgid "%(pages)s pages"
|
||||||
msgstr "%(pages)s páginas"
|
msgstr "%(pages)s páginas"
|
||||||
|
@ -420,11 +440,6 @@ msgstr "Accede al sitio"
|
||||||
msgid "Login"
|
msgid "Login"
|
||||||
msgstr "Entrar"
|
msgstr "Entrar"
|
||||||
|
|
||||||
#: themes/bootflat/templates/users/profile.html:30
|
|
||||||
#: themes/bootflat/templates/users/profile/collection.html:4
|
|
||||||
msgid "Collection"
|
|
||||||
msgstr "Colección"
|
|
||||||
|
|
||||||
#: themes/bootflat/templates/users/profile.html:34
|
#: themes/bootflat/templates/users/profile.html:34
|
||||||
#: themes/bootflat/templates/users/profile/wishlist.html:4
|
#: themes/bootflat/templates/users/profile/wishlist.html:4
|
||||||
msgid "Wishlist"
|
msgid "Wishlist"
|
||||||
|
|
|
@ -22,6 +22,19 @@
|
||||||
.volume-item {
|
.volume-item {
|
||||||
min-height: 150px !important;
|
min-height: 150px !important;
|
||||||
|
|
||||||
|
&.slim {
|
||||||
|
min-height: 150px;
|
||||||
|
|
||||||
|
.volume-content {
|
||||||
|
padding-left: 130px;
|
||||||
|
|
||||||
|
.volume-number {
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 1.2em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Badges
|
// Badges
|
||||||
&:not(.user-have-it) {
|
&:not(.user-have-it) {
|
||||||
&:hover .badges .badge {
|
&:hover .badges .badge {
|
||||||
|
|
|
@ -13,18 +13,7 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
{% for volume in FUTURE_RELEASES %}
|
{% for volume in FUTURE_RELEASES %}
|
||||||
<div class="col-sm-6 latest-manga">
|
<div class="col-sm-6 latest-manga">
|
||||||
<div class="well text-right item" style="background: white url({% thumbnail volume.cover 80x120 crop %}) top left no-repeat;">
|
{% include "manga/series/includes/volume_slim.html" with volume=volume user=user %}
|
||||||
<div class="content">
|
|
||||||
<a href="{{ volume.series.get_absolute_url }}" data-pjax>
|
|
||||||
<h4 class="media-heading">{{ volume }}</h4>
|
|
||||||
</a>
|
|
||||||
<p>
|
|
||||||
<a href="{{ volume.publisher.get_absolute_url }}" data-pjax>{{ volume.publisher }}</a><br />
|
|
||||||
{{ volume.release_date|date:'F Y' }}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="clearfix"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
{% if forloop.counter|divisibleby:2 %}
|
{% if forloop.counter|divisibleby:2 %}
|
||||||
</div><div class="row">
|
</div><div class="row">
|
||||||
|
@ -39,18 +28,7 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
{% for volume in LATEST_MANGA_ADDED %}
|
{% for volume in LATEST_MANGA_ADDED %}
|
||||||
<div class="col-sm-6 latest-manga">
|
<div class="col-sm-6 latest-manga">
|
||||||
<div class="well text-right item" style="background: white url({% thumbnail volume.cover 80x120 crop %}) top left no-repeat;">
|
{% include "manga/series/includes/volume_slim.html" with volume=volume user=user %}
|
||||||
<div class="content">
|
|
||||||
<a href="{{ volume.series.get_absolute_url }}" data-pjax>
|
|
||||||
<h4 class="media-heading">{{ volume }}</h4>
|
|
||||||
</a>
|
|
||||||
<p>
|
|
||||||
<a href="{{ volume.publisher.get_absolute_url }}" data-pjax>{{ volume.publisher }}</a><br />
|
|
||||||
{{ volume.release_date|date:'F Y' }}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="clearfix"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
{% if forloop.counter|divisibleby:2 %}
|
{% if forloop.counter|divisibleby:2 %}
|
||||||
</div><div class="row">
|
</div><div class="row">
|
||||||
|
|
|
@ -109,33 +109,57 @@
|
||||||
<div data-pjax-container="volumes">
|
<div data-pjax-container="volumes">
|
||||||
{% block volume_list %}
|
{% block volume_list %}
|
||||||
<div class="well" id="volume_filters">
|
<div class="well" id="volume_filters">
|
||||||
<form class="form-inline" role="form">
|
<form class="form-inline" role="form" method="post">
|
||||||
|
{% csrf_token %}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="" for="language">
|
<label class="" for="language">
|
||||||
{% trans "Language" %}</label>
|
{% trans "Language" %}</label>
|
||||||
<select name="language" class="form-control">
|
<select name="language" class="form-control">
|
||||||
<option value="0">{% trans "All" %}</option>
|
<option value="0">{% trans "All" %}</option>
|
||||||
{% for lang in item.languages.all %}
|
{% for lang in item.languages.all %}
|
||||||
<option value="{{ lang.pk }}">{{ lang.name }}</option>
|
<option value="{{ lang.pk }}"
|
||||||
|
{% if volume_filters.language_id == lang.pk %}
|
||||||
|
selected="selected"
|
||||||
|
{% endif %}
|
||||||
|
>{{ lang.name }}</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="" for="language">
|
<label class="" for="publisher">
|
||||||
{% trans "Publisher" %}</label>
|
{% trans "Publisher" %}</label>
|
||||||
<select name="language" class="form-control">
|
<select name="publisher" class="form-control">
|
||||||
<option value="0">{% trans "All" %}</option>
|
<option value="0">{% trans "All" %}</option>
|
||||||
{% for pub in item.publishers.all %}
|
{% for pub in item.publishers.all %}
|
||||||
<option value="{{ pub.publisher.pk }}">{{ pub.publisher.name }}</option>
|
<option value="{{ pub.publisher.pk }}"
|
||||||
|
{% if volume_filters.publisher_id == pub.publisher.pk %}
|
||||||
|
selected="selected"
|
||||||
|
{% endif %}
|
||||||
|
>{{ pub.publisher.name }}</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="" for="collection">
|
||||||
|
{% trans "Collection" %}</label>
|
||||||
|
<select name="collection" class="form-control">
|
||||||
|
<option value="0">{% trans "All" %}</option>
|
||||||
|
{% for col in item.collections.all %}
|
||||||
|
<option value="{{ col.pk }}"
|
||||||
|
{% if volume_filters.collection_id == col.pk %}
|
||||||
|
selected="selected"
|
||||||
|
{% endif %}
|
||||||
|
>{{ col.name }}</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-primary">{% trans "Filter" %}</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
{% for volume in item.volumes_by_publisher.all %}
|
{% for volume in item_volumes %}
|
||||||
<div class="col-sm-4" data-pjax-container="v{{ volume.pk }}">
|
<div class="col-sm-4" data-pjax-container="v{{ volume.pk }}">
|
||||||
{% include "manga/series/includes/volume.html" with volume=volume user=user show_publisher=True %}
|
{% include "manga/series/includes/volume.html" with volume=volume user=user show_publisher=True show_details=True %}
|
||||||
</div>
|
</div>
|
||||||
{% if forloop.counter|divisibleby:3 %}
|
{% if forloop.counter|divisibleby:3 %}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{% load i18n thumbnail staticfiles %}
|
{% load i18n thumbnail staticfiles %}
|
||||||
<div class="well text-center volume-item {% if volume.pk in user_have_volumes %}user-have-it{% endif %} {% if volume.pk in user_wishlisted_volumes %}user-wishlisted-it{% endif %}" style="background: white url({% thumbnail volume.cover 120x150 %}) center left no-repeat;">
|
<div class="well text-center volume-item {% if volume.pk in user_have_volumes %}user-have-it{% endif %} {% if volume.pk in user_wishlisted_volumes %}user-wishlisted-it{% endif %} {{ css_class }}" style="background: white url({% thumbnail volume.cover 120x150 %}) center left no-repeat;">
|
||||||
<div class="badges">
|
<div class="badges">
|
||||||
{% if volume.pk in user_have_volumes %}
|
{% if volume.pk in user_have_volumes %}
|
||||||
<a href="{% url "volume.have_it" volume.pk %}" data-pjax="v{{ volume.pk }}" pjax-nopush pjax-messages>
|
<a href="{% url "volume.have_it" volume.pk %}" data-pjax="v{{ volume.pk }}" pjax-nopush pjax-messages>
|
||||||
|
@ -28,14 +28,19 @@
|
||||||
{% if volume.number %}#{{ volume.number }}{% endif %}
|
{% if volume.number %}#{{ volume.number }}{% endif %}
|
||||||
{% if volume.name %}{{ volume.name }}{% endif %}
|
{% if volume.name %}{{ volume.name }}{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
{% if volume.collection and not volume.collection.default %}
|
||||||
|
<div><span class="label label-primary">{{ volume.collection.name }}</span></div>
|
||||||
|
{% endif %}
|
||||||
{% if show_publisher %}
|
{% if show_publisher %}
|
||||||
<div><a href="{{ volume.publisher.get_absolute_url }}" data-pjax>{{ volume.publisher }}</a></div>
|
<div><a href="{{ volume.publisher.get_absolute_url }}" data-pjax>{{ volume.publisher }}</a></div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if volume.release_date %}
|
{% if volume.release_date %}
|
||||||
<div>{{ volume.release_date|date:"F Y" }}</div>
|
<div>{{ volume.release_date|date:"F Y" }}</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if volume.pages %}
|
{% if show_details %}
|
||||||
<div>{% blocktrans with pages=volume.pages %}{{ pages }} pages{% endblocktrans %}</div>
|
{% if volume.pages %}
|
||||||
|
<div>{% blocktrans with pages=volume.pages %}{{ pages }} pages{% endblocktrans %}</div>
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if volume.for_review and user.is_staff %}
|
{% if volume.for_review and user.is_staff %}
|
||||||
<span class="label label-warning">{% trans "Requires review" %}</span>
|
<span class="label label-warning">{% trans "Requires review" %}</span>
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
{% load thumbnail %}
|
||||||
|
<div class="well text-right item" style="background: white url({% thumbnail volume.cover 80x120 crop %}) top left no-repeat;">
|
||||||
|
<div class="content">
|
||||||
|
<a href="{{ volume.series.get_absolute_url }}" data-pjax>
|
||||||
|
<h4 class="media-heading">{{ volume }}</h4>
|
||||||
|
</a>
|
||||||
|
<p>
|
||||||
|
<a href="{{ volume.publisher.get_absolute_url }}" data-pjax>{{ volume.publisher }}</a><br />
|
||||||
|
{% if volume.collection and not volume.collection.default %}
|
||||||
|
<span class="label label-primary">{{ volume.collection.name }}</span><br />
|
||||||
|
{% endif %}
|
||||||
|
{{ volume.release_date|date:'F Y' }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="clearfix"></div>
|
||||||
|
</div>
|
Reference in New Issue