Permalink
Browse files

Merge branch 'feature/configurable-styles' into develop

  • Loading branch information...
stefanfoulis committed Jun 3, 2014
2 parents 67a9f69 + eae3377 commit c5a9f378efd87616a1280f5858074fd32a748248
Showing with 1,113 additions and 146 deletions.
  1. +19 −2 cmsplugin_filer_file/cms_plugins.py
  2. +17 −0 cmsplugin_filer_file/conf.py
  3. +121 −0 cmsplugin_filer_file/migrations/0003_auto__add_field_filerfile_style.py
  4. +5 −1 cmsplugin_filer_file/models.py
  5. +3 −7 cmsplugin_filer_file/templates/cmsplugin_filer_file/file.html
  6. +7 −0 cmsplugin_filer_file/templates/cmsplugin_filer_file/plugins/file/default.html
  7. +17 −7 cmsplugin_filer_folder/cms_plugins.py
  8. +18 −0 cmsplugin_filer_folder/conf.py
  9. +104 −0 cmsplugin_filer_folder/migrations/0002_auto__add_field_filerfolder_style.py
  10. +102 −0 cmsplugin_filer_folder/migrations/0003_move_view_option_to_style.py
  11. +103 −0 cmsplugin_filer_folder/migrations/0004_auto__del_field_filerfolder_view_option.py
  12. +13 −7 cmsplugin_filer_folder/models.py
  13. +3 −55 cmsplugin_filer_folder/templates/cmsplugin_filer_folder/folder.html
  14. +55 −0 cmsplugin_filer_folder/templates/cmsplugin_filer_folder/plugins/folder/default.html
  15. +19 −6 cmsplugin_filer_image/cms_plugins.py
  16. +17 −0 cmsplugin_filer_image/conf.py
  17. +196 −0 cmsplugin_filer_image/migrations/0011_auto__add_field_filerimage_style.py
  18. +5 −0 cmsplugin_filer_image/models.py
  19. +3 −35 cmsplugin_filer_image/templates/cmsplugin_filer_image/image.html
  20. +35 −0 cmsplugin_filer_image/templates/cmsplugin_filer_image/plugins/image/default.html
  21. +31 −4 cmsplugin_filer_teaser/cms_plugins.py
  22. +17 −0 cmsplugin_filer_teaser/conf.py
  23. +177 −0 cmsplugin_filer_teaser/migrations/0007_auto__chg_field_filerteaser_style.py
  24. +5 −4 cmsplugin_filer_teaser/models.py
  25. +18 −0 cmsplugin_filer_teaser/templates/cmsplugin_filer_teaser/plugins/teaser/default.html
  26. +3 −18 cmsplugin_filer_teaser/templates/cmsplugin_filer_teaser/teaser.html
