Ejemplo n.º 1
0
Archivo: fr.py Proyecto: DarioGT/lino
 def word2html(cls, w):
     hfr = w.text
     if w.haspire:
         hfr = "*" + hfr
     if Verbe.is_of_this_type(w) and w.form is not None:
         pronom = PRONOMS[w.form]
         if pronom[-1] == 'e' and cls.starts_with_vowel(w):
             pronom = pronom[:-1]
             #~ return u"%s'<b>%s</b>" % (pronom,hfr)
             yield pronom
             yield "'"
             yield E.b(hfr)
             return
         #~ return u"%s <b>%s</b>" % (pronom,hfr)
         yield pronom
         yield " "
         yield E.b(hfr)
         return
     if w.type and w.gender:
         #~ return u"<b>%s</b> (%s%s.)" % (hfr,w.type.text,w.gender)
         yield E.b(hfr)
         yield " (%s%s.)" % (w.type.text, w.gender)
         return
     if w.type and w.type.text:
         #~ return u"<b>%s</b> (%s)" % (hfr,w.type.text)
         yield E.b(hfr)
         yield " (%s)" % w.type.text
         return
     #~ return u"<b>%s</b>" % hfr
     yield E.b(hfr)
Ejemplo n.º 2
0
    def about_html(cls):

        body = []

        body.append(settings.SITE.welcome_html())

        #~ print "20121112 startup_time", settings.SITE.startup_time.date()
        def dtfmt(dt):
            if isinstance(dt, float):
                dt = datetime.datetime.fromtimestamp(dt)
                #~ raise ValueError("Expected float, go %r" % dt)
            return unicode(_("%(date)s at %(time)s")) % dict(
                date=dd.fdf(dt.date()),
                time=dt.time())

        items = []
        times = []
        value = settings.SITE.startup_time
        label = _("Server uptime")
        body.append(E.p(unicode(label), ' : ', E.b(dtfmt(value))))
        body.append(E.p(unicode(_("Source timestamps:"))))
        for src in ("lino", "lino_welfare", 'django', 'atelier'):
            label = src
            value = codetime('%s.*' % src)
            if value is not None:
                times.append((label, value))

        def mycmp(a, b):
            return cmp(b[1], a[1])
        times.sort(mycmp)
        for label, value in times:
            items.append(E.li(unicode(label), ' : ', E.b(dtfmt(value))))
        body.append(E.ul(*items))
        return E.div(*body, class_='htmlText')
Ejemplo n.º 3
0
Archivo: fr.py Proyecto: zhuangyan/lino
 def word2html(cls, w):
     hfr = w.text
     if w.haspire:
         hfr = "*" + hfr
     if Verbe.is_of_this_type(w) and w.form is not None:
         pronom = PRONOMS[w.form]
         if pronom[-1] == 'e' and cls.starts_with_vowel(w):
             pronom = pronom[:-1]
             #~ return u"%s'<b>%s</b>" % (pronom,hfr)
             yield pronom
             yield "'"
             yield E.b(hfr)
             return
         #~ return u"%s <b>%s</b>" % (pronom,hfr)
         yield pronom
         yield " "
         yield E.b(hfr)
         return
     if w.type and w.gender:
         #~ return u"<b>%s</b> (%s%s.)" % (hfr,w.type.text,w.gender)
         yield E.b(hfr)
         yield " (%s%s.)" % (w.type.text, w.gender)
         return
     if w.type and w.type.text:
         #~ return u"<b>%s</b> (%s)" % (hfr,w.type.text)
         yield E.b(hfr)
         yield " (%s)" % w.type.text
         return
     #~ return u"<b>%s</b>" % hfr
     yield E.b(hfr)
Ejemplo n.º 4
0
    def about_html(cls):

        body = []

        body.append(settings.SITE.welcome_html())

        #~ print "20121112 startup_time", settings.SITE.startup_time.date()
        def dtfmt(dt):
            if isinstance(dt, float):
                dt = datetime.datetime.fromtimestamp(dt)
                #~ raise ValueError("Expected float, go %r" % dt)
            return unicode(_("%(date)s at %(time)s")) % dict(
                date=dd.fdf(dt.date()), time=dt.time())

        items = []
        times = []
        value = settings.SITE.startup_time
        label = _("Server uptime")
        body.append(E.p(unicode(label), ' : ', E.b(dtfmt(value))))
        body.append(E.p(unicode(_("Source timestamps:"))))
        for src in ("lino", "lino_welfare", 'django', 'atelier'):
            label = src
            value = codetime('%s.*' % src)
            if value is not None:
                times.append((label, value))

        def mycmp(a, b):
            return cmp(b[1], a[1])

        times.sort(mycmp)
        for label, value in times:
            items.append(E.li(unicode(label), ' : ', E.b(dtfmt(value))))
        body.append(E.ul(*items))
        return E.div(*body, class_='htmlText')
