Beispiel #1
0
    def stream_errors(self, request, children):
        '''Create the error ``td`` elements.
They all have the class ``error``.'''
        for w in children:
            b = w.bfield
            w = Widget('td', cn='error')
            if b:
                w.addClass(b.widget.attrs.get('type'))\
                 .add(b.error).addAttr('id', b.errors_id)
            yield w
Beispiel #2
0
    def stream_errors(self, request, children):
        '''Create the error ``td`` elements.
They all have the class ``error``.'''
        for w in children:
            b = w.bfield
            w = Widget('td', cn='error')
            if b:
                w.addClass(b.widget.attrs.get('type'))\
                 .add(b.error).addAttr('id', b.errors_id)
            yield w
Beispiel #3
0
def icon(name, size, widget):
    name = mapping.get(name, name)
    if not name.startswith('icon-'):
        name = 'icon-%s' % name
    inner = Widget('i', cn=name)
    if size:
        inner.addClass('icon-{0}'.format(size))
    if widget:
        widget.insert(0, inner)
        widget.insert(1, ' ')
        return widget
    else:
        return inner.render()
Beispiel #4
0
def icon(name, size, widget):
    name = mapping.get(name, name)
    if not name.startswith('icon-'):
        name = 'icon-%s' % name
    inner = Widget('i', cn=name)
    if size:
        inner.addClass('icon-{0}'.format(size))
    if widget:
        widget.insert(0, inner)
        widget.insert(1, ' ')
        return widget
    else:
        return inner.render()
Beispiel #5
0
def navstream(request, urlselects, secondary_after, level):
    for request, nav in sorted(((c, c.in_navigation) for c in request.auth_children()), key=lambda x: x[1]):
        if not nav:
            continue
        link = application_link(request, asbutton=False)
        li = Widget("li", link)
        secondary = secondary_after and nav > secondary_after
        if link.attrs["href"] in urlselects:
            li.addClass(classes.state_active)
        if level:
            slis = list(navstream(request, urlselects, None, level - 1))
            if slis:
                ul = Widget("ul")
                for sli, _ in slis:
                    ul.add(sli)
                li.add(ul)
        yield li, secondary
Beispiel #6
0
def navstream(request, urlselects, secondary_after, level):
    for request, nav in sorted(((c, c.in_navigation)\
                for c in request.auth_children()), key=lambda x : x[1]):
        if not nav:
            continue
        link = application_link(request, asbutton=False)
        li = Widget('li', link)
        secondary = secondary_after and nav > secondary_after
        if link.attrs['href'] in urlselects:
            li.addClass(classes.state_active)
        if level:
            slis = list(navstream(request, urlselects, None, level - 1))
            if slis:
                ul = Widget('ul')
                for sli, _ in slis:
                    ul.add(sli)
                li.add(ul)
        yield li, secondary
Beispiel #7
0
    def stream(self, request, widget, context):
        '''We override inner so that the actual rendering is delegate to
 :class:`djpcms.html.Table`.'''
        for s in super(BaseTableElement, self).stream(request, widget, context):
            yield s
        tr = Widget('tr', self.render_heads(request, widget, context))
        head = Widget('thead', tr)
        body = Widget('tbody', self.row_generator(request, widget, context))
        table = Widget('table', (head, body))
        yield table.addClass(self.elem_css).render(request)
Beispiel #8
0
    def stream(self, request, widget, context):
        '''We override inner so that the actual rendering is delegate to
 :class:`djpcms.html.Table`.'''
        for s in super(BaseTableElement, self).stream(request, widget,
                                                      context):
            yield s
        tr = Widget('tr', self.render_heads(request, widget, context))
        head = Widget('thead', tr)
        body = Widget('tbody', self.row_generator(request, widget, context))
        table = Widget('table', (head, body))
        yield table.addClass(self.elem_css).render(request)
