src/ztfy/utils/browser/textlinelist.py
branchZTK-1.1
changeset 202 00845ce1f3b4
parent 201 783dcf82b3dc
child 203 7cb9e4f51936
equal deleted inserted replaced
201:783dcf82b3dc 202:00845ce1f3b4
     1 ### -*- coding: utf-8 -*- ####################################################
       
     2 ##############################################################################
       
     3 #
       
     4 # Copyright (c) 2012 Thierry Florac <tflorac AT ulthar.net>
       
     5 # All Rights Reserved.
       
     6 #
       
     7 # This software is subject to the provisions of the Zope Public License,
       
     8 # Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
       
     9 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
       
    10 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
       
    11 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
       
    12 # FOR A PARTICULAR PURPOSE.
       
    13 #
       
    14 ##############################################################################
       
    15 
       
    16 
       
    17 # import standard packages
       
    18 
       
    19 # import Zope3 interfaces
       
    20 from z3c.form.interfaces import IWidget, IFieldWidget, ITextWidget, IFormLayer
       
    21 
       
    22 # import local interfaces
       
    23 from ztfy.utils.schema import ITextLineListField
       
    24 
       
    25 # import Zope3 packages
       
    26 from z3c.form.browser.text import TextWidget
       
    27 from z3c.form.converter import SequenceDataConverter
       
    28 from z3c.form.widget import FieldWidget
       
    29 from zope.component import adapter, adapts
       
    30 from zope.interface import implementer, implementsOnly
       
    31 
       
    32 # import local packages
       
    33 from ztfy.jqueryui import jquery_multiselect
       
    34 
       
    35 
       
    36 class ITextLineListWidget(ITextWidget):
       
    37     """TextLineList widget interface"""
       
    38 
       
    39 
       
    40 class TextLineListDataConverter(SequenceDataConverter):
       
    41     """TextLineList field data converter"""
       
    42 
       
    43     adapts(ITextLineListField, IWidget)
       
    44 
       
    45     def toWidgetValue(self, value):
       
    46         if value is self.field.missing_value:
       
    47             return []
       
    48         return '|'.join(value)
       
    49 
       
    50     def toFieldValue(self, value):
       
    51         if not value:
       
    52             return self.field.missing_value
       
    53         return value.split('|')
       
    54 
       
    55 
       
    56 class TextLineListWidget(TextWidget):
       
    57     """TextLineList field widget"""
       
    58 
       
    59     implementsOnly(ITextLineListWidget)
       
    60 
       
    61     def render(self):
       
    62         jquery_multiselect.need()
       
    63         return super(TextLineListWidget, self).render()
       
    64 
       
    65 
       
    66 @adapter(ITextLineListField, IFormLayer)
       
    67 @implementer(IFieldWidget)
       
    68 def TextLineListFieldWidgetFactory(field, request):
       
    69     return FieldWidget(field, TextLineListWidget(request))