Ejemplo n.º 5
0
 def get_change_desc_html(self, f, old, new):
     from lino.core.choicelists import ChoiceListField
     if isinstance(f, models.TextField):
         old = old or ''
         new = new or ''
         return E.li(
             E.b(f.verbose_name), " : ",
             E.pre('\n'.join(difflib.unified_diff(
                 old.splitlines(), new.splitlines(),
                 fromfile="before", tofile="after", lineterm=''))))
         
     if isinstance(f, models.DateTimeField):
         return
     if isinstance(f, models.ForeignKey):
         if old:
             old = f.rel.to.objects.get(pk=old)
         if new:
             new = f.rel.to.objects.get(pk=new)
     elif isinstance(f, ChoiceListField):
         if isinstance(old, six.string_types):
             old = f.choicelist.get_by_value(old)
         if isinstance(new, six.string_types):
             new = f.choicelist.get_by_value(new)
     else:
         old = obj2str(old)
         new = obj2str(new)
     return E.li(
         E.b(f.verbose_name), " : ",
         u"{0} --> {1}".format(old, new))
Ejemplo n.º 6
0
    def get_change_desc_html(self, f, old, new):
        from lino.core.choicelists import ChoiceListField
        if isinstance(f, models.TextField):
            old = old or ''
            new = new or ''
            return E.li(
                E.b(f.verbose_name), " : ",
                E.pre('\n'.join(
                    difflib.unified_diff(old.splitlines(),
                                         new.splitlines(),
                                         fromfile="before",
                                         tofile="after",
                                         lineterm=''))))

        if isinstance(f, models.DateTimeField):
            return
        if isinstance(f, models.ForeignKey):
            if old:
                old = f.rel.to.objects.get(pk=old)
            if new:
                new = f.rel.to.objects.get(pk=new)
        elif isinstance(f, ChoiceListField):
            if isinstance(old, six.string_types):
                old = f.choicelist.get_by_value(old)
            if isinstance(new, six.string_types):
                new = f.choicelist.get_by_value(new)
        else:
            old = obj2str(old)
            new = obj2str(new)
        return E.li(E.b(f.verbose_name), " : ",
                    u"{0} --> {1}".format(old, new))
Ejemplo n.º 7
0
    def about_html(cls):

        body = []

        body.append(settings.SITE.welcome_html())

        if settings.SITE.languages:
            body.append(E.p(str(_("Languages")) + ": " + ', '.join([
                lng.django_code for lng in settings.SITE.languages])))

        # print "20121112 startup_time", settings.SITE.startup_time.date()
        def dtfmt(dt):
            if isinstance(dt, float):
                dt = datetime.datetime.fromtimestamp(dt)
                # raise ValueError("Expected float, go %r" % dt)
            return str(_("%(date)s at %(time)s")) % dict(
                date=dd.fds(dt.date()),
                time=settings.SITE.strftime(dt.time()))

        value = settings.SITE.startup_time
        label = _("Server uptime")
        body.append(E.p(
            str(label), ' : ', E.b(dtfmt(value)),
            ' ({})'.format(settings.TIME_ZONE)))
        if settings.SITE.is_demo_site:
            s = str(_("This is a Lino demo site."))
            body.append(E.p(s))
        if settings.SITE.the_demo_date:
            s = _("We are running with simulated date set to {0}.").format(
                dd.fdf(settings.SITE.the_demo_date))
            body.append(E.p(s))
            
        body.append(E.p(str(_("Source timestamps:"))))
        items = []
        times = []
        packages = set(['lino', 'django', 'atelier'])
        for p in settings.SITE.installed_plugins:
            packages.add(p.app_name.split('.')[0])
        for src in packages:
            label = src
            value = codetime('%s.*' % src)
            if value is not None:
                times.append((label, value))

        times.sort(key=lambda x: x[1])
        for label, value in times:
            items.append(E.li(str(label), ' : ', E.b(dtfmt(value))))
        body.append(E.ul(*items))
        # return E.div(*body, class_='htmlText')
        return rt.html_text(E.div(*body))
Ejemplo n.º 8
0
Archivo: fr.py Proyecto: DarioGT/lino
    def present_word2html(cls, w, book):
        """
        Format word for "presentation" (usually the first column 
        in a table of new words).
        """
        hfr = w.text
        if w.haspire:
            hfr = "*" + hfr
        if Nom.is_of_this_type(w):
            if w.gender == 'pl':
                #~ return u"les <b>%s</b> (%s)" % (hfr,w.gender)
                yield "les "
                yield E.b(hfr)
                return
            #~ if w.defini and (w.text[0].lower() in u'aeiouyàéœ' or (w.text[0].lower() == 'h' and not w.haspire)):
            if w.defini and cls.starts_with_vowel(w):
                #~ return u"l'<b>%s</b> (%s)" % (hfr,w.gender)
                yield "l'"
                yield E.b(hfr)
                yield " (%s)" % w.gender
                return
            #~ art = w.get_article()
            #~ def get_article(self):
            if w.defini:
                articles = ['le', 'la']
            else:
                articles = ['un', 'une']
            if w.gender == 'm':
                #~ return u"%s <b>%s</b>" % (articles[0],hfr)
                yield articles[0]
                yield ' '
                yield E.b(hfr)
                return

            if w.gender == 'f':
                #~ return u"%s <b>%s</b>" % (articles[1],hfr)
                yield articles[1]
                yield ' '
                yield E.b(hfr)
                return

            #~ return u"%s <b>%s</b>" % (articles[0],hfr)
            #~ raise Exception("Unknown gender for Nom %s" % w)
            yield articles[0]
            yield ' '
            yield E.b(hfr)
            return
        for e in cls.word2html(w):
            yield e
