示例#1
0
    def render_header(self):
        def render_search(value):
            CLEAR_LAYOUT = '<span class="clear"><a href="%s"><img src="/static/dz/images/remove_filter.png"></a></span>'
            SEARCH_FIELDS = '<input type="text" class="text_field" id="search_text" name="q" value="%s">%s<input class="search_button" type=submit value="Search">'
            SEARCH_BUTTON = '<input class="search_button" type=submit value="Search">'
            SEARCH_LAYOUT = '<div class="search">%s</div>'

            if value == None:
                return ''
            elif value == '':
                clear = '<span class="clear"></span>'
            else:
                clear = CLEAR_LAYOUT % ('/'.join([''] + route + ['clear']))
            return SEARCH_LAYOUT % form_for(
                SEARCH_FIELDS % (websafe(value), clear), method='GET')

        def render_actions(items):
            return as_actions(items)

        header_required = self.title or self.subtitle or self.search != None or self.actions
        if not header_required: return ''
        return unisafe(HEADER_LAYOUT % dict(title=self.title,
                                            subtitle=self.subtitle,
                                            search=render_search(self.search),
                                            actions=as_actions(self.actions)))
示例#2
0
    def render_header(self):

        def render_search(value):
            CLEAR_LAYOUT  = '<span class="clear"><a href="%s"><img src="/static/dz/images/remove_filter.png"></a></span>'
            SEARCH_FIELDS = '<input type="text" class="text_field" id="search_text" name="q" value="%s">%s<input class="search_button" type=submit value="Search">'
            SEARCH_BUTTON = '<input class="search_button" type=submit value="Search">'
            SEARCH_LAYOUT = '<div class="search">%s</div>'

            if value == None:
                return ''
            elif value == '':
                clear = '<span class="clear"></span>'
            else:
                clear = CLEAR_LAYOUT % ('/'.join([''] + route + ['clear']))
            return  SEARCH_LAYOUT % form_for(SEARCH_FIELDS % (websafe(value),clear), method='GET')

        def render_actions(items):
            return as_actions(items)

        header_required = self.title or self.subtitle or self.search!=None or self.actions
        if not header_required: return ''
        return unisafe(HEADER_LAYOUT % dict(
                title=self.title,
                subtitle=self.subtitle,
                search=render_search(self.search),
                actions=as_actions(self.actions)))
示例#3
0
def page(content='', template=None, callback=None, css=None, js=None, title=None, search=None, actions=None, items=None, head=''):

    def render_search(value):
        if value == None: 
            return ''
        elif value == '':
            clear = '<span class="clear"></span>'
        else:
            clear = '<span class="clear"><a href="%s"><img src="/static/images/remove_filter.png"></a></span>' % ('/'.join([''] + route + ['clear']))
        return '<div class="search">%s</div>' % form_for('<input type="text" class="text_field" id="search_text" name="q" value="%s">%s<input class="search_button" type=submit value="Search">' % (value,clear), method='GET')


    header_layout = """
<table id="title_bar"><tr>
<td id="title_bar_left">
<H1>%(title)s</H1>
</td>
<td id="title_bar_right">
%(actions)s
%(search)s
</td>
</tr></table>

"""
    if len(route)>1:
        breadcrumb = link_to(system.app.title,'/'+system.app.name)
    else:
        breadcrumb = ''

    system.result = page = Page()
    if title or actions:
        page_header = header_layout % dict(title=title or '', search=render_search(search), actions=as_actions(actions))
    else:
        page_header = ''

    page.content = unisafe(page_header) + unisafe(render(unisafe(content), items))
    page.css = css or ''
    page.js = js or ''
    page.callback = callback
    page.template = template or system.default_template
    page.head = head
    return page
示例#4
0
            elif colnum > 0 or not (on_click or on_remove or on_delete):
                body.append(wrapping.format(unisafe(item)))

        if on_delete:
            body.append(trash_can(key, 'delete', on_delete))

        if on_remove:
            body.append(trash_can(key, 'remove', on_remove))

        body.append('</tr>')

    selector = hasattr(classed, '__iter__') and '.'.join(classed) or classed
    selector = "{}".format(selector.replace(' ', '.'))
    classed = hasattr(classed, '__iter__') and ' '.join(classed) or classed
    actions = actions and '<div class="actions">{}</div>'.format(
        as_actions(actions)) or ''
    caption = caption and "<caption>{}</caption>".format(caption) or ''
    head = head and "<thead><tr>{}</tr></thead>".format(''.join(
        ["<th>{}</th>".format(h) for h in head])) or ''
    if footer and hasattr(footer, '__iter__'):
        foot = '<tfoot><tr>{}</tr></tfoot>'.format(''.join(
            ["<td>{}</td>".format(f) for f in footer]))
    elif footer == '':
        foot = ''
    else:
        foot = footer or (len(alist)
                          and "{:,d} items".format(len(alist))) or "None"
        foot = '<tfoot><tr><td colspan="{}">{}</td></tr></tfoot>'.format(
            len(labels), foot)
    body = body and "<tbody>{}</tbody>".format('\n'.join(body)) or ''
