def render(self, name, value, attrs=None): if value is None: value = u'' span_attrs = merge_html_attrs(self.attrs, attrs, contenteditable=u'true', class_=u'editable-span') input_attrs = dict(type=u'hidden', name=name, value=force_text(value)) return format_html(u'<span{0}>{1}</span><input{2} />', flatatt(span_attrs), force_text(value), flatatt(input_attrs))
def render(self, name, value, attrs=None): if value is None: value = u'' # Workaround for Safari 7: If ``data-padding`` attribute is set in javascript only, Safari # 7 ignores it until the span is clicked. So the span is invisible if it is empty. # Therefore we must set it here as well. span_attrs = merge_html_attrs(self.attrs, attrs, {'data-padding': '. '*47}, contenteditable=u'true', class_=u'pln-editable-span') input_attrs = dict(type=u'hidden', name=name, value=force_text(value)) return format_html(u'<span{0}>{1}</span><input{2} />', flatatt(span_attrs), force_text(value), flatatt(input_attrs))
def _input_attrs(self, name, value, skel=False): obligee = value if isinstance(value, Obligee) else None value = force_text(obligee.name if obligee else u'' if value is None else value) return merge_html_attrs(self.input_attrs, { u'class': u'pln-autocomplete form-control', u'type': u'text', u'name': name if not skel else u'', u'value': value, u'data-autocomplete-url': reverse_lazy(u'obligees:autocomplete'), u'data-name': name, })
def _input_attrs(self, name, value, skel=False): obligee = value if isinstance(value, Obligee) else None value = force_text( obligee.name if obligee else u'' if value is None else value) return merge_html_attrs( self.input_attrs, { u'class': u'pln-autocomplete form-control', u'type': u'text', u'name': name if not skel else u'', u'value': value, u'data-autocomplete-url': reverse_lazy(u'obligees:autocomplete'), u'data-name': name, })
def test_with_multiple_args(self): res = merge_html_attrs({ u'title': u'Title', u'alt': u'Alt' }, dict(name=u'Name', id=u'id47'), href=u'#') self.assertEqual( res, { u'title': u'Title', u'alt': u'Alt', u'name': u'Name', u'id': u'id47', u'href': u'#' })
def test_with_multiple_args(self): res = merge_html_attrs({u'title': u'Title', u'alt': u'Alt'}, dict(name=u'Name', id=u'id47'), href=u'#') self.assertEqual(res, {u'title': u'Title', u'alt': u'Alt', u'name': u'Name', u'id': u'id47', u'href': u'#'})
def test_with_no_args(self): res = merge_html_attrs() self.assertEqual(res, {})
def format_output(self, rendered_widgets): context = dict(self.context, inputs=rendered_widgets, finalize=False) content = mark_safe(render_to_string(self.template, context).strip()) attrs = merge_html_attrs(self.composite_attrs, class_=u'pln-composite-text') return format_html(u'<div{0}>{1}</div>', flatatt(attrs), content)
def test_duplicate_style_attrs_are_concatenated(self): res = merge_html_attrs({u'style': u'color: red;'}, style=u'border: 1px;') self.assertEqual(res[u'style'], u'color: red; border: 1px;')
def _widget_attrs(self, attrs=None): return merge_html_attrs(self.attrs, attrs, { u'class': u'chv-obligee-widget', })
def test_duplicate_class_attrs_are_merged(self): res = merge_html_attrs({u'class': u'first second'}, class_=u'second third') self.assertItemsEqual(res[u'class'].split(), u'first second third'.split())
def test_with_empty_args(self): res = merge_html_attrs({}, None, title=u'Some Title') self.assertEqual(res, {u'title': u'Some Title'})
def test_duplicate_attrs_raises_error(self): with self.assertRaisesMessage(ValueError, u'Duplicate attribute "alt".'): merge_html_attrs(dict(alt=u'first'), alt=u'duplicate')