tags.py
author Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
Wed, 20 Jan 2010 13:03:08 +0100
changeset 4291 62a315e61adb
parent 4252 6c4f109c2b03
child 5421 8167de96c523
permissions -rw-r--r--
clear vreg's parent_classes cache to fix etype cache / auto-reloading bug EtypeRegistry.parent_classes()'s is cached. When the registry is reloaded, if the cache is not cleared, we might get the old list of parent classes and that leads to strange bugs. Typical scenario : 1/ start application in debug mode 2/ go to add/Bookmark -> everything's fine 3/ change the source 4/ reload add/Bookmark -> 'creation' not selectable because : a/ cw detects a change in the source and reloads vreg b/ cw tries to select 'creation' view for 'Bookmark' - 'creation' view uses specified_etype_implements('Any') - cw compares Bookmark.__bases__[0] (i.e. new version of AnyEntity) with the old version of AnyEntity cached in the vreg. They don't match => view is not applicable.

"""helper classes to generate simple (X)HTML tags

:organization: Logilab
:copyright: 2010 LOGILAB S.A. (Paris, FRANCE), license is LGPL v2.
:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
:license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses
"""
__docformat__ = "restructuredtext en"

from cubicweb.uilib import simple_sgml_tag, sgml_attributes

class tag(object):
    def __init__(self, name, escapecontent=True):
        self.name = name
        self.escapecontent = escapecontent

    def __call__(self, __content=None, **attrs):
        attrs.setdefault('escapecontent', self.escapecontent)
        return simple_sgml_tag(self.name, __content, **attrs)

button = tag('button')
input = tag('input')
textarea = tag('textarea')
a = tag('a')
span = tag('span')
div = tag('div', False)
img = tag('img')
label = tag('label')
option = tag('option')
h1 = tag('h1')
h2 = tag('h2')
h3 = tag('h3')
h4 = tag('h4')
h5 = tag('h5')
tr = tag('tr')
th = tag('th')
td = tag('td')

def select(name, id=None, multiple=False, options=[], **attrs):
    if multiple:
        attrs['multiple'] = 'multiple'
    if id:
        attrs['id'] = id
    attrs['name'] = name
    html = [u'<select %s>' % sgml_attributes(attrs)]
    html += options
    html.append(u'</select>')
    return u'\n'.join(html)