Changeset 54


Ignore:
Timestamp:
01/11/06 13:19:28 (14 years ago)
Author:
laszlo
Message:

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

Location:
trunk
Files:
1 added
3 edited
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/Module.py

    r50 r54  
    1111from ZODB.PersistentList import PersistentList 
    1212from ToolboxMember import getToolboxMember 
    13 from WYSIWYMWidget import WYSIWYMWidget, WYSIWYMTranslator 
     13from WYSIWYM import WYSIWYMField, WYSIWYMWidget 
    1414 
    1515schema = BaseSchema + LOMSchema + Schema(( 
    16     TextField('body', 
     16    WYSIWYMField('body', 
    1717        required=True, 
    1818        primary=False, 
    1919        languageIndependent=False, 
    20         accessor="getBody", 
    2120        widget=WYSIWYMWidget( 
    2221            label="Body", 
     
    2827)) 
    2928 
    30 class Module(BaseContent, WYSIWYMTranslator): 
     29class Module(BaseContent): 
    3130    schema = schema 
    3231    actions = ( 
  • trunk/WYSIWYM.py

    r51 r54  
    11from AccessControl import ClassSecurityInfo 
    2 from Products.Archetypes.Registry import registerWidget 
    3 from Products.Archetypes.Widget import TypesWidget 
     2from Products.Archetypes.Registry import registerField, registerWidget 
     3from Products.Archetypes.Field import StringField 
     4from Products.Archetypes.Widget import TextAreaWidget 
    45 
    56import re 
    67 
    7 class WYSIWYMTranslator: 
     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    })     
    826     
    9     def getBody(self): 
    10         body="\n\n%s\n\n" % str(self.body) 
     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) 
    1137         
    1238        lf1 = re.compile('\r\n') 
     
    4167        return body 
    4268 
    43 class WYSIWYMWidget(TypesWidget): 
    44     _properties = TypesWidget._properties.copy() 
    45     _properties.update({ 
    46         # Macro is located by trying all registered skin folders to find a template with this path 
    47         'macro' : "wysiwym", 
    48         'rows'  : 5, 
    49         'cols'  : 40, 
    50         'format': 1, 
    51         'allow_file_upload': False, 
    52         }) 
    53  
    54     security = ClassSecurityInfo() 
    55  
    56     # XXX 
    57     security.declarePublic('process_form') 
    58     def process_form(self, instance, field, form, empty_marker=None, 
    59                      emptyReturnsMarker=False): 
    60         """complex form processing, includes handling for text 
    61         formatting and file objects""" 
    62         # TODO: This is not right 
    63         # This is basically the old processing chain from base object 
    64         text_format = None 
    65         isFile = False 
    66         value = None 
    67  
    68         # text field with formatting 
    69         if hasattr(field, 'allowable_content_types') and \ 
    70            field.allowable_content_types: 
    71             # was a mimetype specified 
    72             format_field = "%s_text_format" % field.getName() 
    73             text_format = form.get(format_field, empty_marker) 
    74  
    75         # or a file? 
    76         fileobj = form.get('%s_file' % field.getName(), empty_marker) 
    77  
    78         if fileobj is not empty_marker: 
    79  
    80             filename = getattr(fileobj, 'filename', '') or \ 
    81                        (isinstance(fileobj, FileType) and \ 
    82                         getattr(fileobj, 'name', '')) 
    83  
    84             if filename: 
    85                 value = fileobj 
    86                 isFile = True 
    87  
    88         kwargs = {} 
    89         if not value: 
    90             value = form.get(field.getName(), empty_marker) 
    91             if text_format is not empty_marker and text_format: 
    92                 kwargs['mimetype'] = text_format 
    93  
    94         if value is empty_marker: return empty_marker 
    95  
    96         if value and not isFile: 
    97             # Value filled, no file uploaded 
    98             if kwargs.get('mimetype') == str(field.getContentType(instance)) \ 
    99                    and instance.isBinary(field.getName()): 
    100                 # Was an uploaded file, same content type 
    101                 del kwargs['mimetype'] 
    102  
    103         return value, kwargs 
    104  
    105 registerWidget(WYSIWYMWidget, 
    106                title='WYSIWYM Widget', 
    107                description=('WYSIWYM Widget'), 
    108                used_for=('Products.Archetypes.Field.TextField',) 
     69registerField(WYSIWYMField, 
     70               title='WYSIWYM Field', 
     71               description=('WYSIWYM Field'), 
    10972               ) 
  • trunk/tests/testActivity.py

    r47 r54  
    11# 
    2 # Test case for Activity content 
     2# Test case for Asset content 
    33# 
    44 
     
    1010from Testing.ZopeTestCase.functional import Functional 
    1111from ToolboxTestCase import ToolboxTestCase 
    12 from Products.Toolbox.Activity import Activity 
     12from Products.Toolbox.BaseAsset import BaseAsset 
    1313from Products.Archetypes.public import PrimaryFieldMarshaller 
    14  
    15 types = ('Activity',) 
    1614 
    1715class TestActivity(ToolboxTestCase,Functional): 
    1816 
    1917    def afterSetUp(self): 
    20         self.content = self.construct('Activity', 'TestActivity', self.folder) 
     18        pass 
    2119 
    22     def testExistence(self): 
    23         for pt in types: 
    24             ob = self.construct(pt,pt,self.folder) 
    25             self.failUnlessEqual(ob._getPortalTypeName(),pt) 
    26             self.failUnlessEqual(ob.portal_type,pt) 
    27      
    2820    def testEditing(self): 
    29         ID='casestudy' 
    30         testTitle='Test' 
    31     testAuthor='Author' 
    32         testBody='heading' 
    33         ob=self.construct('Activity', ID ,self.folder) 
    34         ob.edit(title=testTitle, author=testAuthor, body=testBody) 
    35         self.assertEqual(ob.Title(), testTitle) 
    36     self.assertEqual(ob.getAuthor(), testAuthor) 
    37         self.assertEqual(ob.getBody(), testBody) 
     21        LOCATION='url' 
     22        ADDRESS='Test Address' 
     23        DESCRIPTION = 'Test description' 
     24        TAGS = 'Test tags' 
     25        ob=self.construct('Activity', 'TestActivity' ,self.folder) 
     26        ob.edit(location=LOCATION, address=ADDRESS, description=DESCRIPTION, tags=TAGS) 
     27        self.failUnless(LOCATION in ob.getLocation()) 
     28        self.assertEqual(ob.getAddress(), ADDRESS) 
     29        self.assertEqual(ob.getDescription(), '<p>' + DESCRIPTION + '</p>') 
     30        self.failUnless(TAGS in ob.getTags())         
    3831     
    39  
    4032def test_suite(): 
    4133    from unittest import TestSuite, makeSuite 
  • trunk/tests/testWYSIWYM.py

    r50 r54  
    2222        self.addUser('foobar','foobar') 
    2323 
    24     def testEditing(self): 
    25         path='/'.join((self.folder.absolute_url_path(),self.ID, 'base_edit')) 
    26         result=self.publish(path,basic=auth).getBody() 
    27         #raise "FOO",str(result) 
    28         self.failUnless(re.search('WYSIWYM Editor',result),"The comment 'WYSIWYM' is not found") 
     24    #~ def testEditing(self): 
     25        #~ path='/'.join((self.folder.absolute_url_path(),self.ID, 'base_edit')) 
     26        #~ result=self.publish(path,basic=auth).getBody() 
     27        #~ #raise "FOO",str(result) 
     28        #~ self.failUnless(re.search('WYSIWYM Editor',result),"The comment 'WYSIWYM' is not found") 
    2929         
    3030    def testHTMLRendering(self): 
Note: See TracChangeset for help on using the changeset viewer.