Ejemplo n.º 9
0
Archivo: fr.py Proyecto: zhuangyan/lino
    def present_word2html(cls, w, book):
        """
        Format word for "presentation" (usually the first column 
        in a table of new words).
        """
        hfr = w.text
        if w.haspire:
            hfr = "*" + hfr
        if Nom.is_of_this_type(w):
            if w.gender == 'pl':
                #~ return u"les <b>%s</b> (%s)" % (hfr,w.gender)
                yield "les "
                yield E.b(hfr)
                return
            #~ if w.defini and (w.text[0].lower() in u'aeiouyàéœ' or (w.text[0].lower() == 'h' and not w.haspire)):
            if w.defini and cls.starts_with_vowel(w):
                #~ return u"l'<b>%s</b> (%s)" % (hfr,w.gender)
                yield "l'"
                yield E.b(hfr)
                yield " (%s)" % w.gender
                return
            #~ art = w.get_article()
            #~ def get_article(self):
            if w.defini:
                articles = ['le', 'la']
            else:
                articles = ['un', 'une']
            if w.gender == 'm':
                #~ return u"%s <b>%s</b>" % (articles[0],hfr)
                yield articles[0]
                yield ' '
                yield E.b(hfr)
                return

            if w.gender == 'f':
                #~ return u"%s <b>%s</b>" % (articles[1],hfr)
                yield articles[1]
                yield ' '
                yield E.b(hfr)
                return

            #~ return u"%s <b>%s</b>" % (articles[0],hfr)
            #~ raise Exception("Unknown gender for Nom %s" % w)
            yield articles[0]
            yield ' '
            yield E.b(hfr)
            return
        for e in cls.word2html(w):
            yield e
Ejemplo n.º 10
0
def body_subject_to_elems(ar, title, description):
    """Convert the given `title` and `description` to a list of HTML
    elements.

    Used by :mod:`lino.modlib.notify` and by :mod:`lino_cosi.lib.sales`

    """
    if description:
        elems = [E.p(E.b(title), E.br())]
        elems += rich_text_to_elems(ar, description)
        
    else:
        elems = [E.b(title)]
        # return E.span(self.title)
    return elems
Ejemplo n.º 11
0
def body_subject_to_elems(ar, title, description):
    """Convert the given `title` and `description` to a list of HTML
    elements.

    Used by :mod:`lino.modlib.notify` and by :mod:`lino_cosi.lib.sales`

    """
    if description:
        elems = [E.p(E.b(title), E.br())]
        elems += rich_text_to_elems(ar, description)

    else:
        elems = [E.b(title)]
        # return E.span(self.title)
    return elems
Ejemplo n.º 12
0
 def message_html(self, ar):
     from django.utils.translation import ugettext as _
     elems = []
     # elems += [_("Date"), dd.fds(self.transaction_date), " "]
     # elems += [_("Amount"), ' ', E.b(unicode(self.amount)), " "]
     # self.booking_date
     elems += self.message  # .splitlines()
     elems.append(E.br())
     # elems += [_("ref:"), ': ', self.ref, ' ']
     elems += [_("eref:"), ': ', self.eref]
     elems.append(E.br())
     elems += [E.b(self.txcd_text), ' ']
     elems += [_("Value date"), ': ', E.b(dd.fds(self.value_date)), " "]
     elems += [_("Booking date"), ': ', E.b(dd.fds(self.booking_date)), " "]
     return E.div(*elems)
Ejemplo n.º 13
0
 def message_html(self, ar):
     from django.utils.translation import ugettext as _
     elems = []
     # elems += [_("Date"), dd.fds(self.transaction_date), " "]
     # elems += [_("Amount"), ' ', E.b(unicode(self.amount)), " "]
     # self.booking_date
     elems += self.message  # .splitlines()
     elems.append(E.br())
     # elems += [_("ref:"), ': ', self.ref, ' ']
     elems += [_("eref:"), ': ', self.eref]
     elems.append(E.br())
     elems += [E.b(self.txcd_text), ' ']
     elems += [_("Value date"), ': ', E.b(dd.fds(self.value_date)), " "]
     elems += [_("Booking date"), ': ',
               E.b(dd.fds(self.booking_date)), " "]
     return E.div(*elems)
Ejemplo n.º 14
0
def welcome_messages(ar):
    """Yield messages for the welcome page."""

    Session = rt.modules.clocking.Session
    # Ticket = rt.modules.tickets.Ticket
    # TicketStates = rt.modules.tickets.TicketStates
    me = ar.get_user()

    busy_tickets = set()
    # your open sessions (i.e. those you are busy with)
    qs = Session.objects.filter(user=me, end_time__isnull=True)
    if qs.count() > 0:
        chunks = [E.b(unicode(_("You are busy with ")))]
        sep = None
        for ses in qs:
            if sep:
                chunks.append(sep)
            busy_tickets.add(ses.ticket.id)
            txt = unicode(ses.ticket)
            chunks.append(
                ar.obj2html(ses.ticket, txt, title=ses.ticket.summary))
            chunks += [
                ' (',
                ar.instance_action_button(
                    ses.end_session, EndTicketSession.label),
                ')']
            sep = ', '
        chunks.append('. ')
        yield E.p(*chunks)
