Conjunto de mudanças 6508 no repositório publico
- Timestamp:
- 16/06/2012 19:39:04 (9 anos atrás)
- 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 ValueError2 3 1 import martian 4 2 from AccessControl import getSecurityManager … … 19 17 from interfaces import box_schemas 20 18 21 22 19 class PersistentDictionaryField(datamanager.DictionaryField): 23 20 adapts(PersistentDict, IField) … … 27 24 template_factory = Environment(loader=PackageLoader(__name__)) 28 25 29 class Box(object): 26 class 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 55 class Box(EditableBox): 30 56 31 57 ALL_BOXES_KEY = 'il.portalinterlegis.boxes' 32 58 33 BOX_TEMPLATE = '''34 <div id="%s"%s>35 %s36 </div>'''37 38 59 def __init__(self, schema, number, permission=ModifyPortalContent, form_label=None): 60 super(Box, self).__init__(permission) 39 61 self.schema = schema 40 62 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 44 64 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)) 50 72 51 73 def content(self, context): 52 74 annotations = IAnnotations(context) 53 75 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) 64 77 65 78 @property … … 67 80 """Last part of form urls. 68 81 """ 69 return 'box_%s' % self.key 82 return 'box_%s' % self.id 83 84 edit_href = form_name # To be overridden independently 85 70 86 71 87 def build_box_form(box): … … 99 115 return template.render(self) 100 116 101 globals()['BoxEditForm_%s' % box. key] = BoxEditForm117 globals()['BoxEditForm_%s' % box.id] = BoxEditForm 102 118 return BoxEditForm 103 119 -
PortalInterlegis/produtos/il.portalinterlegis/trunk/src/il/portalinterlegis/static/js/editable-box.js
r6489 r6508 15 15 /*global common_content_filter:false */ 16 16 jQuery(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: { 28 23 closeOnClick: true, 29 24 mask: { 30 color: '#000000',31 opacity: 0.825 color: '#000000', 26 opacity: 0.8 32 27 }, 33 28 onClose: function() { 34 location.reload();35 }36 37 29 location.reload(); 30 } 31 }, 32 }); 38 33 }); 39 34 -
PortalInterlegis/produtos/il.portalinterlegis/trunk/src/il/portalinterlegis/tests/testunitboxes.py
r6498 r6508 34 34 def test_box_render_basic(self): 35 35 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()): 38 37 39 38 box = Box(IStubBox, 1) 40 box.content = Mock( 41 return_value = {'var': 'XXXX'}) 39 box.content = Mock(return_value = {'var': 'XXXX'}) 42 40 context = object() 43 41 self.assertMultiLineEqual(''' 44 45 46 42 <div id="IStubBox_1"> 43 XXXX 44 </div>''', box(context)) 47 45 box.content.assert_called_with(context) 48 46 49 47 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()): 52 49 with patch('il.portalinterlegis.browser.boxes.manager.getSecurityManager') as security_mock: 53 50 security_mock.checkPermission.return_value = True 54 51 55 52 box = Box(IStubBox, 1) 56 box.content = Mock( 57 return_value = {'var': 'XXXX'}) 53 box.content = Mock(return_value = {'var': 'XXXX'}) 58 54 context = object() 59 55 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)) 63 62 box.content.assert_called_with(context) 64 63 … … 90 89 pass 91 90 92 class TemplateStub(object): 93 def render(self, context): 94 return " %(var)s" % context 91 from il.portalinterlegis.browser.boxes.manager import template_factory, EditableBox 92 from jinja2 import Template 95 93 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 94 class TemplateFactoryStub(object): 100 95 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.