@@ -1,17 +1,34 @@
from cms.plugin_pool import plugin_pool
from cms.plugin_base import CMSPluginBase
+from django.template.loader import select_template
from django.utils.translation import ugettext_lazy as _
import models
-from django.conf import settings
+from .conf import settings
class FilerFilePlugin(CMSPluginBase):
module = 'Filer'
model = models.FilerFile
name = _("File")
- render_template = "cmsplugin_filer_file/file.html"
+ TEMPLATE_NAME = 'cmsplugin_filer_file/plugins/file/%s.html'
+ render_template = TEMPLATE_NAME % 'default'
text_enabled = True
+ fieldsets = (
+ (None, {'fields': [
+ 'title',
+ 'file',
+ 'target_blank'
+ ]}),
+ )
+ if settings.CMSPLUGIN_FILER_FILE_STYLE_CHOICES:
+ fieldsets[0][1]['fields'].append('style')
+
def render(self, context, instance, placeholder):
+ self.render_template = select_template((
+ 'cmsplugin_filer_file/plugins/file.html', # backwards compatibility. deprecated!
+ self.TEMPLATE_NAME % instance.style,
+ self.TEMPLATE_NAME % 'default')
+ )
context.update({
'object':instance,
'placeholder':placeholder
@@ -0,0 +1,17 @@
+#-*- coding: utf-8 -*-
+from django.conf import settings
+from django.utils.translation import ugettext_lazy as _
+from appconf import AppConf
+
+
+class CmspluginFilerFolderAppConf(AppConf):
+ STYLE_CHOICES = (
+ # ('default', _('Default')), # define your styles here.
+ )
+ DEFAULT_STYLE = ''
+
+ def configure(self):
+ # set DEFAULT_STYLE to '' if it is not in STYLE_CHOICES
+ if not self.configured_data['DEFAULT_STYLE'] in [s for s, l in self.configured_data['STYLE_CHOICES']]:
+ self.configured_data['DEFAULT_STYLE'] = ''
+ return self.configured_data
@@ -0,0 +1,121 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding field 'FilerFile.style'
+ db.add_column(u'cmsplugin_filer_file_filerfile', 'style',
+ self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True),
+ keep_default=False)
+
+
+ def backwards(self, orm):
+ # Deleting field 'FilerFile.style'
+ db.delete_column(u'cmsplugin_filer_file_filerfile', 'style')
+
+
+ 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', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 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', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'cms.cmsplugin': {
+ 'Meta': {'object_name': 'CMSPlugin'},
+ 'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+ 'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
+ 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
+ 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
+ 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}),
+ 'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}),
+ 'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
+ 'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
+ 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
+ },
+ 'cms.placeholder': {
+ 'Meta': {'object_name': 'Placeholder'},
+ 'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
+ },
+ u'cmsplugin_filer_file.filerfile': {
+ 'Meta': {'object_name': 'FilerFile', '_ormbases': ['cms.CMSPlugin']},
+ u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
+ 'file': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['filer.File']"}),
+ 'style': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
+ 'target_blank': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
+ },
+ 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'})
+ }
+ }
+
+ complete_apps = ['cmsplugin_filer_file']
@@ -2,8 +2,8 @@
from django.db import models
from django.utils.translation import ugettext_lazy as _
from filer.fields.file import FilerFileField
-
from cmsplugin_filer_utils import FilerPluginManager
+from .conf import settings
class FilerFile(CMSPlugin):
@@ -17,9 +17,13 @@ class FilerFile(CMSPlugin):
The icon search is currently performed within get_icon_url; this is probably a performance concern.
"""
+ STYLE_CHOICES = settings.CMSPLUGIN_FILER_FILE_STYLE_CHOICES
+ DEFAULT_STYLE = settings.CMSPLUGIN_FILER_FILE_DEFAULT_STYLE
title = models.CharField(_("title"), max_length=255, null=True, blank=True)
file = FilerFileField(verbose_name=_('file'))
target_blank = models.BooleanField(_('Open link in new window'), default=False)
+ style = models.CharField(
+ _('Style'), choices=STYLE_CHOICES, default=DEFAULT_STYLE, max_length=255, blank=True)
objects = FilerPluginManager(select_related=('file',))
@@ -1,7 +1,3 @@
-{% if object.file.url %}
-<span class="file">
-<a href="{{ object.file.url }}"{% if object.target_blank %} target="_blank"{% endif %}>
-{% if object.get_icon_url %}<img src="{{ object.get_icon_url }}" style="border: 0px" alt="Icon" />{% endif %}
-{% if object.title %}{{ object.title }}{% else %}{{ object.get_file_name }}{% endif %} {% if object.file_exists %}<span class="filesize">({{ object.file.size|filesizeformat }})</span>{% else %}(file missing!){% endif %}</a>
-</span>
-{% endif %}
+{# for backwards compatibilty. please override #}
+{% include 'cmsplugin_filer_file/plugins/file/default.html' %}
+{# instead. #}
@@ -0,0 +1,7 @@
+{% if object.file.url %}
+<span class="file">
+<a href="{{ object.file.url }}"{% if object.target_blank %} target="_blank"{% endif %}>
+{% if object.get_icon_url %}<img src="{{ object.get_icon_url }}" style="border: 0px" alt="Icon" />{% endif %}
+{% if object.title %}{{ object.title }}{% else %}{{ object.get_file_name }}{% endif %} {% if object.file_exists %}<span class="filesize">({{ object.file.size|filesizeformat }})</span>{% else %}(file missing!){% endif %}</a>
+</span>
+{% endif %}
@@ -1,22 +1,28 @@
-from os.path import join
from cms.plugin_pool import plugin_pool
from cms.plugin_base import CMSPluginBase
+from django.template import loader
+from django.template.loader import select_template
from django.utils.translation import ugettext_lazy as _
-from django.forms.models import ModelForm
-import models
-from django.conf import settings
-from django.forms.widgets import Media
+from . import models
+from .conf import settings
from filer.models.imagemodels import Image
class FilerFolderPlugin(CMSPluginBase):
module = 'Filer'
model = models.FilerFolder
name = _("Folder")
- render_template = "cmsplugin_filer_folder/folder.html"
+ TEMPLATE_NAME = 'cmsplugin_filer_folder/plugins/folder/%s.html'
+ render_template = TEMPLATE_NAME % 'default'
text_enabled = False
admin_preview = False
+ fieldsets = (
+ (None, {'fields': ['title', 'folder']}),
+ )
+ if settings.CMSPLUGIN_FILER_FOLDER_STYLE_CHOICES:
+ fieldsets[0][1]['fields'].append('style')
+
def get_folder_files(self, folder, user):
qs_files = folder.files.filter(image__isnull=True)
if user.is_staff:
@@ -34,8 +40,12 @@ def get_folder_images(self, folder, user):
def get_children(self, folder):
return folder.get_children()
-
def render(self, context, instance, placeholder):
+ self.render_template = select_template((
+ 'cmsplugin_filer_folder/folder.html', # backwards compatibility. deprecated!
+ self.TEMPLATE_NAME % instance.style,
+ self.TEMPLATE_NAME % 'default')
+ )
folder_files = self.get_folder_files(instance.folder,
context['request'].user)
@@ -0,0 +1,18 @@
+#-*- coding: utf-8 -*-
+from django.conf import settings
+from django.utils.translation import ugettext_lazy as _
+from appconf import AppConf
+
+
+class CmspluginFilerFolderAppConf(AppConf):
+ STYLE_CHOICES = (
+ ("list", _("List")),
+ ("slideshow", _("Slideshow"))
+ )
+ DEFAULT_STYLE = 'list'
+
+ def configure(self):
+ # set DEFAULT_STYLE to '' if it is not in STYLE_CHOICES
+ if not self.configured_data['DEFAULT_STYLE'] in [s for s, l in self.configured_data['STYLE_CHOICES']]:
+ self.configured_data['DEFAULT_STYLE'] = ''
+ return self.configured_data
Oops, something went wrong.

0 comments on commit c5a9f37

Please sign in to comment.