Ejemplo n.º 1
0
 def href_button(self, url, text, title=None, target=None, icon_name=None, **kw):
     """
     Returns an etree object of a "button-like" ``<a href>`` tag.
     """
     #~ logger.info('20121002 href_button %r',unicode(text))
     if target:
         kw.update(target=target)
     if title:
         # Remember that Python 2.6 doesn't like if title is a Promise
         kw.update(title=unicode(title))
         #~ return xghtml.E.a(text,href=url,title=title)
     kw.update(href=url)
     #~ if icon_name:
     if icon_name is not None:
         #~ btn = xghtml.E.button(type='button',class_='x-btn-text '+icon_name)
         #~ btn = xghtml.E.button(
             #~ type='button',
             #~ class_='x-btn-text '+icon_name,
             #~ onclick='function() {console.log(20121024)}')
         #~ return btn
         #~ return xghtml.E.a(btn,**kw)
         #~ kw.update(class_='x-btn-text '+icon_name)
         img = E.img(src=settings.SITE.build_media_url(
             'lino', 'extjs', 'images', 'mjames', icon_name + '.png'))
         return E.a(img, **kw)
     else:
         #~ return E.span('[',xghtml.E.a(text,**kw),']')
         #~ kw.update(style='border-width:1px; border-color:black; border-style:solid;')
         return E.a(text, **kw)
Ejemplo n.º 2
0
    def welcome_html(self, ui=None):
        """
        Return a HTML version of the "This is APPLICATION
        version VERSION using ..." text. to be displayed in the
        About dialog, in the plain html footer, and maybe at other
        places.
        """
        from django.utils.translation import ugettext as _

        p = []
        sep = ''
        if self.verbose_name:
            p.append(_("This is "))
            if self.url:
                p.append(
                    E.a(self.verbose_name, href=self.url, target='_blank'))
            else:
                p.append(E.b(self.verbose_name))
            if self.version:
                p.append(' ')
                p.append(self.version)
            sep = _(' using ')

        for name, version, url in self.get_used_libs(html=E):
            p.append(sep)
            p.append(E.a(name, href=url, target='_blank'))
            p.append(' ')
            p.append(version)
            sep = ', '
        return E.span(*p)
Ejemplo n.º 3
0
    def href_button(
            self, url, text, title=None, target=None, icon_name=None, **kw):
        """
        Returns an etree object of a "button-like" ``<a href>`` tag.
        """
        # logger.info('20121002 href_button %s', unicode(text))
        if target:
            kw.update(target=target)
        if title:
            # Remember that Python 2.6 doesn't like if title is a Promise
            kw.update(title=unicode(title))
            #~ return xghtml.E.a(text,href=url,title=title)
        if not isinstance(text, (tuple, list)):
            text = (text,)
        if url is None:
            return E.b(*text)

        kw.update(href=url)
        if icon_name is not None:
            src = settings.SITE.build_media_url(
                'lino', 'extjs', 'images', 'mjames', icon_name + '.png')
            img = E.img(src=src, alt=icon_name)
            return E.a(img, **kw)
        else:
            return E.a(*text, **kw)
Ejemplo n.º 4
0
    def href_button(self, url, text, title=None, icon_name=None, **kw):
        """Returns an etree object of a ``<a href>`` tag to the given URL
        `url`. 

        `url` is what goes into the `href` part. If `url` is `None`,
        then we return just a ``<b>`` tag.

        `text` is what goes between the ``<a>`` and the ``</a>``. This
        can be either a string or a tuple (or list) of strings (or
        etree elements).

        """
        # logger.info('20121002 href_button %s', unicode(text))
        if title:
            # Remember that Python 2.6 doesn't like if title is a Promise
            kw.update(title=str(title))
            #~ return xghtml.E.a(text,href=url,title=title)
        if not isinstance(text, (tuple, list)):
            text = (text,)
        if url is None:
            return E.b(*text)

        kw.update(href=url)
        if icon_name is not None:
            src = settings.SITE.build_static_url(
                'images', 'mjames', icon_name + '.png')
            img = E.img(src=src, alt=icon_name)
            return E.a(img, **kw)
        else:
            return E.a(*text, **kw)