Ejemplo n.º 15
0
    def workflow_buttons(obj, ar):
        #~ logger.info('20120930 workflow_buttons %r', obj)
        l = []
        if ar is not None:
            actor = ar.actor
            state = actor.get_row_state(obj)
            if state is not None:
                #~ l.append(E.b(unicode(state),style="vertical-align:middle;"))
                l.append(E.b(unicode(state)))
                #~ l.append(u" » ")
                #~ l.append(u" \u25b8 ")
                #~ l.append(u" \u2192 ")
                #~ sep = u" \u25b8 "
                sep = u" \u2192 "
            else:
                # logger.info('20150602 no state for %s in %s (%s)',
                #             obj, actor, actor.model)
                sep = ''

            for ba in actor.get_actions():
                if ba.action.show_in_workflow:
                    if actor.get_row_permission(obj, ar, state, ba):
                        l.append(sep)
                        l.append(ar.action_button(ba, obj))
                        sep = ' '
        return E.span(*l)
Ejemplo n.º 16
0
 def collect_summary(prefix, fk_qs):
     parts = []
     for fld, qs in fk_qs:
         if qs.count() > 0:
             parts.append("%d %s" % (qs.count(), str(fld.model._meta.verbose_name_plural)))
     if len(parts) != 0:
         items.append(E.li(", ".join(parts), " ", E.b(prefix)))
Ejemplo n.º 17
0
Archivo: base.py Proyecto: DarioGT/lino
 def word2html(cls, w, book):
     #~ return html2rst(w.html_fr_lesson()) + ' ' + w.pronounciation
     w = w.get_partner(cls.gender)
     #~ return '<b>%s</b>' % w.text + ' ' + w.get_pron_html()
     yield E.b(w.text)
     yield ' '
     yield w.get_pron_html()
Ejemplo n.º 18
0
    def workflow_buttons(obj, ar):
        #~ logger.info('20120930 workflow_buttons %r', obj)
        l = []
        if ar is not None:
            actor = ar.actor
            state = actor.get_row_state(obj)
            if state is not None:
                #~ l.append(E.b(unicode(state),style="vertical-align:middle;"))
                l.append(E.b(unicode(state)))
                #~ l.append(u" » ")
                #~ l.append(u" \u25b8 ")
                #~ l.append(u" \u2192 ")
                #~ sep = u" \u25b8 "
                sep = u" \u2192 "
            else:
                # logger.info('20150602 no state for %s in %s (%s)',
                #             obj, actor, actor.model)
                sep = ''

            for ba in actor.get_actions():
                if ba.action.show_in_workflow:
                    if actor.get_row_permission(obj, ar, state, ba):
                        l.append(sep)
                        l.append(ar.action_button(ba, obj))
                        sep = ' '
        return E.span(*l)
Ejemplo n.º 19
0
 def get_name_elems(self, ar):
     elems = [self.get_salutation(nominative=True), E.br()]
     if self.title:
         elems += [self.title, ' ']
     elems += [self.first_name, ' ',
               E.b(self.last_name)]
     return elems
Ejemplo n.º 20
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.º 21
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.º 22
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.º 23
0
Archivo: base.py Proyecto: cuchac/lino
 def word2html(cls, w, book):
     #~ return html2rst(w.html_fr_lesson()) + ' ' + w.pronounciation
     w = w.get_partner(cls.gender)
     #~ return '<b>%s</b>' % w.text + ' ' + w.get_pron_html()
     yield E.b(w.text)
     yield ' '
     yield w.get_pron_html()
Ejemplo n.º 24
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.º 25
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.º 26
0
 def what(self, obj, ar):
     chunks = []
     if obj.name:
         chunks += [E.b(str(obj)), E.br()]
     chunks += sepjoin(obj.features.all())
     #~ if obj.url:
     #~ chunks += [E.br(),E.a(_("More"),href=obj.url)]
     return E.p(*chunks)
Ejemplo n.º 27
0
 def what(self, obj, ar):
     chunks = []
     if obj.name:
         chunks += [E.b(unicode(obj)), E.br()]
     chunks += sepjoin(obj.features.all())
     #~ if obj.url:
         #~ chunks += [E.br(),E.a(_("More"),href=obj.url)]
     return E.p(*chunks)
Ejemplo n.º 28
0
    def about_html(cls):

        body = []

        body.append(settings.SITE.welcome_html())

        if settings.SITE.languages:
            body.append(
                E.p(str(_("Languages")) + ": " + ", ".join([lng.django_code for lng in settings.SITE.languages]))
            )

        # print "20121112 startup_time", settings.SITE.startup_time.date()
        def dtfmt(dt):
            if isinstance(dt, float):
                dt = datetime.datetime.fromtimestamp(dt)
                # raise ValueError("Expected float, go %r" % dt)
            return str(_("%(date)s at %(time)s")) % dict(date=dd.fds(dt.date()), time=settings.SITE.strftime(dt.time()))

        value = settings.SITE.startup_time
        label = _("Server uptime")
        body.append(E.p(str(label), " : ", E.b(dtfmt(value)), " ({})".format(settings.TIME_ZONE)))
        if settings.SITE.is_demo_site:
            s = str(_("This is a Lino demo site."))
            body.append(E.p(s))
        if settings.SITE.the_demo_date:
            s = _("We are running with simulated date set to {0}.").format(dd.fdf(settings.SITE.the_demo_date))
            body.append(E.p(s))

        body.append(E.p(str(_("Source timestamps:"))))
        items = []
        times = []
        packages = set(["lino", "django", "atelier"])
        for p in settings.SITE.installed_plugins:
            packages.add(p.app_name.split(".")[0])
        for src in packages:
            label = src
            value = codetime("%s.*" % src)
            if value is not None:
                times.append((label, value))

        times.sort(key=lambda x: x[1])
        for label, value in times:
            items.append(E.li(str(label), " : ", E.b(dtfmt(value))))
        body.append(E.ul(*items))
        # return E.div(*body, class_='htmlText')
        return rt.html_text(E.div(*body))
