Changeset 1976


Ignore:
Timestamp:
09/10/07 11:02:00 (12 years ago)
Author:
jukka
Message:

Worked on #1509, implemented cleaned_BodyText, cleaned_* for WYSIWYMFields and ChapterFields?. Setting a field always updates that cleaned version, so it should be reliable. Working next on <br /> -problem, currently it either adds too few or too many of them.

Location:
trunk
Files:
3 deleted
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/FieldsWidgets.py

    r1974 r1976  
    6060        if emptyReturnsMarker and value == '': 
    6161            return empty_marker 
    62  
    63         #if form.get('replaceNewLines') != None and field.getName() == 'bodyText': 
    64         #    lt = getToolByName(instance, 'lemill_tool') 
    65         #    value = lt.addBreaksToText(value) 
    66  
    6762        return value, {} 
    6863 
     
    468463     
    469464    def getRaw(self, instance, **kwargs): 
    470         value = self.get_historical(instance,**kwargs) 
     465        """ Gets raw version for editing """ 
     466        version = instance.REQUEST.get('version',None) 
     467        if version: 
     468            value = instance.getFieldHistory(self.getName(), version) 
     469        else: 
     470            value = StringField.get(self, instance,**kwargs) 
    471471        return value 
    472472     
    473     def get_historical(self, instance, **kwargs): 
    474         """Special get method to handle history views as well.""" 
     473    def get(self, instance, **kwargs): 
     474        """ Gets cleaned version for display """ 
    475475        version = instance.REQUEST.get('version',None) 
     476        value = self.getRaw(instance, **kwargs) 
     477        cleaned_text = getattr(instance, 'cleaned_%s' % self.getName(), None) 
     478        if cleaned_text and not version: 
     479            return cleaned_text         
     480        ltool = getToolByName(instance, 'lemill_tool') 
     481        cleaned_text = ltool.parse_text(value) 
    476482        if not version: 
    477             return StringField.get(self,instance,**kwargs) 
    478         # Get old data from history 
    479         #fields = instance.getHistoricalFields(version) 
    480         value = instance.getFieldHistory(self.getName(), version) 
    481         #try: 
    482         #    value = fields[self.getName()] 
    483         #except KeyError: 
    484         #    value = '' 
    485         return value 
    486  
    487     def get(self, instance, **kwargs): 
     483            setattr(instance, 'cleaned_%s' % self.getName(), cleaned_text) 
     484        return cleaned_text 
     485 
     486    def set(self, instance, value, **kwargs): 
     487        """ update the cleaned_text and then call original set """ 
     488 
     489        # update cleaned text 
    488490        ltool = getToolByName(instance, 'lemill_tool') 
    489         value = self.get_historical(instance,**kwargs) 
    490         #return ltool.render(value) 
    491         return value 
     491        cleaned_text = ltool.parse_text(value) 
     492        setattr(instance, 'cleaned_%s' % self.getName(), cleaned_text) 
     493 
     494        # set value 
     495        StringField.set(self, instance, value, **kwargs) 
    492496         
     497 
    493498 
    494499    # render -method has moved to LeMillTools, because it is needed also outside the wysiwym field. 
     
    513518    security = ClassSecurityInfo() 
    514519 
     520 
     521    def getRaw(self, instance, **kwargs): 
     522        """ Gets raw version for editing, as list """ 
     523        version = instance.REQUEST.get('version',None) 
     524        if version: 
     525            value = instance.getFieldHistory(self.getName(), version) 
     526        else: 
     527            value = ObjectField.get(self, instance,**kwargs) 
     528        if type(value) != list: 
     529            value = [value,] 
     530        return value 
     531 
     532 
    515533    def get(self, instance, **kwargs): 
    516         """Special get method to handle history views as well.""" 
     534        """ Gets cleaned version for display, as list """ 
    517535        version = instance.REQUEST.get('version',None) 
     536        value = self.getRaw(instance, **kwargs) 
     537        cleaned_text = getattr(instance, 'cleaned_%s' % self.getName(), None) 
     538        if cleaned_text and not version and type(cleaned_text) == list: 
     539            return cleaned_text         
     540        ltool = getToolByName(instance, 'lemill_tool') 
     541        cleaned_text = [ltool.parse_text(v) for v in value] 
    518542        if not version: 
    519             return ObjectField.get(self,instance,**kwargs) 
    520         # Get old data from history 
    521         #fields = instance.getHistoricalFields(version) 
    522         value = instance.getFieldHistory(self.getName(), version) 
    523         #value = fields[self.getName()] 
    524         if type(value) != type([]): 
    525             return [value,] 
    526         else: 
    527             return value 
    528  
    529     def getCooked(self, instance, **kwargs): 
    530         """Get method that parses html as well.""" 
    531         version = instance.REQUEST.get('version',None) 
    532         lt=getToolByName(self,'lemill_tool') 
    533         if not version: 
    534             raw=ObjectField.get(self,instance,**kwargs) 
    535         else: 
    536             # Get old data from history 
    537             #fields = instance.getHistoricalFields(version) 
    538             raw = instance.getFieldHistory(self.getName(), version) 
    539             #value = fields[self.getName()] 
    540             if type(raw) != type([]): 
    541                 raw=[raw,] 
    542         return [lt.parse_text(s) for s in raw] 
    543  
     543            setattr(instance, 'cleaned_%s' % self.getName(), cleaned_text) 
     544        return cleaned_text 
    544545 
    545546    def set(self, instance, value, **kwargs): 
     
    629630            else: 
    630631                finalvalues=['']                
     632 
     633        # update cleaned text 
     634        cleaned_list=[lt.parse_text(chapter) for chapter in finalvalues]         
     635        setattr(instance, 'cleaned_%s' % self.getName(), cleaned_list) 
     636 
    631637        # finally get it done 
    632638        ObjectField.set(self, instance, finalvalues, **kwargs) 
     639 
     640 
    633641 
    634642 
     
    751759 
    752760    def getChapter(self, instance, chap_nr): 
    753         """ get a content of one chapter """ 
     761        """ get a *cleaned* content of one chapter """ 
    754762        value=ChapterField.get(self, instance) 
    755763        if len(value)<chap_nr: 
     
    757765        else: 
    758766            return value[chap_nr] 
     767 
     768    def getRawChapter(self, instance, chap_nr): 
     769        """ get a *raw* content of one chapter """ 
     770        value=ChapterField.getRaw(self, instance) 
     771        if len(value)<chap_nr: 
     772            return '' 
     773        else: 
     774            return value[chap_nr] 
     775 
     776 
    759777 
    760778    def getPieces(self, instance, chap_nr, as_objects=False): 
  • trunk/GroupBlog.py

    r1974 r1976  
    256256        """ Recent posts are lists of id's, because then picking the post objects when inside group is easy and quick """ 
    257257        # sometimes this method gets called before new blogposts get their proper id:s, so escape then: 
    258         print 'calling addRecent_post' 
    259258        if postid.startswith('blogpost.'): 
    260259            return None 
  • trunk/LargeSectionFolder.py

    r1974 r1976  
    880880        for group in glist: 
    881881            grecent= group.getRecent_posts() 
    882             print grecent 
    883882            for postid in grecent: 
    884883                try: 
    885884                    post=getattr(group, postid) 
    886                     print post.review_state() 
    887885                    if post.review_state()=='deleted': 
    888886                        group.removeRecent_post(postid)                         
  • trunk/LeMillTool.py

    r1974 r1976  
    4141    (?P<html_open><[a-z].*?>) # opening html tags, those that begin with '<x', where x is a letter  
    4242    |(?P<html_close></.*?>) # closing html tags, those that begin with '</' 
    43     |(?P<url>(?<!"|')http://\S*?) # http://something, where http is not preceded with " or ' 
     43    |(?P<url>(?<!"|')http://\S*) # http://something, where http is not preceded with " or ' 
    4444    |(?P<bracket>\[.*?\]) # everything that is put inside brackets 
    4545    |(?P<tex>\\\(.*?\\\)) # tex should be written inside \( ... \)  
    4646    |(?P<tex_equation>\\begin\{(?P<tex_tag>.*?)\}(?P<tex_string>.*?)\\end\{(?=P<tex_tag>)\}) # detect \begin{smthing}...\end{smthing} 
    47     |(?P<linebreak>[^>\ ]\ *\n) # detect linebreaks, unless they're after closed tag, f.ex !'<br/>  \n'    
     47    |(?P<linebreak>(?<!>)$) # detect linebreaks, unless they're after closed tag, f.ex !'<br/>  \n'    
    4848    |(?P<awordtoolong>[^ \t\n\r\f\v<>]{41}) # detect >40 char words, 
    4949    |(?P<endfile>\Z) # detect end of a string, so open tags can be closed  
    50     """, re.IGNORECASE | re.VERBOSE) 
     50    """, re.IGNORECASE | re.VERBOSE | re.MULTILINE) 
    5151 
    5252# whitelist is for html-tags only 
     
    189189                return full_tag 
    190190            else: 
    191                 return '<br/>' 
     191                return '<br/>\n' 
    192192 
    193193        def awordtoolong(match): 
     
    230230     
    231231        open_tags=[] 
     232        print text 
    232233        return pattern.sub(replacements, text) 
    233234     
  • trunk/Resources.py

    r1964 r1976  
    9292        else: 
    9393            return False 
    94  
    95     def getBodyText(self): 
    96         """ get body text, do nothing""" 
    97         field = self.getField('bodyText') 
    98         if not field: 
    99             return None 
    100         return field.get(self) 
    101  
    102     def getCookedBodyText(self): 
    103         """ get body text, run it through parsers""" 
    104         lt = getToolByName(self, 'lemill_tool') 
    105         bodytextfield = self.getField('bodyText') 
    106         if not bodytextfield: 
    107             return None 
    108  
    109         bodytext = bodytextfield.get(self) 
    110         if type(bodytext) in StringTypes: 
    111             return lt.shorten_link_names(lt.htmlify(bodytext)) 
    112         else: 
    113             if bodytext and reduce(lambda x, y: x and y, (type(s) in StringTypes for s in bodytext), True): 
    114                 return [lt.shorten_link_names(lt.htmlify(s)) for s in bodytext] 
    115             else: 
    116                 return bodytext 
    117  
    118     def getRawBodyText(self): 
    119         """ get body text, do nothing""" 
    120         field = self.getField('bodyText') 
    121         if not field: 
    122             return None 
    123         return field.get(self) 
    12494 
    12595    def pretty_title_or_id(self): 
  • trunk/skins/lemill/discussion.pt

    r1956 r1976  
    5151                <a name="#" tal:attributes="name string:${reply/getId}"></a> 
    5252                    <div class="commentBody" 
    53                             tal:content="structure python:context.cookText(reply.CookedBody())"> 
     53                            tal:content="structure python:context.lemill_tool.parse_text(reply.text)"> 
    5454                            PLACEHOLDER 
    5555                    </div> 
  • trunk/skins/lemill/groupblog_view.pt

    r1762 r1976  
    2525 
    2626        <div class="documentDescription" style="font-weight: normal">  
    27             <span tal:replace="structure python:here.cookText(here.Description())" />             
     27            <span tal:replace="structure python:here.lemill_tool.parse_text(here.Description())" />             
    2828        </div> 
    2929 
  • trunk/skins/lemill/rss_template.pt

    r1944 r1976  
    6363    <link tal:content="obj_item/Identifier | nothing">Identifier</link> 
    6464    <title tal:content="obj_item/pretty_title_or_id | nothing ">Title</title> 
    65     <description tal:define="text obj_item/getRSSDescription | obj_item/getBodyText | nothing" tal:content="python:context.cookText(text)">            Description        </description> 
     65    <description tal:define="text obj_item/getRSSDescription | nothing" tal:content="text">            Description        </description> 
    6666    <dc:creator tal:content="obj_item/getLastEditor | obj_item/Creator | nothing">Creator</dc:creator>         
    6767    <dc:rights tal:content="obj_item/Rights | nothing">Rights</dc:rights>                 
  • trunk/skins/lemill/viewThreadsAtBottom.pt

    r1924 r1976  
    2121                <a name="#" tal:attributes="name string:${reply/getId}"></a> 
    2222                    <div class="commentBody" 
    23                          tal:content="structure python:context.cookText(reply.CookedBody())"> 
     23                         tal:content="structure python:context.lemill_tool.parse_text(reply.text)"> 
    2424                         PLACEHOLDER 
    2525                    </div> 
  • trunk/skins/lemill/widget_chapter.pt

    r1955 r1976  
    1616            index repeat/chapter/index;"> 
    1717            <div tal:condition="not:UID" style="overflow: hidden; word-wrap: break-word;"  
    18             tal:content="structure python:context.cookText(chapter)"></div> 
     18            tal:content="structure chapter"></div> 
    1919                <div tal:condition="UID" tal:omit-tag=""> 
    2020                <tal:inner_defs define="piece python:field.getObjectByUID(context, UID); abs_url piece/absolute_url | nothing"> 
     
    125125            </legend> 
    126126             
    127            <div tal:condition="python: not UID and len(chapter)>0" tal:replace="structure python:context.cookText(chapter)"/> 
     127           <div tal:condition="python: not UID and len(chapter)>0" tal:replace="structure chapter"/> 
    128128 
    129129           <div tal:condition="UID" tal:omit-tag=""> 
     
    177177                  <div tal:define="transfield python:source.getField(fieldName); 
    178178                      transchapter python:transfield.getChapter(source, index);"  class="text_to_translate"> 
    179                           <span tal:replace="structure python:context.cookText(transchapter)"/>             
     179                          <span tal:replace="structure transchapter"/>             
    180180                  </div> 
    181181              </div> 
  • trunk/skins/lemill/widget_slides.pt

    r1815 r1976  
    1616                            "> 
    1717            <div tal:condition="not:UID"> 
    18             <tal:caption content="structure python:context.cookText(chapter)" /> 
     18            <tal:caption content="structure chapter" /> 
    1919            <div class="visualClear" style="height:30px">&nbsp;</div> 
    2020            </div> 
     
    154154                  <div tal:define="transfield python:source.getField(fieldName); 
    155155                      transchapter python:transfield.getChapter(context, index);"  class="text_to_translate"> 
    156                           <span tal:replace="structure python:context.cookText(transchapter)"/>             
     156                          <span tal:replace="structure transchapter"/>             
    157157                  </div> 
    158158              </div> 
  • trunk/skins/lemill/widget_textarea.pt

    r1628 r1976  
    1212 
    1313    <metal:view_macro define-macro="view"> 
    14     <tal:defs tal:replace="structure python:context.cookText(accessor())" /> 
     14    <tal:defs tal:replace="structure accessor" /> 
    1515    </metal:view_macro> 
    1616 
  • trunk/skins/lemill/widget_visual.pt

    r1628 r1976  
    1010 
    1111    <metal:view_macro define-macro="view" 
    12               tal:replace="structure python:context.cookText(accessor())" /> 
     12              tal:replace="structure accessor" /> 
    1313 
    1414    <metal:define define-macro="area_edit"> 
Note: See TracChangeset for help on using the changeset viewer.