From 46a67a34e6faf8ff754bea89225116b6eff3bbdb Mon Sep 17 00:00:00 2001 From: Rui Manuel da Silva Martins Date: Tue, 12 May 2015 14:11:41 +0100 Subject: [PATCH 001/110] First commit --- MANIFEST.in | 1 + README.rst | 28 +++++ dist/wagtail-modeltranslation-0.0.1.tar.gz | Bin 0 -> 3055 bytes setup.py | 36 ++++++ wagtail_modeltranslation.egg-info/PKG-INFO | 48 +++++++ wagtail_modeltranslation.egg-info/SOURCES.txt | 14 +++ .../dependency_links.txt | 1 + .../requires.txt | 2 + .../top_level.txt | 1 + wagtail_modeltranslation/__init__.py | 0 wagtail_modeltranslation/__init__.pyc | Bin 0 -> 181 bytes wagtail_modeltranslation/admin.py | 3 + wagtail_modeltranslation/admin.pyc | Bin 0 -> 238 bytes .../migrations/__init__.py | 0 .../migrations/__init__.pyc | Bin 0 -> 192 bytes wagtail_modeltranslation/models.py | 119 ++++++++++++++++++ wagtail_modeltranslation/models.pyc | Bin 0 -> 3589 bytes wagtail_modeltranslation/tests.py | 3 + wagtail_modeltranslation/translation.py | 12 ++ wagtail_modeltranslation/translation.pyc | Bin 0 -> 696 bytes wagtail_modeltranslation/views.py | 3 + 21 files changed, 271 insertions(+) create mode 100644 MANIFEST.in create mode 100644 README.rst create mode 100644 dist/wagtail-modeltranslation-0.0.1.tar.gz create mode 100644 setup.py create mode 100644 wagtail_modeltranslation.egg-info/PKG-INFO create mode 100644 wagtail_modeltranslation.egg-info/SOURCES.txt create mode 100644 wagtail_modeltranslation.egg-info/dependency_links.txt create mode 100644 wagtail_modeltranslation.egg-info/requires.txt create mode 100644 wagtail_modeltranslation.egg-info/top_level.txt create mode 100644 wagtail_modeltranslation/__init__.py create mode 100644 wagtail_modeltranslation/__init__.pyc create mode 100644 wagtail_modeltranslation/admin.py create mode 100644 wagtail_modeltranslation/admin.pyc create mode 100644 wagtail_modeltranslation/migrations/__init__.py create mode 100644 wagtail_modeltranslation/migrations/__init__.pyc create mode 100644 wagtail_modeltranslation/models.py create mode 100644 wagtail_modeltranslation/models.pyc create mode 100644 wagtail_modeltranslation/tests.py create mode 100644 wagtail_modeltranslation/translation.py create mode 100644 wagtail_modeltranslation/translation.pyc create mode 100644 wagtail_modeltranslation/views.py 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 0000000000000000000000000000000000000000..a031a74486035a8e82274a52bbde4292afad3148 GIT binary patch literal 3055 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..bf75c607e94f949d11181cb98f30591665584eaa GIT binary patch literal 181 zcmZ9GK?(vf3`Hxt5W#!Q%3MH1Jb)X=ttECst#+EyW*j`X7cc{^Ch%X#C!b{b-EP|U zbam!m3++c$T`4+aF3see8-xsQ?43Q4gBUNR7>^3h8 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d8a0d8c3b3fc8b790995972229a4cda43184829b GIT binary patch literal 238 zcmZ8bOA5j;5KUSH5p?Atx@s;UA|Akn){QP?+Ju^#AIa3>xjleR#f?5@-u#%Emp|vT zs@fhK_C-ctRv+@X!&Pzl|foh22gt^ VK1#~)z$x8d(YQBiJ?c#3|2K7jJ#7F0 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..6ced0b2e472d0155654522fc9b270a4f345ba3f4 GIT binary patch literal 192 zcmZ8bO9}!p46W!w1n)5`a{&?Y0B&Ynm)I#a+8=Gk!E<{7Q*bqb_mVtbKI`v(Hw>4X zQU6#;J`3tbXjH22nsV)g)PgFB29FdhywMem470uGlAhKuU`dlfXH&-VT6Q^Cn9(tk n*CCD8vy4}dOesPjS=OowT2my}`j9`om1{>aPu`x|PgS6PN{cgs literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..31cb002ea633ce821d1c20ccfe405754eb7abfd4 GIT binary patch literal 3589 zcmcguO>Z1U5UrlsFFSGKuQ&;jK!ikEg0MkBB0^C_h(m;wY+y`SuwsqIJLC1(yR++= z4%s04fD&=!P7eGCICA4ZzzK1HUw}Aq0p6?G+1)sBOe{}te^hsMSG{^w?w>Q$zyJ2p zot6y$T>QR^FZ%>dh<_s;k*<+-BZgx~I*xQ*S$CydlJ!zP>q@6A-HNPNq+6BsDrQR( z)nv;^Se8d34@Ev(pOUa5YxOFQj{m`5-JoY{R2NwrC+)26aAq3K`*G9>KMaznV~=Ba z>t4skOFkf3Ytjx zLOc+6U3d6wc3i-!!R+7oEnk@b6h zi??O|RxkCty$}YQ!iw*=Izg8CzFna3*a(HZJ%#yxU|ZY%f?K^=v%Vo{sWJIp>s1DM$BoaVvaj%eZG|6HGJ83@CU393&VY|etJs6 zDLF8bY)UxI&T!Sy)tmGUoSSAmBA%lszJx=a!`}Ox#Gkcw-+Z?Cr?~7&Aq>+nX3U{_N$Cd-fmh# zC`RW9Han_*QguyLe`Sc{qm-k>@V5DYH_dN98aEM}+yM9^B1-bm#iPEIregjGeAiH9 z<=C^wFwyEIHcG5NF$F|*do~(Qc?>>J>4E@IuqQz`vINU^6ojA?%cDO?I&l&ylZ-K2 zr;c1S$O3Cqg?Iz^6PlwDFsY)LZ^!rf~>Ymni+zHbt(JOlM zJWm7h#s54a)=Lf_%NKwUd96C{;2lMy7qr1uWVmgH5$r5ynyIV_gYEPt>ik zjk-@z0i=pMs-1L@8+UA{XCK>i5t%Hzghmk8Q%=P>ZeB9@oCQ-cGo^X6WERm@%q)5* z@ay86GP9VQF|*}4r$sZ+Y~&~9f^X4bbht!ZI?px%%7H=r8-^ufGN)$+u#p{zA|@-6 zK9<1-?Tsj1-MBrBT2RVq&Q)aBm2{QFfpF(0#4^^v97~K_Jr&48=ptWGgh6ODj#g!F zRhnQHNUhaLs*M!wryfW`J$DGu$df&rHlW>;*Iel$>&AfTUTo0L&~7k#o{%kvI4bCKSa>dz3qX4th;<1l*gmHTe9& zYjg)lIZq-_i^0Y4H4xWK=A{I;>`qI%A;xHG|CDG%G635l~8 zk#hJ7Bi8j^=2q&?8M??vOXC?;ixR2`h(ke>?^A}IAbIaBwZ6jU9Gd4DB4?nF#eMb; z8bMf`aY(1GISVo^qqLea^B`CLE}}=$%|{c&>&!WgoK0v-G6@3B}Kr0{@AeaZB0%$|XLuez&BiaoCBbW=Q zBKQQ@06gadzz`NgKmj;_O+cpx@E8wCwE3nH3yNGsFqJjN0kaW@`_K=v4OJ#N6zIE6l=Rjb-(w7Y%FPW-+ zma@g7@V1Jg)zwNd<^1yoRb^v}U=LOjO<#43>AS4SxJ%dg(iy$L(xuYqRY|sWC(YX- z>pGjRW$k36I1#FC8>r&+Pn>ig85=yIX}Rj5xQ~x$b(aLaLej6LHkf!do6%ozR|JRZ s$yQyPjGrW9RiDFg6Aadkb!hfg`sja3^$xCo8-K%PTkidNFpkFI51~%3xc~qF literal 0 HcmV?d00001 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. From e36442fdd43b99a274164d18a792b3e2a197ca14 Mon Sep 17 00:00:00 2001 From: Rui Manuel da Silva Martins Date: Tue, 12 May 2015 18:00:43 +0100 Subject: [PATCH 002/110] Version 0.0.2 --- README.rst | 34 +++++++++------- dist/wagtail-modeltranslation-0.0.2.tar.gz | Bin 0 -> 3434 bytes setup.py | 2 +- wagtail_modeltranslation.egg-info/PKG-INFO | 37 ++++++++++-------- wagtail_modeltranslation.egg-info/SOURCES.txt | 1 + .../js/translated_slugs.js | 16 ++++++++ wagtail_modeltranslation/translation.py | 6 ++- wagtail_modeltranslation/translation.pyc | Bin 696 -> 776 bytes wagtail_modeltranslation/wagtail_hooks.py | 26 ++++++++++++ wagtail_modeltranslation/wagtail_hooks.pyc | Bin 0 -> 1345 bytes 10 files changed, 89 insertions(+), 33 deletions(-) create mode 100644 dist/wagtail-modeltranslation-0.0.2.tar.gz create mode 100644 wagtail_modeltranslation/static/wagtail_modeltranslation/js/translated_slugs.js create mode 100644 wagtail_modeltranslation/wagtail_hooks.py create mode 100644 wagtail_modeltranslation/wagtail_hooks.pyc diff --git a/README.rst b/README.rst index ec81872..aeb093b 100644 --- a/README.rst +++ b/README.rst @@ -1,28 +1,32 @@ -===== -WAGTAIL MODELTRANSLATION ADAPTATION -===== +# WAGTAIL MODELTRANSLATION ADAPTATION Simple app containing a mixin model that integrates modeltranslation (https://github.com/deschler/django-modeltranslation) into wagtail panels system. -Quick start ------------ +## Quick start 1. Add "wagtail_modeltranslation" to your INSTALLED_APPS setting like this:: - INSTALLED_APPS = ( - ... - 'wagtail_modeltranslation', - **YOUR APPS** - ) + INSTALLED_APPS = ( + ... + 'wagtail_modeltranslation', + **YOUR APPS** + ) 2. Use TranslationMixin to integrate django-modeltranslation with Wagtail admin: - from wagtail_modeltranslation.models import TranslationMixin + from wagtail_modeltranslation.models import TranslationMixin + class FooModel(Page, TranslationMixin): + foo = models.CharField() + FooModel.panels = [...] - class FooModel(Page, TranslationMixin): - foo = models.CharField() +3. Visit django-modeltranslation for documentation - http://django-modeltranslation.readthedocs.org/en/latest/ - FooModel.panels = [...] -2. Visit django-modeltranslation for documentation - http://django-modeltranslation.readthedocs.org/en/latest/ \ No newline at end of file +## Release Notes: + +### v0.0.2 + +**Features**: + +- Prepopulated fields now works for translated fields (title and slug) diff --git a/dist/wagtail-modeltranslation-0.0.2.tar.gz b/dist/wagtail-modeltranslation-0.0.2.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..cb6f462b07efeb488482acd4ec7a30b2dd4c3cb0 GIT binary patch literal 3434 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 M|2m}5kN|i909YH{sQ>@~ literal 0 HcmV?d00001 diff --git a/setup.py b/setup.py index 4b05554..23a4600 100644 --- a/setup.py +++ b/setup.py @@ -9,7 +9,7 @@ os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir))) setup( name='wagtail-modeltranslation', - version='0.0.1', + version='0.0.2', packages=['wagtail_modeltranslation'], include_package_data=True, license='BSD License', diff --git a/wagtail_modeltranslation.egg-info/PKG-INFO b/wagtail_modeltranslation.egg-info/PKG-INFO index 0d8d2ed..32dd6b0 100644 --- a/wagtail_modeltranslation.egg-info/PKG-INFO +++ b/wagtail_modeltranslation.egg-info/PKG-INFO @@ -1,39 +1,44 @@ Metadata-Version: 1.1 Name: wagtail-modeltranslation -Version: 0.0.1 +Version: 0.0.2 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 - ===== +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 - ----------- + ## Quick start 1. Add "wagtail_modeltranslation" to your INSTALLED_APPS setting like this:: - INSTALLED_APPS = ( - ... - 'wagtail_modeltranslation', - **YOUR APPS** - ) + INSTALLED_APPS = ( + ... + 'wagtail_modeltranslation', + **YOUR APPS** + ) 2. Use TranslationMixin to integrate django-modeltranslation with Wagtail admin: - from wagtail_modeltranslation.models import TranslationMixin + from wagtail_modeltranslation.models import TranslationMixin + class FooModel(Page, TranslationMixin): + foo = models.CharField() + FooModel.panels = [...] - class FooModel(Page, TranslationMixin): - foo = models.CharField() + 3. Visit django-modeltranslation for documentation - http://django-modeltranslation.readthedocs.org/en/latest/ - FooModel.panels = [...] - 2. Visit django-modeltranslation for documentation - http://django-modeltranslation.readthedocs.org/en/latest/ + ## Release Notes: + + ### v0.0.2 + + **Features**: + + - Prepopulated fields now works for translated fields (title and slug) + Platform: UNKNOWN Classifier: Environment :: Web Environment Classifier: Framework :: Django diff --git a/wagtail_modeltranslation.egg-info/SOURCES.txt b/wagtail_modeltranslation.egg-info/SOURCES.txt index 46021b1..2097771 100644 --- a/wagtail_modeltranslation.egg-info/SOURCES.txt +++ b/wagtail_modeltranslation.egg-info/SOURCES.txt @@ -7,6 +7,7 @@ wagtail_modeltranslation/models.py wagtail_modeltranslation/tests.py wagtail_modeltranslation/translation.py wagtail_modeltranslation/views.py +wagtail_modeltranslation/wagtail_hooks.py wagtail_modeltranslation.egg-info/PKG-INFO wagtail_modeltranslation.egg-info/SOURCES.txt wagtail_modeltranslation.egg-info/dependency_links.txt diff --git a/wagtail_modeltranslation/static/wagtail_modeltranslation/js/translated_slugs.js b/wagtail_modeltranslation/static/wagtail_modeltranslation/js/translated_slugs.js new file mode 100644 index 0000000..972f625 --- /dev/null +++ b/wagtail_modeltranslation/static/wagtail_modeltranslation/js/translated_slugs.js @@ -0,0 +1,16 @@ +$(document).ready(function() { + $.each(langs, function(idx, lang_code){ + $('#id_title_'+lang_code).on('focus', function() { + console.log('focus'); + $('#id_slug_'+lang_code).data('previous-val', $('#id_slug_'+lang_code).val()); + $(this).data('previous-val', $(this).val()); + }); + + $('#id_title_'+lang_code).on('keyup keydown keypress blur', function() { + if ($('body').hasClass('create') || (!$('#id_slug_'+lang_code).data('previous-val').length || cleanForSlug($('#id_title_'+lang_code).data('previous-val')) === $('#id_slug_'+lang_code).data('previous-val'))) { + // only update slug if the page is being created from scratch, if slug is completely blank, or if title and slug prior to typing were identical + $('#id_slug_'+lang_code).val(cleanForSlug($('#id_title_'+lang_code).val())); + } + }); + }); +}); \ No newline at end of file diff --git a/wagtail_modeltranslation/translation.py b/wagtail_modeltranslation/translation.py index 2aa5f1d..915b435 100644 --- a/wagtail_modeltranslation/translation.py +++ b/wagtail_modeltranslation/translation.py @@ -7,6 +7,10 @@ from modeltranslation.translator import translator, TranslationOptions # regist wagtail Page model for translation class PageTR(TranslationOptions): - fields = ('title', 'slug') + fields = ( + 'title', + 'slug', + 'seo_title', + 'search_description',) translator.register(Page, PageTR) diff --git a/wagtail_modeltranslation/translation.pyc b/wagtail_modeltranslation/translation.pyc index d1783bdfdea6ba04d0f983b2f7f3a02ade05dd7e..d94d2840a299322f151f5d726d617993b9f70ae8 100644 GIT binary patch delta 188 zcmdnN+QG)o{F#?)m?zdI=|pk(wW00u~km^Ad}aGvZTHi<65o3raHc^EAM!;hKwKnu}317mH!n ZJz0QpH8%&)U^XTOMj)JgfblycI{@ajFLD3? delta 89 zcmeBR+ri4t{F#@_DcyM@`#w`91_lNvATH(u5~&OfQH%^JObk&>3_-yf%s`', + ((settings.STATIC_URL, filename) for filename in js_files) + ) + + lang_codes = [] + for lang in settings.LANGUAGES: + if lang[0] != settings.LANGUAGE_CODE: + lang_codes.append("'%s'" % lang[0]) + + js_languages = "" % (", ".join(lang_codes)) + + return format_html(js_languages) + js_includes \ No newline at end of file diff --git a/wagtail_modeltranslation/wagtail_hooks.pyc b/wagtail_modeltranslation/wagtail_hooks.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8bbc3fcdd02e2135a329216c41c69645104301ba GIT binary patch literal 1345 zcmchWOKaOe5P)YT+j+DBw=OA#QcNJkhhim%oa&f{B!oh6K~7q52||_DiWI%FvrbZC zozh$XWdB2dKs&Q``UvzIp&e;vXLo15nYDkcEPwC1CjrbKi@tAZpi3g8S3nAo2^a~; zEEriJ*lIy)Lso-PZKm6h)*)-ar~yJYAX$L02DbvjI(!BG87)HCfMI8WwvB(%)8Ui! zBNF36Wxn>#be8Jozq*$cao!Q^xkv(~)^Q%;%u*-ISy7y$Srz9fmG)#9>q2=6nvB?m z#~v^KMuO6b1XQ%2Ng}j4PKs~}uuoCm+E9@PKxM&o543>9g8kDisBD;$ZyjE+&4zOu z)HX~lNNSwdd~TJt5Et7(@5hi3EJ9LeCo->AHPGZ}s7wVsA9j`~o&h=}ulz{+aq4A7 zC{wNc98+J%MeZc%+^I73Fr7r$O%NH#GQJ|&!$8HQZlelz)^0Ydo2_cC-*aZxe!z~* z*`|R!cn#%x`i%1=28jR)W^BO+aY6Y3RfyLNOm$pSqGi&D$GgYx_Pi7KXjV3!=x&;t zjN?@1ekMC)0wWB1=d8%2bLmHvjdrf&=Ta4k47B5`ViNd~EJ|OU-`C0#o&UnPn=m!+ zmS2zo_9B_f>r(Z(bCBa|Kui*_Mq* Date: Mon, 18 May 2015 17:19:38 +0100 Subject: [PATCH 003/110] v0.0.3 --- README.rst | 7 +- dist/wagtail-modeltranslation-0.0.2.tar.gz | Bin 3434 -> 4073 bytes dist/wagtail-modeltranslation-0.0.3.tar.gz | Bin 0 -> 4067 bytes setup.py | 2 +- wagtail_modeltranslation.egg-info/PKG-INFO | 9 +- wagtail_modeltranslation/__init__.pyc | Bin 181 -> 181 bytes wagtail_modeltranslation/admin.pyc | Bin 238 -> 238 bytes wagtail_modeltranslation/models.py | 241 ++++++++++++++------- wagtail_modeltranslation/models.pyc | Bin 3589 -> 5832 bytes wagtail_modeltranslation/translation.pyc | Bin 776 -> 776 bytes wagtail_modeltranslation/wagtail_hooks.pyc | Bin 1345 -> 1345 bytes 11 files changed, 175 insertions(+), 84 deletions(-) create mode 100644 dist/wagtail-modeltranslation-0.0.3.tar.gz diff --git a/README.rst b/README.rst index aeb093b..bdbda51 100644 --- a/README.rst +++ b/README.rst @@ -22,9 +22,14 @@ Simple app containing a mixin model that integrates modeltranslation 3. Visit django-modeltranslation for documentation - http://django-modeltranslation.readthedocs.org/en/latest/ - ## Release Notes: +### v0.0.3 + +- New methods; +- Now supports required fields; +- Fixed issue related to browser location; + ### v0.0.2 **Features**: diff --git a/dist/wagtail-modeltranslation-0.0.2.tar.gz b/dist/wagtail-modeltranslation-0.0.2.tar.gz index cb6f462b07efeb488482acd4ec7a30b2dd4c3cb0..47f358dfa12528add81d63f3ee445c3fc736d937 100644 GIT binary patch delta 4068 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 CwID_S delta 3424 zcmV-m4WIJqAL<$hABzYGmoZY22Q7c=bJ|D}_h#B!`?iu+>TM*4KPgk}MO@cHF zn;J1}>$IlSlt%SvAE`!Dx7`+hJK}Gx(Gq_}I;uC?jaI8!>omGYwR*Q*Yaf4s_R#^7 zgNcR!I6^B85yQf1bd+p9&ln^di1+s|lAgBn|7tKET?{8v#jrk)|D9GVo&Sx7;D58z zsA?M+6wkS+S-tOTE0l6iL;`U_uK;` zi@*iqG{Bw%{Xw%9cA_|VGRP9V7nOsvtBLg1Ucu9~wxDgk8~-}Kem|B54q4i$2W}k$ zTnWy&d8cqi%k_ZAuzKg01EFM zCAhjiA6`yx2jj`*U^==UgTeXWX3Bp`z)k*-iLqLn5NPW)nAsNXxn)=jpn;X~$*=$) zA|OkR0K=UFh(TiByvoW;Le{uftuE+HIQOjQRh@QnX+l&@nKhZ!YBFsfPt=qW4Asv-rO;ujXm2A0;BO{I=H+Xo~whKn+d>> z5H@tv_z3BU4czM`Yxh#DY#)>pBrGY4vN6Au*1J+=BmK$Af3Dx%0@l{aNrFO7_OqdY zcNl_cQ1cb%Cmp-b$9&6J(^rPIWhUmxUV*gXC_DoLy2flo65W4ER5mj;jKPI%U$JuK z8!9=KL@BwqagOG;P5B@iRL+(fx-g)rm*oVpSH0pcwLbVj`E-{YVp9RX8Q37H6E(LH z(CwMCf>dyL&M9CLKm{PBh=QP|lO?33uwtV{6S5eGqhaotF}A8FBERHKHAT+>Q4t`a6( z8HuvARUNKbyRqKhAe)NSYQ+j%(!M%$@vf7n`CO;)-!Ly~UD9M@47(}G65&!MQEXcrr^-evo|Jxmg|LXN_f&UJY z^1&f#FYte7|FB1j!5nF?utv%WW8&~7FKpQiS7b@rJ1mj*3PWB3KQduQ8r+Z$3@`Ya ziopme1RJC%Opx{j3%*kOpNfUER%Y|X7qtIrX59X-HyfQo{~scKfQyA{SabVMBHBW| zcMMafvd15Ere^w}#vkybr6TxfFvFi`N=HTd=KX(vLjKp!U()~AXm;zq{MV`AGyi|R zRmlHA{QqLFx3R>b0p~Zd?EnSv97*D+g4&B#*~WB>CQIePHi8G;K-8FlWmTOUCRA0q z0!o4HP?BY!VZe6X6%@EYyrhamWbz%Eq5vzGTwlw>(xr5q0<}X7XQFLb%ORhhO$)qJQv z!4~n-L1w??5^CJ_+AoFNv5_|_cgprlo1A~LF5%3#jp_9Gu&=b;(Gfz-r44?L@aqgW zN0>C9mm^#v+sP58-tJZiQ8J{tHnkZuIUwft6|&dJpc}9G42(H5Re**dHE$eh9p>$lp2FOR{T$NDEs%AGrxPxJcZxz64R7Y?>66{Le8E7rKthlmE(T?8|KrmfGfu&Mvx(@N;v1e z-!}5<2y!aSCGY7YsB>?9cA`2g9N4-V{d+XdS5SmH;<1ggeg6PwM0Nu!I-Gw44-b_w zH0Kp?qM-$*e@;F=v0tHJ2zIC`S&r9O0j!*?_|?QK2tqiFPzlYKYID<_MNEQuQWlVS zFVs1;&-pAz!&bZ^Rpmoe)p!eQjm(y6xE&FgDa*m2Q)&2Mf-zG=cBx^F5adozNzj#I zK_beg>+@^y15J^9qTRFMg`$5&v@q!QW;Gje7K86 z>yQYwy2X=S%_TjFLf~RFyga`djE9%|snM8=eg^B9{$hhyRnYH)QlNiqN@>TTsFq<4 z9XimIb1XGiwfGT03PTL*t(<4O2(Z zO0KK$taB>WUuB{TUeWY<&dsn;{ae_U()I29OXqiLJF!VD@7kft)&iVw+->bnqxZbM z*b-`N?{^EiPx9W@>u7&`IT{ZSx>iS)X;^UEI!#$K1~2GtUt-bh!1j~^FPyjQ>D%G$ zWM5Mj-zam9BnA|SzmEkIUkPtCk-D}b1R& z0 zE4cvSOF8i(l$**v>9YXtPT)4ssuA8~!&?v9hKp?mxSJ7D`q~XD4C(Ym3Pj4SUqkBB zZ&Lb-{lDz6EZ$rErxlO?G;7Vm|9j~8596tS_?!Md(=cT5pECs6Nl+gB;e0QGKi_@) zC+x7#(gJ^3=fB&{mK*=+b~>FpmH%$LUc~?Z#Q0Avyfd?@xJNICuuC7(ivl>I(8sl~ z2v`({0&fP${fj=Ve)nEc_yz^LMkHb~j9_|OPS)l^Am0iJkVuJNx(FXYV|Oni&(Kzr zL{LK%+l7uvmYB;uWZfXwm~gMch_1=fw=DmU27G_QU+(-zvsN$U|IqtCUQ$_|Im8!o z#E!P2I0WFVFCf78z5jbJmbU#dOAln-|7|wf{`t>Zo!$TFcDs#2{{Qsz9}Y20tSrgO z^fUtdV1Y(dmQ@KqsO+*u_SunCbm39*SmpKUGEU&mmY*F8f~i3A<%|roOwqWFZj~axVdgJ>C;@GkHT2-V4|F z!2IPZWE9j**}>&l_@FdX0Ze%-iof?!CG4LkKJ=;Lgg=kDBNj?tgfV z@BZP>3y&8ZSHQ8jv=g-B`ORIoY-rZY;WlLOW0*gMTL04eUxACoDZ4hB=OV!F=l?s6 zPNz8k|CivucL8elteS>JbvF4#cC`QLrXS^hv(YThe;+0l2)@w&pC$h}z7VDpHY(RHPz(o9X{Lq|lH6cmM$D CM%>N- diff --git a/dist/wagtail-modeltranslation-0.0.3.tar.gz b/dist/wagtail-modeltranslation-0.0.3.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..906a3cb3e8fb1178d3c7634200a19e38a35f89f5 GIT binary patch literal 4067 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