Commit f9f707e8dc23d4d9c5f389c680c193ccf4953bf9
1 parent
4e06051e
Exists in
master
and in
5 other branches
Adding WYSIWYG editor Summernote [Issue #232]
Showing
4 changed files
with
74 additions
and
9 deletions
Show diff stats
amadeus/settings.py
| ... | ... | @@ -46,6 +46,7 @@ INSTALLED_APPS = [ |
| 46 | 46 | 'rest_framework', |
| 47 | 47 | 'django_bootstrap_breadcrumbs', |
| 48 | 48 | 's3direct', |
| 49 | + 'django_summernote', | |
| 49 | 50 | |
| 50 | 51 | 'users', |
| 51 | 52 | 'core', |
| ... | ... | @@ -225,7 +226,59 @@ S3DIRECT_DESTINATIONS = { |
| 225 | 226 | # FILE UPLOAD |
| 226 | 227 | MAX_UPLOAD_SIZE = 10485760 |
| 227 | 228 | |
| 229 | +SUMMERNOTE_CONFIG = { | |
| 230 | + # Using SummernoteWidget - iframe mode | |
| 231 | + 'iframe': True, # or set False to use SummernoteInplaceWidget - no iframe mode | |
| 232 | + | |
| 233 | + # Using Summernote Air-mode | |
| 234 | + 'airMode': False, | |
| 235 | + | |
| 236 | + # Use native HTML tags (`<b>`, `<i>`, ...) instead of style attributes | |
| 237 | + # (Firefox, Chrome only) | |
| 238 | + 'styleWithTags': True, | |
| 239 | + | |
| 240 | + # Set text direction : 'left to right' is default. | |
| 241 | + 'direction': 'ltr', | |
| 242 | + | |
| 243 | + # Change editor size | |
| 244 | + 'width': '100%', | |
| 245 | + 'height': '480', | |
| 246 | + | |
| 247 | + # Use proper language setting automatically (default) | |
| 248 | + 'lang': None, | |
| 249 | + | |
| 250 | + # Or, set editor language/locale forcely | |
| 251 | + 'lang_matches': { | |
| 252 | + 'pt': 'pt-BR', | |
| 253 | + }, | |
| 254 | + | |
| 255 | + # Customize toolbar buttons | |
| 256 | + 'toolbar': [ | |
| 257 | + ['style', ['style']], | |
| 258 | + ['font', ['bold', 'italic', 'underline', 'superscript', 'subscript', | |
| 259 | + 'strikethrough', 'clear']], | |
| 260 | + ['fontname', ['fontname']], | |
| 261 | + ['fontsize', ['fontsize']], | |
| 262 | + ['color', ['color']], | |
| 263 | + ['para', ['ul', 'ol', 'paragraph']], | |
| 264 | + ['height', ['height']], | |
| 265 | + ['table', ['table']], | |
| 266 | + ['insert', ['link', 'picture', 'video', 'hr']], | |
| 267 | + ['view', ['fullscreen', 'codeview']], | |
| 268 | + ['help', ['help']], | |
| 269 | + ], | |
| 270 | + | |
| 271 | + # Need authentication while uploading attachments. | |
| 272 | + 'attachment_require_authentication': True, | |
| 273 | + | |
| 274 | + # Set `upload_to` function for attachments. | |
| 275 | + #'attachment_upload_to': my_custom_upload_to_func(), | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | +} | |
| 280 | + | |
| 228 | 281 | try: |
| 229 | 282 | from .local_settings import * |
| 230 | 283 | except ImportError: |
| 231 | 284 | - pass |
| 285 | + pass | |
| 232 | 286 | \ No newline at end of file | ... | ... |
amadeus/urls.py
courses/forms.py
| ... | ... | @@ -2,7 +2,7 @@ from django import forms |
| 2 | 2 | from django.utils.translation import ugettext_lazy as _ |
| 3 | 3 | from .models import CourseCategory, Course, Subject, Topic, ActivityFile, Activity, FileMaterial, LinkMaterial |
| 4 | 4 | from s3direct.widgets import S3DirectWidget |
| 5 | - | |
| 5 | +from django_summernote.widgets import SummernoteWidget | |
| 6 | 6 | |
| 7 | 7 | class CategoryCourseForm(forms.ModelForm): |
| 8 | 8 | |
| ... | ... | @@ -79,8 +79,8 @@ class CourseForm(forms.ModelForm): |
| 79 | 79 | |
| 80 | 80 | widgets = { |
| 81 | 81 | 'categoy': forms.Select(), |
| 82 | - 'objectivies': forms.Textarea(attrs={'cols': 80, 'rows': 5}), | |
| 83 | - 'content': forms.Textarea(attrs={'cols': 80, 'rows': 5}), | |
| 82 | + 'objectivies': SummernoteWidget(attrs={'cols': 80, 'rows': 5}), | |
| 83 | + 'content': SummernoteWidget(attrs={'cols': 80, 'rows': 5}), | |
| 84 | 84 | } |
| 85 | 85 | |
| 86 | 86 | class UpdateCourseForm(CourseForm): |
| ... | ... | @@ -120,8 +120,8 @@ class UpdateCourseForm(CourseForm): |
| 120 | 120 | } |
| 121 | 121 | widgets = { |
| 122 | 122 | 'categoy': forms.Select(), |
| 123 | - 'objectivies': forms.Textarea(attrs={'cols': 80, 'rows': 5}), | |
| 124 | - 'content': forms.Textarea(attrs={'cols': 80, 'rows': 5}), | |
| 123 | + 'objectivies': SummernoteWidget(attrs={'cols': 80, 'rows': 5}), | |
| 124 | + 'content': SummernoteWidget(attrs={'cols': 80, 'rows': 5}), | |
| 125 | 125 | } |
| 126 | 126 | |
| 127 | 127 | class SubjectForm(forms.ModelForm): |
| ... | ... | @@ -143,6 +143,9 @@ class SubjectForm(forms.ModelForm): |
| 143 | 143 | 'end_date': _('End date of the subject'), |
| 144 | 144 | 'visible': _('Is the subject visible?'), |
| 145 | 145 | } |
| 146 | + widgets = { | |
| 147 | + 'description':SummernoteWidget(), | |
| 148 | + } | |
| 146 | 149 | |
| 147 | 150 | class TopicForm(forms.ModelForm): |
| 148 | 151 | |
| ... | ... | @@ -157,6 +160,9 @@ class TopicForm(forms.ModelForm): |
| 157 | 160 | 'name': _("Topic's name"), |
| 158 | 161 | 'description': _("Topic's description"), |
| 159 | 162 | } |
| 163 | + widgets = { | |
| 164 | + 'description':SummernoteWidget(), | |
| 165 | + } | |
| 160 | 166 | |
| 161 | 167 | class ActivityFileForm(forms.ModelForm): |
| 162 | 168 | name = forms.CharField( | ... | ... |
requirements.txt
| 1 | +beautifulsoup4==4.5.1 | |
| 1 | 2 | click==6.6 |
| 2 | 3 | decorator==4.0.10 |
| 3 | 4 | deps==0.1.0 |
| ... | ... | @@ -10,18 +11,22 @@ django-floppyforms==1.7.0 |
| 10 | 11 | django-modalview==0.1.5 |
| 11 | 12 | django-role-permissions==1.2.1 |
| 12 | 13 | django-s3direct==0.4.2 |
| 14 | +django-summernote==0.8.6 | |
| 13 | 15 | django-widget-tweaks==1.4.1 |
| 16 | +django-wysiwyg==0.8.0 | |
| 14 | 17 | djangorestframework==3.4.6 |
| 15 | 18 | gunicorn==19.6.0 |
| 19 | +itsdangerous==0.24 | |
| 16 | 20 | Jinja2==2.8 |
| 21 | +lxml==3.6.4 | |
| 17 | 22 | MarkupSafe==0.23 |
| 18 | 23 | Pillow==3.3.1 |
| 19 | 24 | psycopg2==2.6.2 |
| 20 | 25 | pycpfcnpj==1.0.2 |
| 26 | +requests==2.11.1 | |
| 21 | 27 | six==1.10.0 |
| 28 | +slugify==0.0.1 | |
| 22 | 29 | validators==0.11.0 |
| 30 | +virtualenv==15.0.3 | |
| 23 | 31 | Werkzeug==0.11.11 |
| 24 | 32 | whitenoise==3.2.2 |
| 25 | -beautifulsoup4==4.5.1 | |
| 26 | -lxml==3.6.4 | |
| 27 | -requests==2.11.1 | ... | ... |