Ejemplo n.º 29
0
 def show_state():
     l.append(sep)
     #~ l.append(E.b(unicode(state),style="vertical-align:middle;"))
     # if state.button_text:
     #     l.append(E.b(state.button_text))
     # else:
     #     l.append(E.b(str(state)))
     l.append(E.b(str(state)))
Ejemplo n.º 30
0
 def show_state():
     l.append(sep)
     #~ l.append(E.b(unicode(state),style="vertical-align:middle;"))
     # if state.button_text:
     #     l.append(E.b(state.button_text))
     # else:
     #     l.append(E.b(str(state)))
     l.append(E.b(str(state)))
Ejemplo n.º 31
0
    def about_html(cls):

        body = []

        body.append(settings.SITE.welcome_html())

        if settings.SITE.languages:
            body.append(E.p(str(_("Languages")) + ": " + ', '.join([
                lng.django_code for lng in settings.SITE.languages])))

        #~ print "20121112 startup_time", settings.SITE.startup_time.date()
        def dtfmt(dt):
            if isinstance(dt, float):
                dt = datetime.datetime.fromtimestamp(dt)
                #~ raise ValueError("Expected float, go %r" % dt)
            return str(_("%(date)s at %(time)s")) % dict(
                date=dd.fdf(dt.date()),
                time=dt.time())

        items = []
        times = []
        value = settings.SITE.startup_time
        label = _("Server uptime")
        body.append(E.p(str(label), ' : ', E.b(dtfmt(value))))
        if settings.SITE.is_demo_site:
            s = str(_("This is a Lino demo site."))
            body.append(E.p(s))
        if settings.SITE.the_demo_date:
            s = _("We are running with simulated date set to {0}.").format(
                dd.fdf(settings.SITE.the_demo_date))
            body.append(E.p(s))
        body.append(E.p(str(_("Source timestamps:"))))
        for src in ("lino", "lino_welfare", 'django', 'atelier'):
            label = src
            value = codetime('%s.*' % src)
            if value is not None:
                times.append((label, value))

        def mycmp(a, b):
            return cmp(b[1], a[1])
        times.sort(mycmp)
        for label, value in times:
            items.append(E.li(str(label), ' : ', E.b(dtfmt(value))))
        body.append(E.ul(*items))
        return E.div(*body, class_='htmlText')
Ejemplo n.º 32
0
 def collect_summary(prefix, fk_qs):
     parts = []
     for fld, qs in fk_qs:
         if qs.count() > 0:
             parts.append(
                 "%d %s" %
                 (qs.count(), str(fld.model._meta.verbose_name_plural)))
     if len(parts) != 0:
         items.append(E.li(', '.join(parts), ' ', E.b(prefix)))
Ejemplo n.º 33
0
Archivo: base.py Proyecto: cuchac/lino
 def word2html(cls, w, book):
     if not w.adjectif:
         yield ''
         return
     w = w.adjectif
     w = w.get_partner(cls.gender)
     #~ return '<b>%s</b>' % w.text + ' ' + w.get_pron_html()
     yield E.b(w.text)
     yield ' '
     yield w.get_pron_html()
Ejemplo n.º 34
0
Archivo: base.py Proyecto: DarioGT/lino
 def word2html(cls, w, book):
     if not w.adjectif:
         yield ''
         return
     w = w.adjectif
     w = w.get_partner(cls.gender)
     #~ return '<b>%s</b>' % w.text + ' ' + w.get_pron_html()
     yield E.b(w.text)
     yield ' '
     yield w.get_pron_html()
Ejemplo n.º 35
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.º 36
0
    def question(self, obj, ar):
        if obj.question.number:
            txt = obj.question.NUMBERED_TITLE_FORMAT % (obj.question.number, obj.question.title)
        else:
            txt = obj.question.title

        attrs = dict(class_="htmlText")
        if obj.question.details:
            attrs.update(title=obj.question.details)
        if obj.question.is_heading:
            txt = E.b(txt, **attrs)
        return E.span(txt, **attrs)
Ejemplo n.º 37
0
 def remote_html(self, ar):
     elems = []
     elems += [self.remote_account, " "]
     elems += ["(BIC:", self.remote_bic, ")"]
     elems.append(E.br())
     elems += [E.b(self.remote_owner), ", "]
     elems.append(E.br())
     elems += [" / ".join(self.remote_owner_address.splitlines()), ", "]
     elems += [self.remote_owner_postalcode, " "]
     elems += [self.remote_owner_city, " "]
     elems += [self.remote_owner_country_code]
     return E.div(*elems)
