Conjunto de mudanças 6508 no repositório publico


Ignorar:
Timestamp:
16/06/2012 19:39:04 (9 anos atrás)
Autor:
mazza
Mensagem:

boxes: refatoracao para isolar classe base (abstrata) para as caixas

Localização:
PortalInterlegis/produtos/il.portalinterlegis/trunk/src/il/portalinterlegis
Arquivos:
1 adicionado
3 editados

Legenda:

Não Modificado
Adicionado
Removido
  • PortalInterlegis/produtos/il.portalinterlegis/trunk/src/il/portalinterlegis/browser/boxes/manager.py

    r6506 r6508  
    1 from exceptions import ValueError
    2 
    31import martian
    42from AccessControl import getSecurityManager
     
    1917from interfaces import box_schemas
    2018
    21 
    2219class PersistentDictionaryField(datamanager.DictionaryField):
    2320    adapts(PersistentDict, IField)
     
    2724template_factory = Environment(loader=PackageLoader(__name__))
    2825
    29 class Box(object):
     26class EditableBox(object):
     27
     28    TEMPLATE_NAME = 'editablebox.html'
     29
     30    def __init__(self, permission=ModifyPortalContent):
     31        self.permission = permission
     32
     33    def __call__(self, context):
     34        editablebox_template = template_factory.get_template(self.TEMPLATE_NAME)
     35        return editablebox_template.render(
     36            box = self,
     37            is_editable = self.is_editable(context),
     38            inner = self.inner_render(context))
     39
     40    def is_editable(self, context):
     41        return getSecurityManager().checkPermission(self.permission, context)
     42
     43    @property
     44    def id(self):
     45        raise NotImplementedError
     46
     47    @property
     48    def edit_href(self):
     49        raise NotImplementedError
     50
     51    def inner_render(self, context):
     52        raise NotImplementedError
     53
     54
     55class Box(EditableBox):
    3056
    3157    ALL_BOXES_KEY = 'il.portalinterlegis.boxes'
    3258
    33     BOX_TEMPLATE = '''
    34       <div id="%s"%s>
    35 %s
    36       </div>'''
    37 
    3859    def __init__(self, schema, number, permission=ModifyPortalContent, form_label=None):
     60        super(Box, self).__init__(permission)
    3961        self.schema = schema
    4062        self.number = number
    41         self.permission = permission
    42         #TODO: improve this text
    43         self.form_label = form_label or u'Edite os valore desta caixa'
     63        self.form_label = form_label or u'Edite os valore desta caixa' #TODO: improve this text
    4464
    45     def __call__(self, context):
    46         is_editable = getSecurityManager().checkPermission(self.permission, context)
    47         return self.BOX_TEMPLATE % (self.key,
    48                                     ' class ="editable-box"' if is_editable else '',
    49                                     self.template.render(self.content(context)))
     65    @property
     66    def id(self):
     67        return '%s_%s' % (self.schema.__name__, self.number)
     68
     69    def inner_render(self, context):
     70        template = template_factory.get_template(self.schema.__name__.lower() + '.html')
     71        return template.render(self.content(context))
    5072
    5173    def content(self, context):
    5274        annotations = IAnnotations(context)
    5375        boxes = get_or_create_persistent_dict(annotations, self.ALL_BOXES_KEY)
    54         return get_or_create_persistent_dict(boxes, self.key)
    55 
    56     @property
    57     def template(self):
    58         return template_factory.get_template(
    59             self.schema.__name__.lower() + '.html')
    60 
    61     @property
    62     def key(self):
    63         return '%s_%s' % (self.schema.__name__, self.number)
     76        return get_or_create_persistent_dict(boxes, self.id)
    6477
    6578    @property
     
    6780        """Last part of form urls.
    6881        """
    69         return 'box_%s' % self.key
     82        return 'box_%s' % self.id
     83
     84    edit_href = form_name # To be overridden independently
     85
    7086
    7187def build_box_form(box):
     
    99115            return template.render(self)
    100116
    101     globals()['BoxEditForm_%s' % box.key] = BoxEditForm
     117    globals()['BoxEditForm_%s' % box.id] = BoxEditForm
    102118    return BoxEditForm
    103119
  • PortalInterlegis/produtos/il.portalinterlegis/trunk/src/il/portalinterlegis/static/js/editable-box.js

    r6489 r6508  
    1515/*global common_content_filter:false */
    1616jQuery(function($) {
    17   $('.editable-box').each(function() {
    18       var id = $(this).attr('id');
    19       var current = removeSuffix(String(window.location), '/carrossel');
    20       var edithref = current + '/box_' + id;
    21       $('<a class="editable-box-link" href="' + edithref + '"><img src="pencil_icon.png" width="16" height="16" alt="Edite esta caixa"/></a>')
    22         .appendTo($(this))
    23         .prepOverlay({
    24             subtype: 'iframe',
    25             filter: '#content',
    26             formselector: 'form',
    27             config: {
     17  $('.editable-box-link').each(function() {
     18      $(this).prepOverlay({
     19          subtype: 'iframe',
     20          filter: '#content',
     21          formselector: 'form',
     22          config: {
    2823              closeOnClick: true,
    2924              mask: {
    30                 color: '#000000',
    31                 opacity: 0.8
     25                  color: '#000000',
     26                  opacity: 0.8
    3227              },
    3328              onClose: function() {
    34                 location.reload();
    35             }
    36             },
    37         });
     29                  location.reload();
     30              }
     31          },
     32      });
    3833  });
    3934
  • PortalInterlegis/produtos/il.portalinterlegis/trunk/src/il/portalinterlegis/tests/testunitboxes.py

    r6498 r6508  
    3434    def test_box_render_basic(self):
    3535
    36         with patch('il.portalinterlegis.browser.boxes.manager.template_factory',
    37                    template_factory_stub('        XXXX')):
     36        with patch('il.portalinterlegis.browser.boxes.manager.template_factory', TemplateFactoryStub()):
    3837
    3938            box = Box(IStubBox, 1)
    40             box.content = Mock(
    41                 return_value = {'var': 'XXXX'})
     39            box.content = Mock(return_value = {'var': 'XXXX'})
    4240            context = object()
    4341            self.assertMultiLineEqual('''
    44       <div id="IStubBox_1">
    45         XXXX
    46       </div>''', box(context))
     42<div id="IStubBox_1">
     43  XXXX
     44</div>''', box(context))
    4745            box.content.assert_called_with(context)
    4846
    4947    def test_box_render_editable(self):
    50         with patch('il.portalinterlegis.browser.boxes.manager.template_factory',
    51                    template_factory_stub('        XXXX')):
     48        with patch('il.portalinterlegis.browser.boxes.manager.template_factory', TemplateFactoryStub()):
    5249            with patch('il.portalinterlegis.browser.boxes.manager.getSecurityManager') as security_mock:
    5350                security_mock.checkPermission.return_value = True
    5451
    5552                box = Box(IStubBox, 1)
    56                 box.content = Mock(
    57                     return_value = {'var': 'XXXX'})
     53                box.content = Mock(return_value = {'var': 'XXXX'})
    5854                context = object()
    5955                self.assertMultiLineEqual('''
    60       <div id="IStubBox_1" class ="editable-box">
    61         XXXX
    62       </div>''', box(context))
     56<div id="IStubBox_1" class ="editable-box" >
     57  XXXX
     58  <a class="editable-box-link" href="box_IStubBox_1">
     59    <img src="pencil_icon.png" width="16" height="16" alt="Edite esta caixa"/>
     60  </a>
     61</div>''', box(context))
    6362                box.content.assert_called_with(context)
    6463
     
    9089    pass
    9190
    92 class TemplateStub(object):
    93     def render(self, context):
    94         return "        %(var)s" % context
     91from il.portalinterlegis.browser.boxes.manager import template_factory, EditableBox
     92from jinja2 import Template
    9593
    96 def template_factory_stub(value):
    97     template_factory_stub = Mock()
    98     template_factory_stub.get_template.return_value = TemplateStub()
    99     return template_factory_stub
     94class TemplateFactoryStub(object):
    10095
     96    def get_template(self, name):
     97        if name == "istubbox.html":
     98            return Template("{{var}}")
     99        elif name == EditableBox.TEMPLATE_NAME:
     100            return template_factory.get_template(EditableBox.TEMPLATE_NAME)
     101        else:
     102            raise AssertionError
     103
Note: Veja TracChangeset para ajuda no uso do visualizador de conjunto de mudanças.
 

The contents and data of this website are published under license:
Creative Commons 4.0 Brasil - Atribuir Fonte - Compartilhar Igual.