Ejemplo n.º 5
0
    def href_button(self,
                    url,
                    text,
                    title=None,
                    target=None,
                    icon_name=None,
                    **kw):
        """
        Returns an etree object of a "button-like" ``<a href>`` tag.
        """
        # logger.info('20121002 href_button %s', unicode(text))
        if target:
            kw.update(target=target)
        if title:
            # Remember that Python 2.6 doesn't like if title is a Promise
            kw.update(title=unicode(title))
            #~ return xghtml.E.a(text,href=url,title=title)
        if not isinstance(text, (tuple, list)):
            text = (text, )
        if url is None:
            return E.b(*text)

        kw.update(href=url)
        if icon_name is not None:
            src = settings.SITE.build_static_url('images', 'mjames',
                                                 icon_name + '.png')
            img = E.img(src=src, alt=icon_name)
            return E.a(img, **kw)
        else:
            return E.a(*text, **kw)
Ejemplo n.º 6
0
    def welcome_html(self, ui=None):
        "See :meth:`ad.Site.welcome_html`."
        from django.utils.translation import ugettext as _

        p = []
        sep = ''
        if self.verbose_name:
            p.append(_("This is "))
            if self.url:
                p.append(
                    E.a(self.verbose_name, href=self.url, target='_blank'))
            else:
                p.append(E.b(self.verbose_name))
            if self.version:
                p.append(' ')
                p.append(self.version)
            sep = _(' using ')

        for name, version, url in self.get_used_libs(html=E):
            p.append(sep)
            p.append(E.a(name, href=url, target='_blank'))
            p.append(' ')
            p.append(version)
            sep = ', '
        return E.span(*p)
Ejemplo n.º 7
0
 def get_file_button(self, text=None):
     if text is None:
         text = str(self)
     if self.file.name:
         url = settings.SITE.build_media_url(self.file.name)
         return E.a(text, href=url, target="_blank")
     return text
Ejemplo n.º 8
0
 def get_file_button(self, text=None):
     if text is None:
         text = str(self)
     if self.file.name:
         url = settings.SITE.build_media_url(self.file.name)
         return E.a(text, href=url, target="_blank")
     return text
Ejemplo n.º 9
0
 def get_help_url(self, docname=None, text=None, **kw):
     if text is None:
         text = unicode(_("the documentation"))
     url = settings.SITE.help_url
     if docname is not None:
         url = "%s/help/%s.html" % (url, docname)
     return E.a(text, href=url, **kw)
Ejemplo n.º 10
0
 def when(self,obj,ar):
     #~ rv = dbutils.dtosl(obj.date)
     rv = dd.fdf(obj.date)
     if obj.url:
         rv = '\n'.join(rv.split()) # replaces spaces by newline to avoid large column
         rv = E.a(rv,href=obj.url)
     return rv
Ejemplo n.º 11
0
 def when(self, obj, ar):
     #~ rv = dbutils.dtosl(obj.date)
     rv = dd.fdf(obj.date)
     if obj.url:
         # replaces spaces by newline to avoid large column
         rv = '\n'.join(rv.split())
         rv = E.a(rv, href=obj.url)
     return rv
Ejemplo n.º 12
0
    def show_menu(self, ar, mnu, level=1):
        """
        Render the given menu as an HTML element.
        Used for writing test cases.
        """
        if not isinstance(mnu, Menu):
            assert isinstance(mnu, MenuItem)
            if mnu.bound_action:
                sr = mnu.bound_action.actor.request(
                    action=mnu.bound_action,
                    user=ar.user,
                    subst_user=ar.subst_user,
                    requesting_panel=ar.requesting_panel,
                    renderer=self,
                    **mnu.params)

                url = sr.get_request_url()
            else:
                url = mnu.href
            assert mnu.label is not None
            if url is None:
                return E.p()  # spacer
            return E.li(E.a(mnu.label, href=url, tabindex="-1"))

        items = [self.show_menu(ar, mi, level + 1) for mi in mnu.items]
        #~ print 20120901, items
        if level == 1:
            return E.ul(*items, class_='nav navbar-nav')
        if mnu.label is None:
            raise Exception("%s has no label" % mnu)
        if level == 2:
            cl = 'dropdown'
            menu_title = E.a(unicode(mnu.label),
                             E.b(' ', class_="caret"),
                             href="#",
                             class_='dropdown-toggle',
                             data_toggle="dropdown")
        elif level == 3:
            menu_title = E.a(unicode(mnu.label), href="#")
            cl = 'dropdown-submenu'
        else:
            raise Exception("Menu with more than three levels")
        return E.li(menu_title,
                    E.ul(*items, class_='dropdown-menu'),
                    class_=cl)
