forked from MetalBlazer/nicedit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwidgets.py
More file actions
51 lines (39 loc) · 1.58 KB
/
widgets.py
File metadata and controls
51 lines (39 loc) · 1.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# -*- coding: utf-8 -*-
import json
from django import forms
from django.contrib.staticfiles.storage import staticfiles_storage
from django.core.urlresolvers import reverse
from django.utils.safestring import mark_safe
__all__ = ('NicEditWidget', 'NicEditAdminWidget')
class NicEditWidget(forms.Textarea):
def __init__(self, *args, **kwargs):
self.js_options = kwargs.pop('js_options', {})
super(NicEditWidget, self).__init__(*args, **kwargs)
class Media:
js = (
staticfiles_storage.url('js/nicedit.min.js'),
)
def render(self, name, value, attrs=None):
rendered = super(NicEditWidget, self).render(name, value, attrs=attrs)
return rendered + mark_safe(u'''
<script>
new nicEditor(%s).panelInstance('id_%s');
</script>''' % (self.js_options, name))
class NicEditAdminWidget(NicEditWidget):
def render(self, name, value, attrs=None):
if not isinstance(self.js_options, (unicode, str)):
self.js_options['uploadURI'] = reverse('nicedit_upload')
self.js_options = json.dumps(self.js_options)
rendered = super(NicEditWidget, self).render(name, value, attrs=attrs)
return rendered + mark_safe(u'''
<script>
var ta = document.getElementById('id_%s');
if(ta) {
var container = document.createElement('div');
container.style.display = 'inline-block';
container.style.float = 'left';
ta.parentNode.insertBefore(container, ta);
container.appendChild(ta);
new nicEditor(%s).panelInstance(ta);
}
</script>''' % (name, self.js_options))