Beispiel #1
0
 def url(self, name, value=None, id=None, **attrs):
     kw = {'type': 'text', 'maxlength': 150, 'class_': 'url'}
     kw.update(attrs)
     value = self.value(name, value)
     if value and value.startswith('http://'):
         value = value[len('http://'):]
     return literal('http://') + tags.text(name, value, id, **kw)
Beispiel #2
0
def excerpt(text, phrase, radius=100, excerpt_string="..."):
    """Extract an excerpt from the ``text``, or '' if the phrase isn't
    found.

    ``phrase``
        Phrase to excerpt from ``text``
    ``radius``
        How many surrounding characters to include
    ``excerpt_string``
        Characters surrounding entire excerpt
    
    Example::
    
        >>> excerpt("hello my world", "my", 3)
        '...lo my wo...'

    """
    if not text or not phrase:
        return text

    pat = re.compile("(.{0,%s}%s.{0,%s})" % (radius, re.escape(phrase), radius), re.I)
    match = pat.search(text)
    if not match:
        return ""
    excerpt = match.expand(r"\1")
    if match.start(1) > 0:
        excerpt = excerpt_string + excerpt
    if match.end(1) < len(text):
        excerpt = excerpt + excerpt_string
    if hasattr(text, "__html__"):
        return literal(excerpt)
    else:
        return excerpt
Beispiel #3
0
 def url(self, name, value=None, id=None, **attrs):
     kw = {'type': 'text', 'maxlength': 150, 'class_': 'url'}
     kw.update(attrs)
     value = self.value(name, value)
     if value and value.startswith('http://'):
         value = value[len('http://'):]
     return literal(u'http://') + tags.text(name, value, id, **kw)
Beispiel #4
0
def excerpt(text, phrase, radius=100, excerpt_string="..."):
    """Extract an excerpt from the ``text``, or '' if the phrase isn't
    found.

    ``phrase``
        Phrase to excerpt from ``text``
    ``radius``
        How many surrounding characters to include
    ``excerpt_string``
        Characters surrounding entire excerpt
    
    Example::
    
        >>> excerpt("hello my world", "my", 3)
        '...lo my wo...'

    """
    if not text or not phrase:
        return text

    pat = re.compile(
        '(.{0,%s}%s.{0,%s})' % (radius, re.escape(phrase), radius), re.I)
    match = pat.search(text)
    if not match:
        return ""
    excerpt = match.expand(r'\1')
    if match.start(1) > 0:
        excerpt = excerpt_string + excerpt
    if match.end(1) < len(text):
        excerpt = excerpt + excerpt_string
    if hasattr(text, '__html__'):
        return literal(excerpt)
    else:
        return excerpt
Beispiel #5
0
 def default_header_ordered_column_format(
     self, column_number, column_name, header_label
 ):
     dir_char = "&#9650;" if self.order_dir == "asc" else "&#9660;"
     header_label = HTML(
         header_label, HTML.tag("span", literal(dir_char), class_="marker")
     )
     if column_name == "_numbered":
         column_name = "numbered"
     class_name = "c%s ordering %s %s" % (column_number, self.order_dir, column_name)
     return HTML.tag("td", header_label, class_=class_name)
Beispiel #6
0
    def colour(self, name, value=None, id=None, **attrs):
        kw = {'maxlength': 50, 'size': 20, 'class_': 'colour'}
        kw.update(attrs)
        kw['size'] = min((kw['maxlength'], kw['size']))

        id = id or name

        value = self.value(name, value)
        if value and value[0] == '#':
            value = value[1:]

        return literal('#') + tags.text(name, value, id, **kw)
Beispiel #7
0
    def colour(self, name, value=None, id=None, **attrs):
        kw = {'maxlength': 50, 'size': 20, 'class_': 'colour'}
        kw.update(attrs)
        kw['size'] = min((kw['maxlength'], kw['size']))

        id = id or name

        value = self.value(name, value)
        if value and value[0] == '#':
            value = value[1:]

        return literal('#') + tags.text(name, value, id, **kw)
def test_compose_attrs(html5_attribute_table):
    separators = [
        ('space-separated', ' '),
        ('comma-separated', ', '),
        ('list of integers', ','),
        ('list of floating-point numbers', ','),
        ('media query list', ', '),
        ('css declarations', '; '),
    ]
    html5_compose_attrs = {}
    for row in html5_attribute_table:
        value = row.value.lower()
        for description, separator in separators:
            if description in value:
                html5_compose_attrs[row.attribute] = literal(separator)
                break
    assert html5_compose_attrs['style'] == literal('; '), \
        "scraped results do not look sane"
    assert html5_compose_attrs['class'] == literal(' '), \
        "scraped results do not look sane"

    assert HTML.compose_attrs == html5_compose_attrs
Beispiel #9
0
def test_compose_attrs(html5_attribute_table):
    separators = [
        ('space-separated', ' '),
        ('comma-separated', ', '),
        ('list of integers', ','),
        ('list of floating-point numbers', ','),
        ('media query list', ', '),
        ('css declarations', '; '),
        ]
    html5_compose_attrs = {}
    for row in html5_attribute_table:
        value = row.value.lower()
        for description, separator in separators:
            if description in value:
                html5_compose_attrs[row.attribute] = literal(separator)
                break
    assert html5_compose_attrs['style'] == literal('; '), \
        "scraped results do not look sane"
    assert html5_compose_attrs['class'] == literal(' '), \
        "scraped results do not look sane"

    assert HTML.compose_attrs == html5_compose_attrs
Beispiel #10
0
    def colour(self, name, value=None, id=None, **attrs):
        kw = {"maxlength": 50, "size": 20}
        kw.update(attrs)
        if kw["size"] is not None:
            kw["size"] = min((kw["maxlength"], kw["size"]))
        kw["class_"] = self._fix_class(attrs, "colour")

        id = id or name

        value = self.value(name, value)
        if value and value[0] == "#":
            value = value[1:]

        return literal("#") + tags.text(name, value, self._fix_id(id), **kw)
Beispiel #11
0
    def document(self):
        """Render the error document"""

        # TODO: this will break - adjust to flask response

        resp = request.environ.get("pylons.original_response")
        if resp is not None:
            unicode_body = str2unicode(resp.body)
            content = literal(unicode_body)
        else:
            message = request.GET.get("message",
                                      request.POST.get("message", ""))
            content = escape(message)

        code = request.GET.get("code",
                               request.POST.get("code", str(resp.status_int)))

        page = error_document_template % dict(
            prefix=request.environ.get("SCRIPT_NAME", ""),
            code=escape(code),
            message=content,
        )
        return page
Beispiel #12
0
def markdown(text):
    """Parses a given string using Markdown."""
    return literal(md_parser(text))
Beispiel #13
0
def markdown(text):
    """Parses a given string using Markdown."""
    return literal(md_parser(text))