Ejemplo n.º 13
0
 def obj2html(self, ar, obj, text=None, **kwargs):
     if text is None:
         text = (force_unicode(obj), )
     elif isinstance(text, basestring):
         text = (text, )
     url = self.instance_handler(ar, obj)
     if url is not None:
         return E.a(*text, href=url, **kwargs)
     return E.em(*text)
Ejemplo n.º 14
0
 def obj2html(self, ar, obj, text=None, **kwargs):
     if text is None:
         text = (force_unicode(obj),)
     elif isinstance(text, basestring):
         text = (text,)
     url = self.instance_handler(ar, obj)
     if url is not None:
         return E.a(*text, href=url, **kwargs)
     return E.em(*text)
Ejemplo n.º 15
0
 def as_list_item(self, ar):
     if settings.SITE.is_demo_site:
         p = "'{0}', '{1}'".format(self.username, '1234')
     else:
         p = "'{0}'".format(self.username)
     url = "javascript:Lino.show_login_window(null, {0})".format(p)
     return E.li(E.a(self.username, href=url), ' : ', str(self), ', ',
                 str(self.profile), ', ',
                 E.strong(settings.SITE.LANGUAGE_DICT.get(self.language)))
Ejemplo n.º 16
0
 def obj2html(self, ar, obj, text=None):
     if text is None:
         text = (force_unicode(obj),)
     elif isinstance(text, basestring):
         text = (text,)
     if self.is_interactive:
         url = self.instance_handler(ar, obj)
         if url is not None:
             return E.a(*text, href=url)
     return E.b(*text)
Ejemplo n.º 17
0
 def as_list_item(self, ar):
     if settings.SITE.is_demo_site:
         p = "'{0}', '{1}'".format(self.username, '1234')
     else:
         p = "'{0}'".format(self.username)
     url = "javascript:Lino.show_login_window(null, {0})".format(p)
     return E.li(E.a(self.username, href=url), ' : ',
                 str(self), ', ',
                 str(self.profile), ', ',
                 E.strong(settings.SITE.LANGUAGE_DICT.get(self.language)))
Ejemplo n.º 18
0
def table2html(ar, as_main=True):
    """This is not a docstring."""
    as_main = True
    t = xghtml.Table()
    t.attrib.update(class_="table table-striped table-hover")
    if ar.limit is None:
        ar.limit = PLAIN_PAGE_LENGTH
    pglen = ar.limit
    if ar.offset is None:
        page = 1
    else:
        """
        (assuming pglen is 5)
        offset page
        0      1
        5      2
        """
        page = int(ar.offset / pglen) + 1

    ar.dump2html(t, ar.sliced_data_iterator)
    if not as_main:
        url = ar.get_request_url()  # open in own window
        return E.div(E.a(ar.get_title(), href=url), t.as_element())

    buttons = []
    kw = dict()
    kw = {}
    if pglen != PLAIN_PAGE_LENGTH:
        kw[constants.URL_PARAM_LIMIT] = pglen

    if page > 1:
        kw[constants.URL_PARAM_START] = pglen * (page - 2)
        prev_url = ar.get_request_url(**kw)
        kw[constants.URL_PARAM_START] = 0
        first_url = ar.get_request_url(**kw)
    else:
        prev_url = None
        first_url = None
    buttons.append(('<<', _("First page"), first_url))
    buttons.append(('<', _("Previous page"), prev_url))

    next_start = pglen * page
    if next_start < ar.get_total_count():
        kw[constants.URL_PARAM_START] = next_start
        next_url = ar.get_request_url(**kw)
        last_page = int((ar.get_total_count() - 1) / pglen)
        kw[constants.URL_PARAM_START] = pglen * last_page
        last_url = ar.get_request_url(**kw)
    else:
        next_url = None
        last_url = None
    buttons.append(('>', _("Next page"), next_url))
    buttons.append(('>>', _("Last page"), last_url))

    return E.div(buttons2pager(buttons), t.as_element())
