Changeset 3130 for trunk


Ignore:
Timestamp:
01/05/11 17:36:38 (9 years ago)
Author:
jukka
Message:

Working on simpler, more robust translations. Prepared things for upgrade.

Location:
trunk
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/FieldsWidgets.py

    r3125 r3130  
    259259        return value, {} 
    260260 
     261class TranslationWidget(SelectionWidget): 
     262    _properties = SelectionWidget._properties.copy() 
     263    _properties.update({ 
     264        'macro' : 'widget_translation', 
     265    }) 
     266    def getTranslationsData(self, instance): 
     267        """ Get {uid, url, title, language, pretty_language} for  translations of this instance """ 
     268        pc=getToolByName(instance, 'portal_catalog') 
     269        ltool=getToolByName(instance, 'lemill_tool') 
     270        my_uid=instance.UID() 
     271        md_results=pc(getOther_languages=my_uid, getState=['public','draft']) 
     272        results=[] 
     273        for md in self.fastMetadata(md_results, ['getUID','rid','getNicename','Language']): 
     274            # try 
     275            data={'uid':md[0], 'url':pc.getpath(md[1]), 'title':md[2], 'lang':md[3], 'pretty_lang':ltool.getPrettyLanguage(md[3])} 
     276            results.append(data) 
     277            # except: 
     278            # pass 
     279        results.sort(key=lambda x: x['lang']) 
     280        return results 
     281 
     282    def process_form(self, instance, field, form, empty_marker=[], 
     283                     emptyReturnsMarker=False, validating=True): 
     284        """Basic impl for form processing in a widget""" 
     285        value=True 
     286        uids=[] 
     287        index=0 
     288        while value: 
     289            value=form.get('%s_%s' % (field.getName(), index), '') 
     290            if value: 
     291                uids.append(value) 
     292            index+=1 
     293        return value, {} 
    261294 
    262295class ChapterWidget(SelectionWidget): 
     
    633666 
    634667 
     668class TranslationField(LinesField): 
     669    """ A field that stores tags """ 
     670    __implements__ = LinesField.__implements__ 
     671    _properties = LinesField._properties.copy() 
     672    _properties.update({ 
     673        'widget' : TranslationWidget, 
     674    }) 
     675 
     676    security = ClassSecurityInfo() 
     677 
     678    def setDisabled(self, instance, value, **kwargs): 
     679        value=list(value) 
     680        old_value=list(self.get(instance)) 
     681        if value and value==old_value: 
     682            return 
     683        LinesField.set(self, instance, value, **kwargs) 
     684        if kwargs.get('asymmetric', False) or True: # Let's disable this for a moment 
     685            return 
     686        # Make sure that changes here are reflected to other translations too 
     687        uc=getToolByName(instance, 'uid_catalog') 
     688        my_uid=instance.UID() 
     689        # what has been removed? 
     690        removed=set(old_value)-set(value) 
     691        for md in uc(UID=list(removed)): 
     692            obj=md.getObject() 
     693            field=obj.getField(self.getName()) 
     694            field.remove(my_uid) 
     695        # what has been added? 
     696        added=set(value)-set(old_value) 
     697        for md in uc(UID=list(added)): 
     698            obj=md.getObject() 
     699            field=obj.getField(self.getName()) 
     700            field.add(my_uid) 
     701 
     702    def add(self, instance, items):          
     703        """ local helper method, doesn't traverse to linked objects """ 
     704        items=list(items) 
     705        old_value=list(self.get(instance)) 
     706        value=list(old_value)       
     707        for item in items: 
     708            if item not in value: 
     709                value.append(item) 
     710        if value!=old_value: 
     711            LinesField.set(self, instance, value) 
     712         
     713    def remove(self, instance, items):          
     714        """ local helper method, doesn't traverse to linked objects """ 
     715        items=list(items) 
     716        old_value=list(self.get(instance)) 
     717        value=list(old_value)       
     718        for item in items: 
     719            if item in value: 
     720                value.remove(item) 
     721        if value!=old_value: 
     722            LinesField.set(self, instance, value) 
     723 
     724                         
     725registerField(TranslationField, 
     726               title='Translation Field', 
     727               description=('Translation Field'), 
     728               ) 
     729 
     730 
     731 
    635732class TagsField(LinesField): 
    636733    """ A field that stores tags """ 
     
    787884                value = self.updateChapterList(value) 
    788885                break 
    789             elif isinstance(chapter, dict) and chapter['type']=='choice' and isinstance(chapter['text'], list): 
     886            elif isinstance(chapter, dict) and chapter.get('type','')=='choice' and isinstance(chapter.get('text',[]), list): 
    790887                value=self.fixBrokenChoice(value) 
    791888                break 
  • trunk/Schemata.py

    r3126 r3130  
    4141 
    4242editing_settings = Schema(( 
    43     StringField('editingMode', # Disabled for 3.1, (made invisible) 
     43    StringField('editingMode', # Disabled for 3.1, (made invisible), to be removed in 3.2. 
    4444              vocabulary = DisplayList(( 
    4545                  ("anybody_can_edit", "Anybody can edit this learning resource"), 
     
    256256 
    257257translation_schema = Schema(( 
    258     ReferenceField('translation_of', 
     258    ReferenceField('translation_of', # to be removed in 3.2 
    259259        relationship = 'translates', 
    260260        widget = ReferenceWidget( 
     
    265265        ), 
    266266    ), 
    267     ReferenceField('translations', 
     267    ReferenceField('translations', # to be removed in 3.2 
    268268        relationship = 'has translations', 
    269269        multiValued = True, 
     
    275275        ), 
    276276    ), 
    277 )) 
    278  
    279 branching_schema = Schema(( 
     277    TranslationField('other_languages', 
     278        index = "KeywordIndex:schema", 
     279        multivalued=True, 
     280        schemata="metadata", 
     281        widget=TranslationWidget( 
     282            format="checkbox", 
     283            label="Versions in other languages", 
     284            label_msgid="label_versions_in_other_languages", 
     285            visible = { 'view': 'invisible', 'edit': 'visible' }, 
     286            i18n_domain="lemill", 
     287        ), 
     288    ),     
     289)) 
     290 
     291# to be removed in 3.2 
     292branching_schema = Schema((  
    280293    ReferenceField('branch_of', 
    281294        relationship = 'branches', 
  • trunk/skins/lemill/lemill_grid.css

    r3129 r3130  
    632632 
    633633 
    634 label.exercise_choice { 
     634label.exercise_choice, .normal_labels label { 
    635635    font-weight:normal; 
    636636    } 
  • trunk/skins/lemill/widget_group.pt

    r3125 r3130  
    2323        <metal:use use-macro="field_macro | here/widgets/field/macros/edit"> 
    2424            <metal:fill fill-slot="widget_body"> 
     25                <div class="normal_labels"> 
    2526                    <tal:radios repeat="item python:widget.getGroupVocabulary(here)"> 
    2627                        <input class="noborder" type="checkbox"                                
     
    4344                            <input tal:condition="repeat/item/end" type="text" name="new_group_name" value="" tal:attributes="value request/new_group_name | nothing" /><br /> 
    4445                    </tal:radios> 
     46                </div> 
    4547            </metal:fill> 
    4648        </metal:use> 
  • trunk/skins/lemill/widget_twocolumn.pt

    r3065 r3130  
    4646         tal:condition="not:field/required|nothing" 
    4747         tal:attributes="name string:$fieldName:default:list;" /> 
    48          <table tal:condition="python:format=='checkbox'"> 
     48         <table tal:condition="python:format=='checkbox'" class="normal_labels"> 
    4949             <tr> 
    5050                 <td tal:define="add python:0"> 
  • trunk/version.txt

    r3118 r3130  
    1 3.0.8 
     13.0.10 
    22 
Note: See TracChangeset for help on using the changeset viewer.