示例#5
0
def browse(items, labels=None, columns=None, fields=None, footer=None, title=None, actions=None, header=None, on_click=None, on_delete=None, on_remove=None, *args, **keywords):

    def trash_can(key,kind,action,**args):
        link  = url_for(str(key),action,**args)
        tpl = '<td width=1px><a href="%(link)s"><img src="/themes/%(theme)s/images/%(kind)s.png" border=0 height=13px width=13px alt="%(kind)s"></a></td>'
        return tpl % dict(link=link, kind=kind, theme=system.theme)

    def getcol(item, name):
        try:
            return item[name]
        except:
            return ''

    if labels:
        if not columns:
            if len(items) and hasattr(items[0], 'get'):
                columns = [name_for(label).lower() for label in labels]

            elif len(items) and hasattr(items[0], '__len__') and len(items[0]):
                columns = range(len(labels))

            else:
                columns = [name_for(label).lower() for label in labels]

    else:
        if columns:
            labels = columns
        else:
            if len(items) and hasattr(items[0], 'keys') and callable(getattr(items[0],'keys')):
                labels = columns = items[0].keys()

            elif len(items) and hasattr(items[0], '__dict__'):
                labels = columns = [items[0].__dict__.keys()]

            elif len(items) and hasattr(items[0], 'keys') and callable(getattr(items[0],'keys')):
                labels = columns = [items[0].keys()]

            elif len(items) and hasattr(items[0], '__len__') and len(items[0]):
                labels = items[0]
                columns = range(len(items[0]))
                items = items[1:]

            else:
                if len(items):
                    raise Exception('%s' % hasattr(items[0],'__len__'))
                raise Exception('Unable to infer columns')

    columns = list(columns)
    labels = list(labels)

    if fields:
        #labels = []
        lookup = fields.as_dict()
        for col in columns[len(labels):]:
            if col in lookup:
                label = lookup[col].label
            else:
                label = col
            labels.append(label)

        alist = []
        for item in items:
            fields.initialize(item)
            flookup = fields.display_value()
            row = [flookup.get(col.upper(),getcol(item,col)) for col in columns]
            alist.append(row)
    else:
        alist = [[getcol(item,col) for col in columns] for item in items]

    if (on_click or on_delete or on_remove) and columns[0] <> '_id':
        columns = ['_id'] + columns
        t = []
        for i in alist:
            t.append([i[0]] + i)
        alist = t

    odd_rowclass = 'dark'
    evn_rowclass = 'light'

    t = []
    if labels:
        t.append( '<thead><tr>' )

        colnum = 0
        for label in labels:
            colnum += 1
            t.append('<th>%s</th>' % label)

        if on_delete:
            t.append('<th colwidth=1px>%s</th>' % '')
        if on_remove:
            t.append('<th colwidth=1px>%s</th>' % '')
        t.append( '</tr></thead>' )
        odd_rowclass = 'light' # if there is a header start line shading on 2nd line
        evn_rowclass = 'dark'

    t.append( '<tbody>' )

    count = 0
    for row in alist:
        count += 1
        if count % 2:
            rowclass = odd_rowclass
        else:
            rowclass = evn_rowclass
        t.append( '<tr id="row-%s" class="%s">' % (count, rowclass) )

        colnum = 0
        for item in row:
            #wrapping = len(unicode(item)) < 40 and 'nowrap' or ''
            wrapping = len(unisafe(item)) < 80 and '<td nowrap>%s</td>' or '<td>%s</td>'
            if (on_click or on_delete or on_remove) and colnum == 0:
                key = item
            if on_click and (colnum == 1 or colnum==0 and len(row)==1):
                url = '/'.join(route[1:]+[str(key)])
                #t.append('<td>%s</td>' % link_to(item, url, *args, **keywords))
                t.append(wrapping % link_to(item, url, *args, **keywords))
            elif colnum>0 or not (on_click or on_remove or on_delete):
                #t.append('<td %s>%s</td>' % (wrapping, item))
                t.append(wrapping % unisafe(item))
            colnum += 1

        if on_delete:
            t.append(trash_can(key,'delete',on_delete))

        if on_remove:
            t.append(trash_can(key,'remove',on_remove))

        t.append( '</tr>' )

    t.append( '</tbody>' )

    if not count:
        t.append('<tr><td colspan=%s>None</td></tr>' % len(labels))

    if not header:
        if title:
            header = '<div class="title">%s</div>' %  title
        if actions:
            header += as_actions(actions)

    header_body = header and ('<div class="header">%s</div>' % header) or ''
    footer_body = footer and ('<div class="footer">%s</div>' % footer) or ''

    result = '\n'.join(['<div class="baselist">'] + [header_body] + ['<table>'] + t + ['</table>'] + [footer_body] + ['</div>'])
    return result
