source: trunk/WYSIWYM.py @ 54

Revision 54, 2.4 KB checked in by laszlo, 14 years ago (diff)

Created the Activity content type. We changed WYSIWYM also (closes #150 spent 2h).

  • Property svn:eol-style set to LF
Line 
1from AccessControl import ClassSecurityInfo
2from Products.Archetypes.Registry import registerField, registerWidget
3from Products.Archetypes.Field import StringField
4from Products.Archetypes.Widget import TextAreaWidget
5
6import re
7
8class WYSIWYMWidget(TextAreaWidget):
9    _properties = TextAreaWidget._properties.copy()
10    _properties.update({
11        'macro' : 'wysiwym',
12    })
13
14registerWidget(WYSIWYMWidget,
15    title='WYSIWYM Widget',
16    description='WYSIWYM Widget',
17    used_for=('Products.Toolbox.WYSIWYMField.WYSIWYMField',)
18)
19
20class WYSIWYMField(StringField):
21    """A field that stores WYSIWYM strings"""
22    _properties = StringField._properties.copy()
23    _properties.update({
24        'widget' : WYSIWYMWidget,
25    })   
26   
27    security = ClassSecurityInfo()
28   
29    def get(self, instance, **kwargs):
30        value = StringField.get(self, instance, **kwargs)
31        if getattr(self, 'raw', False):
32            return value
33        return self.render(value)
34
35    def render(self,body):
36        body="\n\n%s\n\n" % str(body)
37       
38        lf1 = re.compile('\r\n')
39        lf2 = re.compile('\r')
40        body = lf1.sub('\n',body)
41        body = lf2.sub('\n',body)
42
43        body = re.sub(r'\n\n\*\s', r'\n\n<ul><li>', body)
44        body = re.sub(r'\n\*\s(.*)\n\n', r'</li><li>\1</li></ul>\n\n', body)
45        body = re.sub(r'\n\*\s', r'</li><li>', body)
46
47        body = re.sub(r'\n\n\#\s', r'\n\n<ol><li>', body)
48        body = re.sub(r'\n\#\s(.*)\n\n', r'</li><li>\1</li></ol>\n\n', body)
49        body = re.sub(r'\n\#\s', r'</li><li>', body)
50
51        body = re.sub('\n\n<ul>',"</p><ul>",body)
52        body = re.sub('</ul>\n\n',"</ul><p>",body)
53        body = re.sub('\n\n<ol>',"</p><ol>",body)
54        body = re.sub('</ol>\n\n',"</ol><p>",body)
55        body = re.sub('\n\n',"</p><p>",body)
56        body = re.sub('\n',"<br/>",body)
57   
58        body = re.sub(r'\A</p>', '', body)
59        body = re.sub(r'<p>\Z', '', body)
60
61        body = re.sub(r'\[(\S+?)\s(.*?)\]', r'<a href="\1">\2</a>', body)
62       
63        #raise 'FOO', str(body)
64        body=re.sub(r'([\s>])\*(\S.*?\S)\*([\s<])', r'\1<b>\2</b>\3',body)
65        body=re.sub(r'([\s>])_(\S.*?\S)_([\s<])', r'\1<i>\2</i>\3',body)
66        body = re.sub(r'\A\s(.*)\s\Z',r'<p>\1</p>',body)
67        return body
68
69registerField(WYSIWYMField,
70               title='WYSIWYM Field',
71               description=('WYSIWYM Field'),
72               )
Note: See TracBrowser for help on using the repository browser.