commit 46a67a34e6faf8ff754bea89225116b6eff3bbdb Author: Rui Manuel da Silva Martins Date: Tue May 12 14:11:41 2015 +0100 First commit diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..c4bf456 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1 @@ +include README.rst \ No newline at end of file diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..ec81872 --- /dev/null +++ b/README.rst @@ -0,0 +1,28 @@ +===== +WAGTAIL MODELTRANSLATION ADAPTATION +===== + +Simple app containing a mixin model that integrates modeltranslation +(https://github.com/deschler/django-modeltranslation) into wagtail panels system. + +Quick start +----------- + +1. Add "wagtail_modeltranslation" to your INSTALLED_APPS setting like this:: + + INSTALLED_APPS = ( + ... + 'wagtail_modeltranslation', + **YOUR APPS** + ) + +2. Use TranslationMixin to integrate django-modeltranslation with Wagtail admin: + + from wagtail_modeltranslation.models import TranslationMixin + + class FooModel(Page, TranslationMixin): + foo = models.CharField() + + FooModel.panels = [...] + +2. Visit django-modeltranslation for documentation - http://django-modeltranslation.readthedocs.org/en/latest/ \ No newline at end of file diff --git a/dist/wagtail-modeltranslation-0.0.1.tar.gz b/dist/wagtail-modeltranslation-0.0.1.tar.gz new file mode 100644 index 0000000..a031a74 Binary files /dev/null and b/dist/wagtail-modeltranslation-0.0.1.tar.gz differ diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..4b05554 --- /dev/null +++ b/setup.py @@ -0,0 +1,36 @@ +import os +from setuptools import setup + +with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as readme: + README = readme.read() + +# allow setup.py to be run from any path +os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir))) + +setup( + name='wagtail-modeltranslation', + version='0.0.1', + packages=['wagtail_modeltranslation'], + include_package_data=True, + license='BSD License', + description='Integration of django-modeltranslation with Wagtail CMS', + long_description=README, + url='', + author='Rui Martins', + author_email='rmartins16@gmail.com', + classifiers=[ + 'Environment :: Web Environment', + 'Framework :: Django', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: BSD License', + 'Operating System :: OS Independent', + 'Programming Language :: Python', + # Replace these appropriately if you are stuck on Python 2. + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.2', + 'Programming Language :: Python :: 3.3', + 'Topic :: Internet :: WWW/HTTP', + 'Topic :: Internet :: WWW/HTTP :: Dynamic Content', + ], + install_requires=['django-modeltranslation==0.9', 'wagtail'] +) \ No newline at end of file diff --git a/wagtail_modeltranslation.egg-info/PKG-INFO b/wagtail_modeltranslation.egg-info/PKG-INFO new file mode 100644 index 0000000..0d8d2ed --- /dev/null +++ b/wagtail_modeltranslation.egg-info/PKG-INFO @@ -0,0 +1,48 @@ +Metadata-Version: 1.1 +Name: wagtail-modeltranslation +Version: 0.0.1 +Summary: Integration of django-modeltranslation with Wagtail CMS +Home-page: UNKNOWN +Author: Rui Martins +Author-email: rmartins16@gmail.com +License: BSD License +Description: ===== + WAGTAIL MODELTRANSLATION ADAPTATION + ===== + + Simple app containing a mixin model that integrates modeltranslation + (https://github.com/deschler/django-modeltranslation) into wagtail panels system. + + Quick start + ----------- + + 1. Add "wagtail_modeltranslation" to your INSTALLED_APPS setting like this:: + + INSTALLED_APPS = ( + ... + 'wagtail_modeltranslation', + **YOUR APPS** + ) + + 2. Use TranslationMixin to integrate django-modeltranslation with Wagtail admin: + + from wagtail_modeltranslation.models import TranslationMixin + + class FooModel(Page, TranslationMixin): + foo = models.CharField() + + FooModel.panels = [...] + + 2. Visit django-modeltranslation for documentation - http://django-modeltranslation.readthedocs.org/en/latest/ +Platform: UNKNOWN +Classifier: Environment :: Web Environment +Classifier: Framework :: Django +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.2 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Topic :: Internet :: WWW/HTTP +Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content diff --git a/wagtail_modeltranslation.egg-info/SOURCES.txt b/wagtail_modeltranslation.egg-info/SOURCES.txt new file mode 100644 index 0000000..46021b1 --- /dev/null +++ b/wagtail_modeltranslation.egg-info/SOURCES.txt @@ -0,0 +1,14 @@ +MANIFEST.in +README.rst +setup.py +wagtail_modeltranslation/__init__.py +wagtail_modeltranslation/admin.py +wagtail_modeltranslation/models.py +wagtail_modeltranslation/tests.py +wagtail_modeltranslation/translation.py +wagtail_modeltranslation/views.py +wagtail_modeltranslation.egg-info/PKG-INFO +wagtail_modeltranslation.egg-info/SOURCES.txt +wagtail_modeltranslation.egg-info/dependency_links.txt +wagtail_modeltranslation.egg-info/requires.txt +wagtail_modeltranslation.egg-info/top_level.txt \ No newline at end of file diff --git a/wagtail_modeltranslation.egg-info/dependency_links.txt b/wagtail_modeltranslation.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/wagtail_modeltranslation.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/wagtail_modeltranslation.egg-info/requires.txt b/wagtail_modeltranslation.egg-info/requires.txt new file mode 100644 index 0000000..177a3ef --- /dev/null +++ b/wagtail_modeltranslation.egg-info/requires.txt @@ -0,0 +1,2 @@ +django-modeltranslation==0.9 +wagtail \ No newline at end of file diff --git a/wagtail_modeltranslation.egg-info/top_level.txt b/wagtail_modeltranslation.egg-info/top_level.txt new file mode 100644 index 0000000..1cb232b --- /dev/null +++ b/wagtail_modeltranslation.egg-info/top_level.txt @@ -0,0 +1 @@ +wagtail_modeltranslation diff --git a/wagtail_modeltranslation/__init__.py b/wagtail_modeltranslation/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/wagtail_modeltranslation/__init__.pyc b/wagtail_modeltranslation/__init__.pyc new file mode 100644 index 0000000..bf75c60 Binary files /dev/null and b/wagtail_modeltranslation/__init__.pyc differ diff --git a/wagtail_modeltranslation/admin.py b/wagtail_modeltranslation/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/wagtail_modeltranslation/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/wagtail_modeltranslation/admin.pyc b/wagtail_modeltranslation/admin.pyc new file mode 100644 index 0000000..d8a0d8c Binary files /dev/null and b/wagtail_modeltranslation/admin.pyc differ diff --git a/wagtail_modeltranslation/migrations/__init__.py b/wagtail_modeltranslation/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/wagtail_modeltranslation/migrations/__init__.pyc b/wagtail_modeltranslation/migrations/__init__.pyc new file mode 100644 index 0000000..6ced0b2 Binary files /dev/null and b/wagtail_modeltranslation/migrations/__init__.pyc differ diff --git a/wagtail_modeltranslation/models.py b/wagtail_modeltranslation/models.py new file mode 100644 index 0000000..08e93f1 --- /dev/null +++ b/wagtail_modeltranslation/models.py @@ -0,0 +1,119 @@ +# coding: utf-8 + +from django.conf import settings +from wagtail.wagtailadmin.edit_handlers import FieldPanel, MultiFieldPanel +from modeltranslation.translator import translator, NotRegistered + + +#################################### +# TRANSLATION MIXIN +#################################### +class TranslationMixin(object): + + def __init__(self, *args, **kwargs): + super(TranslationMixin, self).__init__(*args, **kwargs) + + self.translation_options = translator.get_options_for_model( + self.__class__) + + self.patch_translation_panels() + + def patch_translation_panels(self): + if hasattr(self, 'panels'): + # TODO !!!! + tabs = () + else: + tabs = () + + if hasattr(self, 'content_panels'): + tabs += (('content_panels', list(self.content_panels)),) + if hasattr(self, 'promote_panels'): + tabs += (('promote_panels', list(self.promote_panels)),) + + for tab_name, tab in tabs: + translated_tab = [] + for panel in tab: + #################################### + # FIELDPANEL + #################################### + if panel.__class__.__name__ == 'FieldPanel': + for item in self.patch_translation_field(panel): + translated_tab.append(item) + #################################### + # MULTIFIELDPANEL + #################################### + elif panel.__class__.__name__ == 'MultiFieldPanel': + translated_children = [] + for child_panel in panel.children: + for item in self.patch_translation_field(child_panel): + translated_children.append(item) + translated_tab.append( + MultiFieldPanel( + translated_children, + classname=panel.classname, + heading=panel.heading)) + #################################### + # INLINEPANEL + #################################### + elif panel.__class__.__name__ == 'InlinePanel': + self.patch_translation_inlinepanels(panel) + translated_tab.append(panel) + #################################### + # OTHERS + #################################### + else: + translated_tab.append(panel) + + setattr(self.__class__, tab_name, translated_tab) + + def patch_translation_field(self, fieldpanel, translation_fields=None): + translated_fields = [] + tr_fields = translation_fields if translation_fields else self.translation_options.fields + + translated_fields.append(fieldpanel) # default language or untranslated field + if fieldpanel.field_name in tr_fields: + for lang in settings.LANGUAGES: + if lang[0] != settings.LANGUAGE_CODE: # other languages + translated_field_name = "%s_%s" % ( + fieldpanel.field_name, lang[0]) + translated_fields.append( + FieldPanel( + translated_field_name, + classname=fieldpanel.classname)) + + return translated_fields + + def patch_translation_inlinepanels(self, panel): + inline_panels = getattr( + self.__class__, panel.relation_name).related.model.panels + + try: + inline_model_tr_fields = translator.get_options_for_model( + getattr( + self.__class__, panel.relation_name).related.model).fields + except NotRegistered: + return None + + translated_inline = [] + for inlinepanel in inline_panels: + if inlinepanel.__class__.__name__ == 'FieldPanel': + for item in self.patch_translation_field( + inlinepanel, + translation_fields=inline_model_tr_fields): + translated_inline.append(item) + elif inlinepanel.__class__.__name__ == 'MultiFieldPanel': + translated_children = [] + for child_panel in inlinepanel.children: + for item in self.patch_translation_field( + child_panel, + translation_fields=inline_model_tr_fields): + translated_children.append(item) + translated_inline.append( + MultiFieldPanel( + translated_children, + classname=inlinepanel.classname, + heading=inlinepanel.heading)) + else: + translated_inline.append(inlinepanel) + + getattr(self.__class__, panel.relation_name).related.model.panels = translated_inline diff --git a/wagtail_modeltranslation/models.pyc b/wagtail_modeltranslation/models.pyc new file mode 100644 index 0000000..31cb002 Binary files /dev/null and b/wagtail_modeltranslation/models.pyc differ diff --git a/wagtail_modeltranslation/tests.py b/wagtail_modeltranslation/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/wagtail_modeltranslation/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/wagtail_modeltranslation/translation.py b/wagtail_modeltranslation/translation.py new file mode 100644 index 0000000..2aa5f1d --- /dev/null +++ b/wagtail_modeltranslation/translation.py @@ -0,0 +1,12 @@ +# coding: utf-8 + +from wagtail.wagtailcore.models import Page + +from modeltranslation.translator import translator, TranslationOptions + + +# regist wagtail Page model for translation +class PageTR(TranslationOptions): + fields = ('title', 'slug') + +translator.register(Page, PageTR) diff --git a/wagtail_modeltranslation/translation.pyc b/wagtail_modeltranslation/translation.pyc new file mode 100644 index 0000000..d1783bd Binary files /dev/null and b/wagtail_modeltranslation/translation.pyc differ diff --git a/wagtail_modeltranslation/views.py b/wagtail_modeltranslation/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/wagtail_modeltranslation/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here.