Ejemplo n.º 19
0
    def show_menu(self, ar, mnu, level=1):
        """
        Render the given menu as an HTML element.
        Used for writing test cases.
        """
        if not isinstance(mnu, Menu):
            assert isinstance(mnu, MenuItem)
            if mnu.bound_action:
                sr = mnu.bound_action.actor.request(
                    action=mnu.bound_action,
                    user=ar.user, subst_user=ar.subst_user,
                    requesting_panel=ar.requesting_panel,
                    renderer=self, **mnu.params)

                url = sr.get_request_url()
            else:
                url = mnu.href
            assert mnu.label is not None
            if url is None:
                return E.p()  # spacer
            return E.li(E.a(mnu.label, href=url, tabindex="-1"))

        items = [self.show_menu(ar, mi, level + 1) for mi in mnu.items]
        #~ print 20120901, items
        if level == 1:
            return E.ul(*items, class_='nav navbar-nav')
        if mnu.label is None:
            raise Exception("%s has no label" % mnu)
        if level == 2:
            cl = 'dropdown'
            menu_title = E.a(
                unicode(mnu.label), E.b(' ', class_="caret"), href="#",
                class_='dropdown-toggle', data_toggle="dropdown")
        elif level == 3:
            menu_title = E.a(unicode(mnu.label), href="#")
            cl = 'dropdown-submenu'
        else:
            raise Exception("Menu with more than three levels")
        return E.li(
            menu_title,
            E.ul(*items, class_='dropdown-menu'),
            class_=cl)
Ejemplo n.º 20
0
 def obj2html(self, ar, obj, text=None, **kwargs):
     """Return a html representation of a pointer to the given database
     object."""
     if text is None:
         text = (force_text(obj),)
     elif isinstance(text, basestring):
         text = (text,)
     url = self.instance_handler(ar, obj)
     if url is None:
         return E.em(*text)
     return E.a(*text, href=url, **kwargs)
Ejemplo n.º 21
0
def buttons2pager(buttons, title=None):
    items = []
    if title:
        items.append(E.li(E.span(title)))
    for symbol, label, url in buttons:
        if url is None:
            items.append(E.li(E.span(symbol), class_="disabled"))
        else:
            items.append(E.li(E.a(symbol, href=url)))
    # Bootstrap version 2.x
    # return E.div(E.ul(*items), class_='pagination')
    return E.ul(*items, class_='pagination pagination-sm')
Ejemplo n.º 22
0
    def get_help_url(self, docname=None, text=None, **kw):
        """Generate a link to the help section of the documentation (whose
        base is defined by :attr:`lino.core.site.Site.help_url`)

        Usage example::

            help = ar.get_help_url("foo", target='_blank')
            msg = _("You have a problem with foo."
                    "Please consult %(help)s "
                    "or ask your system administrator.")
            msg %= dict(help=E.tostring(help))
            kw.update(message=msg, alert=True)

        The :ref:`lino.tutorial.pisa` tutorial shows a resulting message
        generated by the print action.

        """
        if text is None:
            text = str(_("the documentation"))
        url = settings.SITE.help_url
        if docname is not None:
            url = "%s/help/%s.html" % (url, docname)
        return E.a(text, href=url, **kw)
Ejemplo n.º 23
0
    def get_help_url(self, docname=None, text=None, **kw):
        """Generate a link to the help section of the documentation (whose
        base is defined by :attr:`lino.core.site.Site.help_url`)

        Usage example::

            help = ar.get_help_url("foo", target='_blank')
            msg = _("You have a problem with foo."
                    "Please consult %(help)s "
                    "or ask your system administrator.")
            msg %= dict(help=E.tostring(help))
            kw.update(message=msg, alert=True)

        The :ref:`lino.tutorial.pisa` tutorial shows a resulting message
        generated by the print action.

        """
        if text is None:
            text = unicode(_("the documentation"))
        url = settings.SITE.help_url
        if docname is not None:
            url = "%s/help/%s.html" % (url, docname)
        return E.a(text, href=url, **kw)