Ejemplo n.º 38
0
 def remote_html(self, ar):
     elems = []
     elems += [self.remote_account, " "]
     elems += ["(BIC:", self.remote_bic, ")"]
     elems.append(E.br())
     elems += [E.b(self.remote_owner), ", "]
     elems.append(E.br())
     elems += [" / ".join(self.remote_owner_address.splitlines()), ", "]
     elems += [self.remote_owner_postalcode, " "]
     elems += [self.remote_owner_city, " "]
     elems += [self.remote_owner_country_code]
     return E.div(*elems)
Ejemplo n.º 39
0
    def question(self, obj, ar):
        if obj.question.number:
            txt = obj.question.NUMBERED_TITLE_FORMAT % (obj.question.number,
                                                        obj.question.title)
        else:
            txt = obj.question.title

        attrs = dict(class_="htmlText")
        if obj.question.details:
            attrs.update(title=obj.question.details)
        if obj.question.is_heading:
            txt = E.b(txt, **attrs)
        return E.span(txt, **attrs)
Ejemplo n.º 40
0
 def get_overview_elems(self, ar):
     if ar is None:
         return []
     elems = super(Client, self).get_overview_elems(ar)
     # elems.append(E.br())
     elems.append(ar.get_data_value(self, 'eid_info'))
     notes = []
     for note in rt.modules.notes.Note.objects.filter(
             project=self, important=True):
         notes.append(E.b(ar.obj2html(note, note.subject)))
     if len(notes):
         notes = join_elems(notes, " / ")
         elems += E.p(*notes, class_="lino-info-red")
     return elems
Ejemplo n.º 41
0
    def get_mti_buttons(self, ar):
        """"""
        elems = []
        if ar is None:
            return elems
        sep = None
        for m in self._mtinav_models:
            item = None
            if self.__class__ is m:
                item = [E.b(str(m._meta.verbose_name))]
            else:
                obj = mti.get_child(self, m)
                if obj is None:
                    # parent link field
                    p = m._meta.parents.get(self.__class__, None)
                    if p is not None:
                        item = [str(m._meta.verbose_name)]
                        k = InsertChild.name_prefix + m.__name__.lower()
                        ba = ar.actor.get_action_by_name(k)
                        if ba and ba.get_row_permission(ar, self, None):
                            # btn = ar.row_action_button(self, ba, _("+"))
                            btn = ar.row_action_button(self, ba, _(u"➕"))
                            # Heavy Plus Sign U+2795
                            # btn = ar.row_action_button(self, ba,
                            #                            icon_name='add')
                            item += [" [", btn, "]"]

                else:
                    item = [ar.obj2html(obj, m._meta.verbose_name)]
                    # no DeleteChild for my parents
                    if self.__class__ in m.mro():
                        k = DeleteChild.name_prefix + m.__name__.lower()
                        ba = ar.actor.get_action_by_name(k)
                        if ba and ba.get_row_permission(ar, self, None):
                            # btn = ar.row_action_button(self, ba, _("-"))
                            btn = ar.row_action_button(self, ba, _(u"❌"))
                            # Cross Mark U+274C
                            item += [" [", btn, "]"]

            if item is not None:
                if sep is None:
                    sep = ', '
                else:
                    elems.append(sep)
                elems += item
        return elems
Ejemplo n.º 42
0
    def get_mti_buttons(self, ar):
        """"""
        elems = []
        if ar is None:
            return elems
        sep = None
        for m in self._mtinav_models:
            item = None
            if self.__class__ is m:
                item = [E.b(str(m._meta.verbose_name))]
            else:
                obj = mti.get_child(self, m)
                if obj is None:
                    # parent link field
                    p = m._meta.parents.get(self.__class__, None)
                    if p is not None:
                        item = [str(m._meta.verbose_name)]
                        k = InsertChild.name_prefix + m.__name__.lower()
                        ba = ar.actor.get_action_by_name(k)
                        if ba and ba.get_row_permission(ar, self, None):
                            # btn = ar.row_action_button(self, ba, _("+"))
                            btn = ar.row_action_button(self, ba, _(u"➕"))
                            # Heavy Plus Sign U+2795
                            # btn = ar.row_action_button(self, ba,
                            #                            icon_name='add')
                            item += [" [", btn, "]"]

                else:
                    item = [ar.obj2html(obj, m._meta.verbose_name)]
                    # no DeleteChild for my parents
                    if self.__class__ in m.mro():
                        k = DeleteChild.name_prefix + m.__name__.lower()
                        ba = ar.actor.get_action_by_name(k)
                        if ba and ba.get_row_permission(ar, self, None):
                            # btn = ar.row_action_button(self, ba, _("-"))
                            btn = ar.row_action_button(self, ba, _(u"❌"))
                            # Cross Mark U+274C
                            item += [" [", btn, "]"]

            if item is not None:
                if sep is None:
                    sep = ', '
                else:
                    elems.append(sep)
                elems += item
        return elems
Ejemplo n.º 43
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.º 44
0
 def answer_buttons(self, obj, ar):
     l = []
     pv = dict(question=obj.question)
     ia = obj.response.toggle_choice
     for c in obj.question.get_choiceset().choices.all():
         pv.update(choice=c)
         text = unicode(c)
         try:
             AnswerChoice.objects.get(**pv)
             text = [E.b('[', text, ']')]
         except AnswerChoice.DoesNotExist:
             pass
         request_kwargs = dict(action_param_values=pv)
         e = ar.instance_action_button(
             ia, text, request_kwargs=request_kwargs,
             style="text-decoration:none")
         l.append(e)
     return E.p(*join_elems(l))
