8440e4b3513a6b9a7d7749997177970c711821af
[chloro.git] / chloro / phyll / fields.py
1 # chloro - personal space
2 # Copyright (C) 2019  Frederic Peters
3 #
4 # This program is free software: you can redistribute it and/or modify it
5 # under the terms of the GNU Affero General Public License as published
6 # by the Free Software Foundation, either version 3 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU Affero General Public License for more details.
13 #
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
17
18 import ckeditor.fields
19
20
21 class RichTextField(ckeditor.fields.RichTextField):
22     def formfield(self, **kwargs):
23         defaults = {
24             'form_class': RichTextFormField,
25             'config_name': self.config_name,
26             'extra_plugins': self.extra_plugins,
27             'external_plugin_resources': self.external_plugin_resources,
28         }
29         defaults.update(kwargs)
30         return super(RichTextField, self).formfield(**defaults)
31
32
33 class RichTextFormField(ckeditor.fields.RichTextFormField):
34     def clean(self, value):
35         value = super(RichTextFormField, self).clean(value)
36         if settings.LANGUAGE_CODE.startswith('fr-'):
37             # apply some basic typographic rules
38             value = value.replace('&laquo; ', '«\u202f')
39             value = value.replace('« ', '«\u202f')
40             value = value.replace(' &raquo;', '\u202f»')
41             value = value.replace(' »', '\u202f»')
42             value = value.replace(' :', '\u00a0:')
43             value = value.replace(' ;', '\u202f;')
44             value = value.replace(' !', '\u202f!')
45             value = value.replace(' ?', '\u202f?')
46         return value