示例#6
0
 def render_actions(items):
     return as_actions(items)
示例#7
0
                #t.append('<td %s>%s</td>' % (wrapping, item))
                t.append(wrapping % unisafe(item))
            colnum += 1

        if on_delete:
            t.append(trash_can(key,'delete',on_delete))

        if on_remove:
            t.append(trash_can(key,'remove',on_remove))

        t.append( '</tr>' )

    t.append( '</tbody>' )

    if not count:
        t.append('<tr><td colspan=%s>None</td></tr>' % len(labels))

    if not header:
        if title:
            header = '<div class="title">%s</div>' %  title
        if actions:
            header += as_actions(actions)

    header_body = header and ('<div class="header">%s</div>' % header) or ''
    footer_body = footer and ('<div class="footer">%s</div>' % footer) or ''

    result = '\n'.join(['<div class="baselist">'] + [header_body] + ['<table>'] + t + ['</table>'] + [footer_body] + ['</div>'])
    return result


示例#8
0
                body.append(wrapping.format(link_to(item, url, *args, **keywords)))
            elif colnum>0 or not (on_click or on_remove or on_delete):
                body.append(wrapping.format(unisafe(item)))

        if on_delete:
            body.append(trash_can(key,'delete',on_delete))

        if on_remove:
            body.append(trash_can(key,'remove',on_remove))

        body.append( '</tr>' )

    selector = hasattr(classed, '__iter__') and '.'.join(classed) or classed
    selector = "{}".format(selector.replace(' ', '.'))
    classed = hasattr(classed, '__iter__') and ' '.join(classed) or classed
    actions = actions and '<div class="actions">{}</div>'.format(as_actions(actions)) or ''
    caption = caption and "<caption>{}</caption>".format(caption) or ''
    head = head and "<thead><tr>{}</tr></thead>".format(''.join(["<th>{}</th>".format(h) for h in head])) or ''
    if footer and hasattr(footer, '__iter__'):
        foot = '<tfoot><tr>{}</tr></tfoot>'.format(''.join(["<td>{}</td>".format(f) for f in footer]))
    elif footer=='':
        foot = ''
    else:
        foot = footer or (len(alist) and "{:,d} items".format(len(alist))) or "None"
        foot = '<tfoot><tr><td colspan="{}">{}</td></tr></tfoot>'.format(len(labels),foot)
    body = body and "<tbody>{}</tbody>".format('\n'.join(body)) or ''

    if sortable:
        system.libs.add("/static/dz/tablesorter/jquery.tablesorter.js")
        system.styles.add("/static/dz/tablesorter/default/style.css")
        system.tail.add("""
示例#9
0
                #t.append('<td %s>%s</td>' % (wrapping, item))
                t.append(wrapping % unisafe(item))
            colnum += 1

        if on_delete:
            t.append(trash_can(key, 'delete', on_delete))

        if on_remove:
            t.append(trash_can(key, 'remove', on_remove))

        t.append('</tr>')

    t.append('</tbody>')

    if not count:
        t.append('<tr><td colspan=%s>None</td></tr>' % len(labels))

    if not header:
        if title:
            header = '<div class="title">%s</div>' % title
        if actions:
            header += as_actions(actions)

    header_body = header and ('<div class="header">%s</div>' % header) or ''
    footer_body = footer and ('<div class="footer">%s</div>' % footer) or ''

    result = '\n'.join(['<div class="baselist">'] + [header_body] +
                       ['<table>'] + t + ['</table>'] + [footer_body] +
                       ['</div>'])
    return result
示例#10
0
 def render_actions(items):
     return as_actions(items)