update theming for admin (tmp)
This commit is contained in:
		@ -4,7 +4,7 @@ from django.contrib     import admin
 | 
				
			|||||||
from django.forms       import Textarea
 | 
					from django.forms       import Textarea
 | 
				
			||||||
from django.db          import models
 | 
					from django.db          import models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import autocomplete_light as al
 | 
					# import autocomplete_light as al
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from programs.models    import *
 | 
					from programs.models    import *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,19 +52,7 @@ class MetadataAdmin (admin.ModelAdmin):
 | 
				
			|||||||
        obj.save()
 | 
					        obj.save()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
class PublicationAdmin (MetadataAdmin):
 | 
					class PublicationAdmin (MetadataAdmin):
 | 
				
			||||||
    form = al.modelform_factory(
 | 
					 | 
				
			||||||
               Episode
 | 
					 | 
				
			||||||
             , fields = '__all__'
 | 
					 | 
				
			||||||
             # , autocomplete_fields = ['tracks']
 | 
					 | 
				
			||||||
             )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    formfield_overrides = {
 | 
					 | 
				
			||||||
        models.TextField: {'widget': Textarea(attrs={'style':'width:calc(100% - 12px);'})},
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    fieldsets = copy.deepcopy(MetadataAdmin.fieldsets)
 | 
					    fieldsets = copy.deepcopy(MetadataAdmin.fieldsets)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    list_display = ('id', 'title', 'date', 'private')
 | 
					    list_display = ('id', 'title', 'date', 'private')
 | 
				
			||||||
@ -100,8 +88,6 @@ class ProgramAdmin (PublicationAdmin):
 | 
				
			|||||||
    fieldsets[1][1]['fields'] += ['email', 'url']
 | 
					    fieldsets[1][1]['fields'] += ['email', 'url']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class EpisodeAdmin (PublicationAdmin):
 | 
					class EpisodeAdmin (PublicationAdmin):
 | 
				
			||||||
    fieldsets = copy.deepcopy(PublicationAdmin.fieldsets)
 | 
					    fieldsets = copy.deepcopy(PublicationAdmin.fieldsets)
 | 
				
			||||||
    #inlines             = [ SoundInline ]
 | 
					    #inlines             = [ SoundInline ]
 | 
				
			||||||
@ -111,7 +97,10 @@ class EpisodeAdmin (PublicationAdmin):
 | 
				
			|||||||
    fieldsets[0][1]['fields'] += ['tracks']
 | 
					    fieldsets[0][1]['fields'] += ['tracks']
 | 
				
			||||||
    fieldsets[0][1]['fields'] += ['sounds']
 | 
					    fieldsets[0][1]['fields'] += ['sounds']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    raw_id_fields = ('tracks', 'sounds')
 | 
				
			||||||
 | 
					    autocomplete_lookup_fields = {
 | 
				
			||||||
 | 
					        'm2m': ['tracks', 'sounds'],
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
admin.site.register(Track)
 | 
					admin.site.register(Track)
 | 
				
			||||||
admin.site.register(Sound, SoundAdmin)
 | 
					admin.site.register(Sound, SoundAdmin)
 | 
				
			||||||
 | 
				
			|||||||
@ -1,40 +0,0 @@
 | 
				
			|||||||
import autocomplete_light.shortcuts as al
 | 
					 | 
				
			||||||
from programs.models import *
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class SoundAutocomplete(al.AutocompleteModelBase):
 | 
					 | 
				
			||||||
    search_fields = ['title', 'file']
 | 
					 | 
				
			||||||
    model = Sound
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
al.register(SoundAutocomplete)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class TrackAutocomplete(al.AutocompleteModelBase):
 | 
					 | 
				
			||||||
    search_fields = ['artist', 'title']
 | 
					 | 
				
			||||||
    model = Track
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
al.register(TrackAutocomplete)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class ArticleAutocomplete(al.AutocompleteModelBase):
 | 
					 | 
				
			||||||
    search_fields = ['title', 'subtitle']
 | 
					 | 
				
			||||||
    model = Article
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
al.register(ArticleAutocomplete)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class ProgramAutocomplete(al.AutocompleteModelBase):
 | 
					 | 
				
			||||||
    search_fields = ['title', 'subtitle']
 | 
					 | 
				
			||||||
    model = Program
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
al.register(ProgramAutocomplete)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class EpisodeAutocomplete(al.AutocompleteModelBase):
 | 
					 | 
				
			||||||
    search_fields = ['title', 'subtitle']
 | 
					 | 
				
			||||||
    model = Episode
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
al.register(EpisodeAutocomplete)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@ -12,7 +12,6 @@ from django.utils.html                      import strip_tags
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# extensions
 | 
					# extensions
 | 
				
			||||||
from taggit.managers                        import TaggableManager
 | 
					from taggit.managers                        import TaggableManager
 | 
				
			||||||
from sortedm2m.fields                       import SortedManyToManyField
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
import programs.settings                    as settings
 | 
					import programs.settings                    as settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -113,12 +112,6 @@ class Metadata (Model):
 | 
				
			|||||||
                    , default = False
 | 
					                    , default = False
 | 
				
			||||||
                    , help_text = _('publication is private')
 | 
					                    , help_text = _('publication is private')
 | 
				
			||||||
                  )
 | 
					                  )
 | 
				
			||||||
    # FIXME: add a field to specify if the element should be listed or not
 | 
					 | 
				
			||||||
    meta        = models.TextField(
 | 
					 | 
				
			||||||
                      _('meta')
 | 
					 | 
				
			||||||
                    , blank = True
 | 
					 | 
				
			||||||
                    , null = True
 | 
					 | 
				
			||||||
                  )
 | 
					 | 
				
			||||||
    tags        = TaggableManager(
 | 
					    tags        = TaggableManager(
 | 
				
			||||||
                      _('tags')
 | 
					                      _('tags')
 | 
				
			||||||
                    , blank = True
 | 
					                    , blank = True
 | 
				
			||||||
@ -234,8 +227,13 @@ class Track (Model):
 | 
				
			|||||||
    tags        = TaggableManager( blank = True )
 | 
					    tags        = TaggableManager( blank = True )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @staticmethod
 | 
				
			||||||
 | 
					    def autocomplete_search_fields():
 | 
				
			||||||
 | 
					        return ("artist__icontains", 'title__icontains')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __str__(self):
 | 
					    def __str__(self):
 | 
				
			||||||
        return ' '.join([self.title, _('by'), self.artist,
 | 
					        return ' '.join([self.artist, ':', self.title,
 | 
				
			||||||
                (self.version and ('(' + self.version + ')') or '') ])
 | 
					                (self.version and ('(' + self.version + ')') or '') ])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -313,8 +311,13 @@ class Sound (Metadata):
 | 
				
			|||||||
        super(Sound, self).save(*args, **kwargs)
 | 
					        super(Sound, self).save(*args, **kwargs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @staticmethod
 | 
				
			||||||
 | 
					    def autocomplete_search_fields():
 | 
				
			||||||
 | 
					        return ("id__iexact", "path__icontains", 'title__icontains')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __str__ (self):
 | 
					    def __str__ (self):
 | 
				
			||||||
        return str(self.id) + ': ' + self.path
 | 
					        return '/'.join(self.path.split('/')[-3:])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class Meta:
 | 
					    class Meta:
 | 
				
			||||||
@ -564,7 +567,6 @@ class Program (Publication):
 | 
				
			|||||||
        verbose_name_plural = _('Programs')
 | 
					        verbose_name_plural = _('Programs')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
class Episode (Publication):
 | 
					class Episode (Publication):
 | 
				
			||||||
    # Note:
 | 
					    # Note:
 | 
				
			||||||
    #   We do not especially need a duration here, because even if an
 | 
					    #   We do not especially need a duration here, because even if an
 | 
				
			||||||
@ -579,12 +581,12 @@ class Episode (Publication):
 | 
				
			|||||||
                    , verbose_name = _('parent')
 | 
					                    , verbose_name = _('parent')
 | 
				
			||||||
                    , help_text = _('parent program')
 | 
					                    , help_text = _('parent program')
 | 
				
			||||||
                  )
 | 
					                  )
 | 
				
			||||||
    tracks      = SortedManyToManyField(
 | 
					    tracks      = models.ManyToManyField(
 | 
				
			||||||
                      Track
 | 
					                      Track
 | 
				
			||||||
                    , blank = True
 | 
					                    , blank = True
 | 
				
			||||||
                    , verbose_name = _('tracks')
 | 
					                    , verbose_name = _('tracks')
 | 
				
			||||||
                  )
 | 
					                  )
 | 
				
			||||||
    sounds      = SortedManyToManyField(
 | 
					    sounds      = models.ManyToManyField(
 | 
				
			||||||
                      Sound
 | 
					                      Sound
 | 
				
			||||||
                    , blank = True
 | 
					                    , blank = True
 | 
				
			||||||
                    , verbose_name = _('sounds')
 | 
					                    , verbose_name = _('sounds')
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,25 @@
 | 
				
			|||||||
{% extends "admin/base.html" %}
 | 
					{% extends "admin/base.html" %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{% block extrahead %}
 | 
					{% block extrahead %}
 | 
				
			||||||
    <!-- <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.js" type="text/javascript"></script> -->
 | 
					<style>
 | 
				
			||||||
    {% include 'autocomplete_light/static.html' %}
 | 
					
 | 
				
			||||||
 | 
					.grp-autocomplete-wrapper-m2m:focus, .grp-autocomplete-wrapper-m2m.grp-state-focus,
 | 
				
			||||||
 | 
					.grp-autocomplete-wrapper-m2m {
 | 
				
			||||||
 | 
					  background: rgba(255, 255, 255, 0.2);
 | 
				
			||||||
 | 
					  border: none;
 | 
				
			||||||
 | 
					  box-shadow: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.grp-autocomplete-wrapper-m2m ul.grp-repr li.grp-search {
 | 
				
			||||||
 | 
					  background-color: #FDFDFD;
 | 
				
			||||||
 | 
					  border: 1px solid #CCC;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.grp-autocomplete-wrapper-m2m ul.grp-repr li {
 | 
				
			||||||
 | 
					  float: none;
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{% endblock %}
 | 
					{% endblock %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user