Ejemplo n.º 24
0
def table2html(ar, as_main=True):
    """Represent the given table request as an HTML table.

    `ar` is the request to be rendered, an instance of
    :class:`lino.core.tablerequest.TableRequest`.

    The returned HTML enclosed in a ``<div>`` tag and generated using
    :mod:`lino.utils.xmlgen.html`.

    If `as_main` is True, include additional elements such as a paging
    toolbar. (This argument is currently being ignored.)

    """
    as_main = True
    t = xghtml.Table()
    t.attrib.update(class_="table table-striped table-hover")
    if ar.limit is None:
        ar.limit = PLAIN_PAGE_LENGTH
    pglen = ar.limit
    if ar.offset is None:
        page = 1
    else:
        """
        (assuming pglen is 5)
        offset page
        0      1
        5      2
        """
        page = int(old_div(ar.offset, pglen)) + 1

    ar.dump2html(t, ar.sliced_data_iterator)
    if not as_main:
        url = ar.get_request_url()  # open in own window
        return E.div(E.a(ar.get_title(), href=url), t.as_element())

    buttons = []
    kw = dict()
    kw = {}
    if pglen != PLAIN_PAGE_LENGTH:
        kw[constants.URL_PARAM_LIMIT] = pglen

    if page > 1:
        kw[constants.URL_PARAM_START] = pglen * (page - 2)
        prev_url = ar.get_request_url(**kw)
        kw[constants.URL_PARAM_START] = 0
        first_url = ar.get_request_url(**kw)
    else:
        prev_url = None
        first_url = None
    buttons.append(('<<', _("First page"), first_url))
    buttons.append(('<', _("Previous page"), prev_url))

    next_start = pglen * page
    if next_start < ar.get_total_count():
        kw[constants.URL_PARAM_START] = next_start
        next_url = ar.get_request_url(**kw)
        last_page = int(old_div((ar.get_total_count() - 1), pglen))
        kw[constants.URL_PARAM_START] = pglen * last_page
        last_url = ar.get_request_url(**kw)
    else:
        next_url = None
        last_url = None
    buttons.append(('>', _("Next page"), next_url))
    buttons.append(('>>', _("Last page"), last_url))

    return E.div(buttons2pager(buttons), t.as_element())
Ejemplo n.º 25
0
 def image(self, ar):
     url = self.get_image_url(ar)
     return E.a(E.img(src=url, width="100%"), href=url, target="_blank")
Ejemplo n.º 26
0
def table2html(ar, as_main=True):
    """Represent the given table request as an HTML table.

    `ar` is the request to be rendered, an instance of
    :class:`lino.core.tablerequest.TableRequest`.

    The returned HTML enclosed in a ``<div>`` tag and generated using
    :mod:`lino.utils.xmlgen.html`.

    If `as_main` is True, include additional elements such as a paging
    toolbar. (This argument is currently being ignored.)

    """
    as_main = True
    t = xghtml.Table()
    t.attrib.update(class_="table table-striped table-hover")
    if ar.limit is None:
        ar.limit = PLAIN_PAGE_LENGTH
    pglen = ar.limit
    if ar.offset is None:
        page = 1
    else:
        """
        (assuming pglen is 5)
        offset page
        0      1
        5      2
        """
        page = int(old_div(ar.offset, pglen)) + 1

    ar.dump2html(t, ar.sliced_data_iterator)
    if not as_main:
        url = ar.get_request_url()  # open in own window
        return E.div(E.a(ar.get_title(), href=url), t.as_element())

    buttons = []
    kw = dict()
    kw = {}
    if pglen != PLAIN_PAGE_LENGTH:
        kw[constants.URL_PARAM_LIMIT] = pglen

    if page > 1:
        kw[constants.URL_PARAM_START] = pglen * (page - 2)
        prev_url = ar.get_request_url(**kw)
        kw[constants.URL_PARAM_START] = 0
        first_url = ar.get_request_url(**kw)
    else:
        prev_url = None
        first_url = None
    buttons.append(('<<', _("First page"), first_url))
    buttons.append(('<', _("Previous page"), prev_url))

    next_start = pglen * page
    if next_start < ar.get_total_count():
        kw[constants.URL_PARAM_START] = next_start
        next_url = ar.get_request_url(**kw)
        last_page = int(old_div((ar.get_total_count() - 1), pglen))
        kw[constants.URL_PARAM_START] = pglen * last_page
        last_url = ar.get_request_url(**kw)
    else:
        next_url = None
        last_url = None
    buttons.append(('>', _("Next page"), next_url))
    buttons.append(('>>', _("Last page"), last_url))

    return E.div(buttons2pager(buttons), t.as_element())
Ejemplo n.º 27
0
 def href(self, url, text):
     return E.a(text, href=url)
Ejemplo n.º 28
0
 def image(self, ar):
     url = self.get_image_url(ar)
     return E.a(E.img(src=url, width="100%"), href=url, target="_blank")
Ejemplo n.º 29
0
 def href(self, url, text):
     #~ return '<a href="%s">%s</a>' % (url,text)
     return E.a(text, href=url)
Ejemplo n.º 30
0
 def href(self, url, text):
     return E.a(text, href=url)