Ejemplo n.º 45
0
    def eid_info(self, ar):
        "Display some information about the eID card."
        if ar is None:
            return ''
        must_read = False
        attrs = dict(class_="lino-info")
        elems = []
        if self.card_number:
            elems += [
                "%s %s (%s)" %
                (ugettext("Card no."), self.card_number, self.card_type)
            ]
            if self.card_issuer:
                elems.append(", %s %s" %
                             (ugettext("issued by"), self.card_issuer))
                #~ card_issuer = _("issued by"),
            if self.card_valid_until is not None:
                valid = ", %s %s %s %s" % (
                    ugettext("valid from"), dd.dtos(self.card_valid_from),
                    ugettext("until"), dd.dtos(self.card_valid_until))
                if self.card_valid_until < dd.today():
                    must_read = True
                    elems.append(E.b(valid))
                    elems.append(E.br())
                else:
                    elems.append(valid)

            else:
                must_read = True
        else:
            must_read = True
        if must_read:
            msg = _("Must read eID card!")
            if config:
                elems.append(
                    ar.instance_action_button(self.read_beid,
                                              msg,
                                              icon_name=None))
            else:
                elems.append(msg)
            # same red as in lino.css for .x-grid3-row-red td
            # ~ attrs.update(style="background-color:#FA7F7F; padding:3pt;")
            attrs.update(class_="lino-info-red")
        return E.div(*elems, **attrs)
Ejemplo n.º 46
0
    def answer_buttons(self, obj, ar):
        # assert isinstance(obj, Answer)
        cs = obj.question.get_choiceset()
        if cs is None:
            return ''

        elems = []
        pv = dict(question=obj.question)

        # ia = obj.response.toggle_choice
        sar = obj.response.toggle_choice.request_from(ar)
        if False:  # since 20170129
            ba = Responses.actions.toggle_choice
            if ba is None:
                raise Exception("No toggle_choice on {0}?".format(ar.actor))
            sar = ba.request_from(ar)

            # print("20150203 answer_buttons({0})".format(sar))

            # if the response is registered, just display the choice, no
            # toggle buttons since answer cannot be toggled:
            # 20151211
            sar.selected_rows = [obj.response]

        if not sar.get_permission():
            return str(obj)

        AnswerChoice = rt.modules.polls.AnswerChoice
        for c in cs.choices.all():
            pv.update(choice=c)
            text = str(c)
            qs = AnswerChoice.objects.filter(response=obj.response, **pv)
            if qs.count() == 1:
                text = [E.b('[', text, ']')]
            elif qs.count() == 0:
                pass
            else:
                raise Exception("Oops: %s returned %d rows." %
                                (qs.query, qs.count()))
            sar.set_action_param_values(**pv)
            e = sar.ar2button(obj.response, text, style="text-decoration:none")
            elems.append(e)
        return E.span(*join_elems(elems), class_="htmlText")
Ejemplo n.º 47
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.º 48
0
 def workflow_buttons(self, obj, ar):
     #~ logger.info('20120930 workflow_buttons %r', obj)
     actor = ar.actor
     #~ print 20120621 , actor,  self
     #~ print 20120618, ar
     l = []
     state = actor.get_row_state(obj)
     if state:
         #~ l.append(E.b(unicode(state),style="vertical-align:middle;"))
         l.append(E.b(unicode(state)))
         #~ l.append(u" » ")
         #~ l.append(u" \u25b8 ")
         #~ l.append(u" \u2192 ")
     #~ sep = u" \u25b8 "
     sep = u" \u2192 "
     for ba in ar.actor.get_workflow_actions(ar, obj):
         l.append(sep)
         l.append(ar.action_button(ba, obj))
         sep = ' '
     return E.p(*l)
Ejemplo n.º 49
0
    def eid_info(self, ar):
        must_read = False
        attrs = dict(class_="lino-info")
        elems = []
        if self.card_number:
            elems += ["%s %s (%s)" %
                      (ugettext("Card no."), self.card_number, self.card_type)]
            if self.card_issuer:
                elems.append(", %s %s" %
                             (ugettext("issued by"), self.card_issuer))
                #~ card_issuer = _("issued by"),
            if self.card_valid_until is not None:
                valid = ", %s %s %s %s" % (
                    ugettext("valid from"), dd.dtos(self.card_valid_from),
                    ugettext("until"), dd.dtos(self.card_valid_until))
                if self.card_valid_until < datetime.date.today():
                    must_read = True
                    elems.append(E.b(valid))
                    elems.append(E.br())
                else:
                    elems.append(valid)

            else:
                must_read = True
        else:
            must_read = True
        if must_read:
            msg = _("Must read eID card!")
            #~ if settings.SITE.use_eid_jslib or settings.SITE.use_eidreader:
            if config:
                #~ ba = cls.get_action_by_name('read_beid')
                #~ elems.append(ar.action_button(ba,self,_("Must read eID card!")))
                elems.append(ar.instance_action_button(
                    self.read_beid, msg, icon_name=None))
            else:
                elems.append(msg)
            # same red as in lino.css for .x-grid3-row-red td
            # ~ attrs.update(style="background-color:#FA7F7F; padding:3pt;")
            attrs.update(class_="lino-info-red")
        return E.div(*elems, **attrs)