Beispiel #9
0
    def handle_error(self, request, response):
        '''Render an error into text or Html depending on *content_type*.
This function can be overwritten by user implementation.'''
        exc_info = request.exc_info
        settings = request.settings
        status = 500
        if exc_info and exc_info[0] is not None:
            status = getattr(exc_info[1], 'status', status)
        else:
            exc_info = None
        # 302 is a special case, we redirect
        content_type = request.content_type
        if status in REDIRECT_CODES:
            location = dict(exc_info[1].headers)['location']
            if request.is_xhr:
                content = ajax.jredirect(request.environ, location)
            else:
                content_type = None
                response.headers['Location'] = iri_to_uri(location)
                content = ''
        else:
            err_cls = '%s%s' % (classes.error, status)
            err_title = '%s %s' % (status, error_title(status))
            if content_type == 'text/plain':
                content = err_title
                if settings.DEBUG:
                    content += '\n\n' + html_trace(exc_info, plain=True)
            else:
                inner = Widget('div', cn=(classes.error, err_cls))
                if settings.DEBUG:
                    inner.addClass('debug')
                    inner.add(Widget('h2', err_title))
                    inner.add(Widget('a', request.path, href=request.path))
                    inner.add(html_trace(exc_info))
                else:
                    func_name = 'render_error_%s' % status
                    if hasattr(self, func_name):
                        text = getattr(self, func_name)(request, status)
                    else:
                        text = error_title
                    inner.add(text)
                if request.is_xhr:
                    content = ajax.jservererror(request.environ,
                                                inner.render(request))
                else:
                    try:
                        layout = request.view.root.get_page_layout(err_cls,
                                                                   classes.error,
                                                                   'default')
                        outer = layout()
                        content = outer.render(request,
                                               context={'content': inner})
                    except:
                        logger.error('Could not render %s error on %s layout',
                                     status, layout, exc_info=True)
                        content = inner.render(request)
        if is_renderer(content):
            response.status_code = 200
            response.content_type = content.content_type()
            content = content.render(request)
        else:
            response.content_type = content_type
            response.status_code = status
        if status == 500:
            logger.critical('Interval server error', exc_info=exc_info)
        return content
Beispiel #10
0
    def handle_error(self, request, response):
        '''Render an error into text or Html depending on *content_type*.
This function can be overwritten by user implementation.'''
        exc_info = request.exc_info
        settings = request.settings
        status = 500
        if exc_info and exc_info[0] is not None:
            status = getattr(exc_info[1], 'status', status)
        else:
            exc_info = None
        # 302 is a special case, we redirect
        content_type = request.content_type
        if status in REDIRECT_CODES:
            location = dict(exc_info[1].headers)['location']
            if request.is_xhr:
                content = ajax.jredirect(request.environ, location)
            else:
                content_type = None
                response.headers['Location'] = iri_to_uri(location)
                content = ''
        else:
            err_cls = '%s%s' % (classes.error, status)
            err_title = '%s %s' % (status, error_title(status))
            if content_type == 'text/plain':
                content = err_title
                if settings.DEBUG:
                    content += '\n\n' + html_trace(exc_info, plain=True)
            else:
                inner = Widget('div', cn=(classes.error, err_cls))
                if settings.DEBUG:
                    inner.addClass('debug')
                    inner.add(Widget('h2', err_title))
                    inner.add(Widget('a', request.path, href=request.path))
                    inner.add(html_trace(exc_info))
                else:
                    func_name = 'render_error_%s' % status
                    if hasattr(self, func_name):
                        text = getattr(self, func_name)(request, status)
                    else:
                        text = error_title
                    inner.add(text)
                if request.is_xhr:
                    content = ajax.jservererror(request.environ,
                                                inner.render(request))
                else:
                    try:
                        layout = request.view.root.get_page_layout(
                            err_cls, classes.error, 'default')
                        outer = layout()
                        content = outer.render(request,
                                               context={'content': inner})
                    except:
                        logger.error('Could not render %s error on %s layout',
                                     status,
                                     layout,
                                     exc_info=True)
                        content = inner.render(request)
        if is_renderer(content):
            response.status_code = 200
            response.content_type = content.content_type()
            content = content.render(request)
        else:
            response.content_type = content_type
            response.status_code = status
        if status == 500:
            logger.critical('Interval server error', exc_info=exc_info)
        return content