First commit

This commit is contained in:
Rui Manuel da Silva Martins 2015-05-12 14:11:41 +01:00
commit 46a67a34e6
21 changed files with 271 additions and 0 deletions

1
MANIFEST.in Normal file
View file

@ -0,0 +1 @@
include README.rst

28
README.rst Normal file
View file

@ -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/

Binary file not shown.

36
setup.py Normal file
View file

@ -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']
)

View file

@ -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

View file

@ -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

View file

@ -0,0 +1 @@

View file

@ -0,0 +1,2 @@
django-modeltranslation==0.9
wagtail

View file

@ -0,0 +1 @@
wagtail_modeltranslation

View file

Binary file not shown.

View file

@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

Binary file not shown.

Binary file not shown.

View file

@ -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

Binary file not shown.

View file

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

View file

@ -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)

Binary file not shown.

View file

@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.