Ejemplo n.º 50
0
    def get_slave_summary(self, obj, ar):
        sar = self.request(master_instance=obj)
        elems = []
        # n = sar.get_total_count()
        # if n == 0:
        #     elems += [_("Not member of any household."), E.br()]
        # else:

        items = []
        for m in sar.data_iterator:
            
            args = (unicode(m.role), _(" in "),
                    ar.obj2html(m.household))
            if m.primary:
                items.append(E.li(E.b("\u2611 ", *args)))
            else:
                btn = m.set_primary.as_button_elem(
                    ar, "\u2610 ", style="text-decoration:none;")
                items.append(E.li(btn, *args))
        if len(items) > 0:
            elems += [_("%s is") % obj]
            elems.append(E.ul(*items))
        if False:
            elems += [
                E.br(), ar.instance_action_button(obj.create_household)]
        else:
            elems += [E.br(), _("Create a household"), ' : ']
            Type = rt.modules.households.Type
            Person = dd.resolve_model(config.person_model)
            T = Person.get_default_table()
            ba = T.get_action_by_name('create_household')
            buttons = []
            for t in Type.objects.all():
                apv = dict(type=t, head=obj)
                sar = ar.spawn(ba,  # master_instance=obj,
                               selected_rows=[obj],
                               action_param_values=apv)
                buttons.append(ar.href_to_request(sar, unicode(t)))
            elems += join_elems(buttons, sep=' / ')
        return E.div(*elems)
Ejemplo n.º 51
0
    def eid_info(self, ar):
        "Display some information about the eID card."
        if ar is None:
            return ''
        must_read = False
        attrs = dict(class_="lino-info")
        elems = []
        if self.card_number:
            elems += ["%s %s (%s)" %
                      (ugettext("Card no."), self.card_number, self.card_type)]
            if self.card_issuer:
                elems.append(", %s %s" %
                             (ugettext("issued by"), self.card_issuer))
                #~ card_issuer = _("issued by"),
            if self.card_valid_until is not None:
                valid = ", %s %s %s %s" % (
                    ugettext("valid from"), dd.dtos(self.card_valid_from),
                    ugettext("until"), dd.dtos(self.card_valid_until))
                if self.card_valid_until < dd.today():
                    must_read = True
                    elems.append(E.b(valid))
                    elems.append(E.br())
                else:
                    elems.append(valid)

            else:
                must_read = True
        else:
            must_read = True
        if must_read:
            msg = _("Must read eID card!")
            if config:
                elems.append(ar.instance_action_button(
                    self.read_beid, msg, icon_name=None))
            else:
                elems.append(msg)
            # same red as in lino.css for .x-grid3-row-red td
            # ~ attrs.update(style="background-color:#FA7F7F; padding:3pt;")
            attrs.update(class_="lino-info-red")
        return E.div(*elems, **attrs)
Ejemplo n.º 52
0
    def get_slave_summary(self, obj, ar):
        sar = self.request(master_instance=obj)
        elems = []
        # n = sar.get_total_count()
        # if n == 0:
        #     elems += [_("Not member of any household."), E.br()]
        # else:

        items = []
        for m in sar.data_iterator:
            
            args = (unicode(m.role), _(" in "),
                    ar.obj2html(m.household))
            if m.primary:
                items.append(E.li(E.b("\u2611 ", *args)))
            else:
                btn = m.set_primary.as_button_elem(
                    ar, "\u2610 ", style="text-decoration:none;")
                items.append(E.li(btn, *args))
        if len(items) > 0:
            elems += [_("%s is") % obj]
            elems.append(E.ul(*items))
        if False:
            elems += [
                E.br(), ar.instance_action_button(obj.create_household)]
        else:
            elems += [E.br(), _("Create a household"), ' : ']
            Type = rt.modules.households.Type
            Person = dd.resolve_model(config.person_model)
            T = Person.get_default_table()
            ba = T.get_action_by_name('create_household')
            buttons = []
            for t in Type.objects.all():
                apv = dict(type=t, head=obj)
                sar = ar.spawn(ba,  # master_instance=obj,
                               action_param_values=apv)
                buttons.append(ar.href_to_request(sar, unicode(t)))
            elems += join_elems(buttons, sep=' / ')
        return E.div(*elems)
Ejemplo n.º 53
0
 def get_name_elems(self, ar):
     elems = []
     if self.prefix:
         elems += [self.prefix, ' ']
     elems += [E.b(self.name)]
     return elems
Ejemplo n.º 54
0
 def get_name_elems(self, ar):
     elems = [self.get_salutation(nominative=True), ' ', self.title, E.br()]
     elems += [self.first_name, ' ', E.b(self.last_name)]
     return elems
Ejemplo n.º 55
0
 def get_name_elems(self, ar):
     return [E.b(self.name)]
Ejemplo n.º 56
0
 def where(self, obj, ar):
     if obj.place is not None:
         return E.p(str(obj.place), ' ', E.b(str(obj.place.city)))
     # remember: "von Ans nach Eupen und nicht andersrum"
     return E.p(*sepjoin(obj.stages.order_by('seqno'), ' -- '))