diff --git a/cms/models.py b/cms/models.py index 0c45ed6..a07366c 100644 --- a/cms/models.py +++ b/cms/models.py @@ -3,59 +3,16 @@ from django.urls import reverse from django.conf import settings from django.forms import TextInput from django.utils.translation import gettext_lazy as _ - from ckeditor.fields import RichTextField from embed_video.fields import EmbedVideoField +from numberedmodel.models import NumberedModel + class VarCharField(models.TextField): def formfield(self, **kwargs): kwargs.update({'widget': TextInput}) return super().formfield(**kwargs) -# From https://github.com/JaapJoris/django-numberedmodel.git -class NumberedModel(models.Model): - def number_with_respect_to(self): - return self.__class__.objects.all() - - def _renumber(self): - '''Renumbers the queryset while preserving the instance's number''' - - queryset = self.number_with_respect_to() - field_name = self.__class__._meta.ordering[-1].lstrip('-') - this_nr = getattr(self, field_name) - if this_nr is None: - this_nr = len(queryset) + 1 - - # The algorithm: loop over the queryset and set each object's - # number to the counter. When an object's number equals the - # number of this instance, set this instance's number to the - # counter, increment the counter by 1, and finish the loop - counter = 1 - inserted = False - for other in queryset.exclude(pk=self.pk): - other_nr = getattr(other, field_name) - if counter >= this_nr and not inserted: - setattr(self, field_name, counter) - inserted = True - counter += 1 - if other_nr != counter: - setattr(other, field_name, counter) - super(NumberedModel, other).save() - counter += 1 - if not inserted: - setattr(self, field_name, counter) - - def save(self, *args, **kwargs): - self._renumber() - super(NumberedModel, self).save(*args, **kwargs) - - def delete(self, *args, **kwargs): - super(NumberedModel, self).delete(*args, **kwargs) - self._renumber() - - class Meta: - abstract = True - class Page(NumberedModel): position = models.PositiveIntegerField(_('position'), blank=True) title = models.CharField(_('title'), max_length=255) diff --git a/numberedmodel/__init__.py b/numberedmodel/__init__.py new file mode 100644 index 0000000..4ce15bd --- /dev/null +++ b/numberedmodel/__init__.py @@ -0,0 +1 @@ +default_app_config = 'numberedmodel.apps.NumberedModelConfig' diff --git a/numberedmodel/apps.py b/numberedmodel/apps.py new file mode 100644 index 0000000..6ba246e --- /dev/null +++ b/numberedmodel/apps.py @@ -0,0 +1,4 @@ +from django.apps import AppConfig + +class NumberedModelConfig(AppConfig): + name = 'numberedmodel' diff --git a/numberedmodel/migrations/__init__.py b/numberedmodel/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/numberedmodel/models.py b/numberedmodel/models.py new file mode 100644 index 0000000..49fdc76 --- /dev/null +++ b/numberedmodel/models.py @@ -0,0 +1,44 @@ +from django.db import models + +class NumberedModel(models.Model): + def number_with_respect_to(self): + return self.__class__.objects.all() + + def _renumber(self): + '''Renumbers the queryset while preserving the instance's number''' + + queryset = self.number_with_respect_to() + field_name = self.__class__._meta.ordering[-1].lstrip('-') + this_nr = getattr(self, field_name) + if this_nr is None: + this_nr = len(queryset) + 1 + + # The algorithm: loop over the queryset and set each object's + # number to the counter. When an object's number equals the + # number of this instance, set this instance's number to the + # counter, increment the counter by 1, and finish the loop + counter = 1 + inserted = False + for other in queryset.exclude(pk=self.pk): + other_nr = getattr(other, field_name) + if counter >= this_nr and not inserted: + setattr(self, field_name, counter) + inserted = True + counter += 1 + if other_nr != counter: + setattr(other, field_name, counter) + super(NumberedModel, other).save() + counter += 1 + if not inserted: + setattr(self, field_name, counter) + + def save(self, *args, **kwargs): + self._renumber() + super(NumberedModel, self).save(*args, **kwargs) + + def delete(self, *args, **kwargs): + super(NumberedModel, self).delete(*args, **kwargs) + self._renumber() + + class Meta: + abstract = True diff --git a/numberedmodel/tests.py b/numberedmodel/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/numberedmodel/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..c772fcf --- /dev/null +++ b/requirements.txt @@ -0,0 +1,6 @@ +Django +django-ckeditor +django-extensions +django-embed-video +easy-thumbnails +psycopg2 --no-binary psycopg2 diff --git a/simplesass/__init__.py b/simplesass/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/simplesass/middleware.py b/simplesass/middleware.py new file mode 100644 index 0000000..fbdb2a9 --- /dev/null +++ b/simplesass/middleware.py @@ -0,0 +1,25 @@ +import os +from django.conf import settings +from sass import compile + +class SimpleSassMiddleware: + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + if settings.DEBUG and request.path.endswith('.css'): + _, staticdir, app, css_file = request.path.split('/', maxsplit=3) + sass_file = css_file[:-4] + css_path = os.path.join(app, staticdir, app, css_file) + sass_path = os.path.join(app, staticdir, app, sass_file) + map_path = css_path + '.map' + if os.path.exists(sass_path): + css = compile(filename=sass_path, output_style='nested') + css, mapping = compile(filename=sass_path, source_map_filename=map_path) + with open(css_path, 'w') as f: + f.write(css) + with open(map_path, 'w') as f: + f.write(mapping) + + response = self.get_response(request) + return response