""" open/DurusWorks/qp/fill/html.qpy """ from qpy import xml, stringify, xml_quote import sys if sys.version < "3": from urllib import quote as url_quote, unquote as url_unquote else: from urllib.parse import quote as url_quote, unquote as url_unquote url_unquote # Quiet code checker. def htmltag:xml(tag, xml_end=False, css_class=None, classes=None, **attrs): "<" tag if classes is None: classes = [] else: assert type(classes) is list if css_class is not None: classes = list(classes) + [css_class] if classes: attrs['class'] = ' '.join(classes) for (attr, val) in sorted(attrs.items()): if val is not None: ' %s="%s"' % (attr, val) if xml_end: " />" else: ">" def href:xml(url, text, title=None, **attrs): htmltag("a", href=url, title=title, **attrs) text "" def img:xml(src=None, **kwargs): if 'href' in kwargs: kwargs['onclick'] = "window.location='%s';" % kwargs.get('href') if src: htmltag("img", src=src, xml_end=True, **kwargs) else: htmltag("img", xml_end=True, **kwargs) def clear_both:xml(): '\n
\n' def clear_left:xml(): '\n
\n' def clear_right:xml(): '\n
\n' def nl2br:xml(v): return xml(xml.quote(v).replace("\n", "
")) def nlnl2brbr:xml(v): return xml(xml.quote(v).replace("\n\n", "

")) def element:xml(element_name, args, href=None, pop_id=None, **kwargs): assert type(args) is tuple if href is not None: kwargs['onclick'] = "window.location='%s';" % href if 'classes' not in kwargs: kwargs['classes'] = ['href'] else: kwargs['classes'] = list(kwargs.get('classes')) + ['href'] if 'onmouseover' not in kwargs and 'onmouseout' not in kwargs: kwargs['onmouseover'] = "if (typeof genlib != 'undefined') genlib.node_add_class(this, 'hovering');" kwargs['onmouseout'] = "if (typeof genlib != 'undefined') genlib.node_remove_class(this, 'hovering');" if pop_id is not None: if 'onmouseover' not in kwargs and 'onmouseout' not in kwargs: if href is None: kwargs['onmouseover'] = "if (typeof genlib != 'undefined') genlib.display_block('%s');" % pop_id kwargs['onmouseout'] = "if (typeof genlib != 'undefined') genlib.display_none('%s');" % pop_id else: kwargs['onmouseover'] = "if (typeof genlib != 'undefined') {genlib.node_add_class(this, 'hovering'); genlib.display_block('%s')};" % pop_id kwargs['onmouseout'] = "if (typeof genlib != 'undefined') {genlib.node_remove_class(this, 'hovering'); genlib.display_none('%s')};" % pop_id htmltag(element_name, **kwargs) for arg in args: arg '' % element_name def div(*args, **kwargs): return element('div', args, **kwargs) def h1(*args, **kwargs): return element('h1', args, **kwargs) def h2(*args, **kwargs): return element('h2', args, **kwargs) def h3(*args, **kwargs): return element('h3', args, **kwargs) def h4(*args, **kwargs): return element('h4', args, **kwargs) def h5(*args, **kwargs): return element('h5', args, **kwargs) def h6(*args, **kwargs): return element('h6', args, **kwargs) def ol(*args, **kwargs): if len(args) == 1 and type(args[0]) is list: args = tuple(map(li, args[0])) return element('ol', args, **kwargs) def li(*args, **kwargs): return element('li', args, **kwargs) def ul(*args, **kwargs): if len(args) == 1 and type(args[0]) is list: args = tuple(map(li, args[0])) return element('ul', args, **kwargs) def dl(*args, **kwargs): if len(args) == 1 and type(args[0]) is list: args = args[0] new_args = [] for arg in args: if isinstance(arg, (tuple, list)) and len(arg) == 2: title, description = arg if title: new_args.append(dt(title)) if description: new_args.append(dd(description)) else: new_args.append(arg) return element('dl', tuple(new_args), **kwargs) def dt(*args, **kwargs): return element('dt', args, **kwargs) def dd(*args, **kwargs): return element('dd', args, **kwargs) def table(*args, **kwargs): return element('table', args, **kwargs) def tr(*args, **kwargs): return element('tr', args, **kwargs) def th(*args, **kwargs): return element('th', args, **kwargs) def td(*args, **kwargs): return element('td', args, **kwargs) def tbody(*args, **kwargs): return element('tbody', args, **kwargs) def thead(*args, **kwargs): return element('thead', args, **kwargs) def span(*args, **kwargs): return element('span', args, **kwargs) def p(*args, **kwargs): return element('p', args, **kwargs) def pdiv(*args, **kwargs): return element('div', args, css_class="p", **kwargs) def url_with_query(path, **attrs): result = xml(url_quote(stringify(path))) if attrs: result += "?" + xml("&").join([ url_quote(stringify(key)) + "=" + url_quote(stringify(value)) for key, value in attrs.items()]) return result def javascript:xml(*args): '\n\n' def mailto:xml(to, subject=None, body=None): '' xml(xml_quote(to).replace('@', '@')) '' genlib_js = None def get_genlib_js(): global genlib_js if genlib_js is None: from os.path import dirname genlib_js = open(dirname(__file__) + '/genlib.js').read() return genlib_js