예제 #1
0
파일: components.py 프로젝트: robinsax/zoom
def as_actions(items):
    """returns actions

    >>> from zoom.context import context as ctx
    >>> ctx.site = lambda: None
    >>> ctx.site.url = ''

    >>> as_actions(['New'])
    '<div class="actions"><ul><li><a class="action" href="<dz:request_path>/new" id="new-action">New</a></li></ul></div>'

    >>> as_actions(['New','Delete'])
    '<div class="actions"><ul><li><a class="action" href="<dz:request_path>/delete" id="delete-action">Delete</a></li><li><a class="action" href="<dz:request_path>/new" id="new-action">New</a></li></ul></div>'

    """
    if not items:
        return ''
    result = []
    for item in reversed(items):
        if type(item) == str:
            text = item
            url = url_for('./' + id_for(item))
        elif hasattr(item, '__iter__'):
            text, url = item[:2]
        else:
            raise Exception('actions require str or (str,url)')
        result.append(
            a(text, Class='action', id=id_for(text) + '-action', href=url))
    return div(ul(result), Class='actions')
예제 #2
0
파일: components.py 프로젝트: robinsax/zoom
def spinner():
    """A progress spinner

    >>> isinstance(spinner(), str)
    True
    """
    zoom.requires('spin')
    return div(id='spinner')
예제 #3
0
파일: app.py 프로젝트: robinsax/zoom
def app(request):
    """Return a page containing a list of available apps"""

    zoom.requires('fontawesome4')

    css = """
        .app-icons ul {
            list-style-type: none;
            margin-top: 50px;
        }
        .app-icons li {
            display: inline;
        }
        .zoom-app-as-icon {
            width: 110px;
            height: 120px;
            text-align: center;
            float: left;
        }
        .zoom-app-as-icon:hover {
            background: #eee;
        }
        .zoom-app-icon {
            height: 50px;
            width: 50px;
            border-radius: 5px;
            margin-top: 16px;
            padding-top: 5px;
            line-height: 50px;
            text-align: center;
            box-shadow: inset 0px 49px 0px -24px #67828b;
            background-color: #5a7179;
            border: 1px solid #ffffff;
            display: inline-block;
            color: #ffffff;
            font-size: 15px;
            text-decoration: none;
        }
        .zoom-app-icon .fa {
            font-size: 2em;
        }
    """

    if len(request.route) > 1 or request.data:
        return zoom.home()

    skip = 'home', 'logout', 'login'
    content = h.div(h.ul(
        a.as_icon
        for a in sorted(request.site.apps, key=lambda a: a.title.lower())
        if a.name not in skip and a.visible and request.user.can_run(a)),
                    classed='app-icons')
    return zoom.page(content, css=css)
예제 #4
0
파일: index.py 프로젝트: robinsax/zoom
    def page(self, response, *args, **kwargs):

        if not isinstance(response, zoom.page):
            return response

        menu = side_menu(*self.items)

        search = getattr(response, 'search', None)
        actions = getattr(response, 'actions', [])
        content = response.content

        layout = h.div(h.div(menu, Class='col-md-3 side-nav') +
                       h.div(content, Class='col-md-9'),
                       classed='row')

        page_args = self.common_kwargs.copy()
        page_args.update(kwargs)

        return zoom.page(layout,
                         search=search,
                         actions=actions,
                         *args,
                         **page_args)
예제 #5
0
def view():

    hr = '<hr>\n'

    content = zoom.Component(
        'zoom.components.HeaderBar',
        c.HeaderBar(left=h.h2('HeaderBar Left'), right='HeaderBar right'),
        hr,
        'zoom.components.spinner',
        h.div(c.spinner(),
              classed="clearfix",
              style="margin: 40px auto; width: 0;"),
        hr,
        'zoom.components.dropzone',
        c.dropzone('/sample/components'),
        hr,
    )

    return zoom.page(content, title='Components')
예제 #6
0
파일: components.py 프로젝트: robinsax/zoom
def dropzone(url, **kwargs):
    """Dropzone component

    A basic dropzone component that supports drag and drop uploading
    of files which are posted to the URL provided.

    >>> zoom.system.site = zoom.sites.Site()
    >>> zoom.system.site.packages = {}
    >>> zoom.system.request = zoom.utils.Bunch(app=zoom.utils.Bunch(name='hello', packages={}))
    >>> c = dropzone('/app/files')
    >>> isinstance(c, zoom.Component)
    True
    """
    zoom.requires('dropzone')

    id = 'dropzone_' + uuid.uuid4().hex

    js = """
    var %(id)s = new Dropzone("#%(id)s", {url: "%(url)s"});
    """ % dict(id=id, url=url)

    html = div(classed='dropzone', id=id, **kwargs)
    return zoom.Component(html)  #, js=js)
예제 #7
0
파일: helpers.py 프로젝트: robinsax/zoom
def standard_zoom_content_tags():
    tags = 'stdout', 'alerts', 'content'
    content = ''.join('{{%s}}' % tag for tag in tags)
    return html.div(content, classed='content')
예제 #8
0
파일: page.py 프로젝트: robinsax/zoom
 def get_alert(name, Class):
     """get an alert as an unordered list"""
     alerts = list(zoom.system.parts.parts.pop(name, []))
     if alerts:
         return html.div(html.ul(alerts), Class='alert %s' % Class)
     return ''