def show_story(self, ar, story, stripped=True, **kwargs): """Render the given story as reStructuredText to stdout.""" from lino.core.actors import Actor from lino.core.tables import TableRequest from lino.core.requests import ActionRequest try: for item in forcetext(story): if iselement(item): print(to_rst(item, stripped)) elif isinstance(item, type) and issubclass(item, Actor): ar = item.default_action.request(parent=ar) self.show_table(ar, stripped=stripped, **kwargs) elif isinstance(item, DashboardItem): self.show_story( ar, item.render(ar), stripped, **kwargs) elif isinstance(item, TableRequest): self.show_table(item, stripped=stripped, **kwargs) # print(item.table2rst(*args, **kwargs)) elif isinstance(item, ActionRequest): # example : courses.StatusReport in dashboard assert item.renderer is not None self.show_story(ar, item.actor.get_story(None, ar), **kwargs) elif isiterable(item): self.show_story(ar, item, stripped, **kwargs) # for i in self.show_story(ar, item, *args, **kwargs): # print(i) else: raise Exception("Cannot handle %r" % item) except Warning as e: print(e)
def show_story(self, ar, story, stripped=True, **kwargs): """Render the given story as an HTML element. Ignore `stripped` because it makes no sense in HTML. """ from lino.core.actors import Actor from lino.core.tables import TableRequest elems = [] try: for item in forcetext(story): if iselement(item): elems.append(item) elif isinstance(item, type) and issubclass(item, Actor): ar = item.default_action.request(parent=ar) elems.append(self.table2story(ar, **kwargs)) elif isinstance(item, TableRequest): assert item.renderer is not None elems.append(self.table2story(item, **kwargs)) elif isiterable(item): elems.append(self.show_story(ar, item, **kwargs)) # for i in self.show_story(item, *args, **kwargs): # yield i else: raise Exception("Cannot handle %r" % item) except Warning as e: elems.append(str(e)) return E.div(*elems)
def description(cls, fld, ar): if ar is None: return '' elems = [fld.help_text, E.br()] def x(label, lst, xlst): if lst is None: return spec = ' '.join([i.name or i.value for i in lst]) if xlst is not None: spec += ' ' + ' '.join([ "!"+(i.name or i.value) for i in xlst]) spec = spec.strip() if spec: elems.extend([label, " ", spec, E.br()]) x(_("columns"), fld.vat_columns, fld.exclude_vat_columns) x(_("regimes"), fld.vat_regimes, fld.exclude_vat_regimes) x(_("classes"), fld.vat_classes, fld.exclude_vat_classes) elems += [ fld.__class__.__name__, ' ', DCLABELS[fld.dc], "" if fld.both_dc else " only", E.br()] if fld.observed_fields: elems += [ _("Sum of"), ' ', ' '.join([i.name for i in fld.observed_fields]), E.br()] return E.div(*forcetext(elems))
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,) text = forcetext(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)
def href_button(self, url, text, title=None, icon_name=None, **kw): """Return an etree element 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,) text = forcetext(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)
def show_story(self, ar, story, stripped=True, **kwargs): """ Render the given story and return it as a raw HTML string. Ignore `stripped` because it makes no sense in HTML. """ from lino.core.actors import Actor from lino.core.tables import TableRequest from lino.core.requests import ActionRequest elems = [] try: for item in forcetext(story): # print("20180907 {}".format(item)) if isinstance(item, str): elems.append(item) elif iselement(item): # 20200501 elems.append(item) elems.append(tostring(item)) elif isinstance(item, type) and issubclass(item, Actor): ar = item.default_action.request(parent=ar) # 20200501 elems.extend(self.table2story(ar, **kwargs)) elems += [tostring(e) for e in self.table2story(ar, **kwargs)] elif isinstance(item, TableRequest): assert item.renderer is not None # 20200501 elems.extend(self.table2story(item, **kwargs)) elems += [tostring(e) for e in self.table2story(item, **kwargs)] elif isinstance(item, ActionRequest): # example : courses.StatusReport in dashboard assert item.renderer is not None # 20200501 elems.append(self.show_story(ar, item.actor.get_story(None, ar), **kwargs)) elems += [tostring(e) for e in self.show_story(ar, item.actor.get_story(None, ar), **kwargs)] elif isinstance(item, DashboardItem): elems.extend(item.render(ar, **kwargs)) # html = self.show_story(ar, item.render(ar), **kwargs) # elems.append(html) # # 20200501 if len(html): # # elems.append(E.div( # # html, # # CLASS="dashboard-item " + item.actor.actor_id.replace(".","-") if getattr(item, "actor", False) else "" # if html: # should always be a string, never a list # if hasattr(item, "actor"): # css_class = "dashboard-item " + item.actor.actor_id.replace(".","-") # else: # css_class = '' # elems.append('<div class="{}">{}</div>'.format(css_class, html)) elif isiterable(item): elems.append(self.show_story(ar, item, **kwargs)) # for i in self.show_story(item, *args, **kwargs): # yield i else: raise Exception("Cannot handle story item %r" % item) except Warning as e: elems.append(str(e)) # print("20180907 show_story in {} : {}".format(ar.renderer, elems)) # return E.div(*elems) if len(elems) else "" if len(elems): return "<div>{}</div>".format(''.join(elems)) return ""
def get_overview_elems(self, ar): elems = [] buttons = self.get_mti_buttons(ar) # buttons = join_elems(buttons, ', ') elems.append(E.p(str(_("See as ")), *buttons, style="font-size:8px;text-align:right;padding:3pt;")) elems += self.get_name_elems(ar) elems.append(E.br()) elems += join_elems(list(self.address_location_lines()), sep=E.br) elems = [ E.div(*forcetext(elems), style="font-size:18px;font-weigth:bold;" "vertical-align:bottom;text-align:middle")] elems += AddressOwner.get_overview_elems(self, ar) elems += ContactDetailsOwner.get_overview_elems(self, ar) return elems
def show_story(self, ar, story, stripped=True, **kwargs): """ Render the given story and return it as an HTML tree DIV element. Ignore `stripped` because it makes no sense in HTML. """ from lino.core.actors import Actor from lino.core.tables import TableRequest from lino.core.requests import ActionRequest elems = [] try: for item in forcetext(story): # print("20180907 {}".format(item)) if iselement(item): elems.append(item) elif isinstance(item, type) and issubclass(item, Actor): ar = item.default_action.request(parent=ar) elems.extend(self.table2story(ar, **kwargs)) elif isinstance(item, TableRequest): assert item.renderer is not None elems.extend(self.table2story(item, **kwargs)) elif isinstance(item, ActionRequest): # example : courses.StatusReport in dashboard assert item.renderer is not None elems.append( self.show_story(ar, item.actor.get_story(None, ar), **kwargs)) elif isinstance(item, DashboardItem): html = self.show_story(ar, item.render(ar), **kwargs) if html: elems.append( E.div(html, CLASS="dashboard-item " + item.actor.actor_id.replace(".", "-") if getattr(item, "actor", False) else "")) elif isiterable(item): elems.append(self.show_story(ar, item, **kwargs)) # for i in self.show_story(item, *args, **kwargs): # yield i else: raise Exception("Cannot handle %r" % item) except Warning as e: elems.append(str(e)) # print("20180907 show_story in {} : {}".format(ar.renderer, elems)) return E.div(*elems) if elems else ""
def get_table_summary(cls, mi, ar): if mi is None: return items = [] ar = ar.spawn(cls, master_instance=mi, is_on_main_actor=False) for obj in ar: chunks = [] for e in cls.get_handle().get_columns(): if e.hidden: continue v = e.field._lino_atomizer.full_value_from_object(obj, ar) if v: if len(chunks) > 0: chunks.append(", ") chunks += [e.get_label(), ": ", E.b(e.format_value(ar, v))] items.append(E.li(*forcetext(chunks))) return E.ul(*items)
def show_story(self, ar, story, stripped=True, **kwargs): """ Render the given story as an HTML element. Ignore `stripped` because it makes no sense in HTML. A story is an iterable of things that can be rendered. """ from lino.core.actors import Actor from lino.core.tables import TableRequest from lino.core.requests import ActionRequest elems = [] try: for item in forcetext(story): # print("20180907 {}".format(item)) if iselement(item): elems.append(item) elif isinstance(item, type) and issubclass(item, Actor): ar = item.default_action.request(parent=ar) elems.extend(self.table2story(ar, **kwargs)) elif isinstance(item, TableRequest): assert item.renderer is not None elems.extend(self.table2story(item, **kwargs)) elif isinstance(item, ActionRequest): # example : courses.StatusReport in dashboard assert item.renderer is not None elems.append(self.show_story(ar, item.actor.get_story(None, ar), **kwargs)) elif isinstance(item, DashboardItem): elems.append(E.div( self.show_story(ar, item.render(ar), **kwargs), CLASS="dashboard-item " + item.actor.actor_id.replace(".","-") if getattr(item, "actor", False) else "" )) elif isiterable(item): elems.append(self.show_story(ar, item, **kwargs)) # for i in self.show_story(item, *args, **kwargs): # yield i else: raise Exception("Cannot handle %r" % item) except Warning as e: elems.append(str(e)) # print("20180907 show_story in {} : {}".format(ar.renderer, elems)) return E.div(*elems) if elems else ""
def get_overview_elems(self, ar): elems = [] buttons = self.get_mti_buttons(ar) if len(buttons) > 1: # buttons = join_elems(buttons, ', ') elems.append( E.p(str(_("See as ")), *buttons, style="font-size:8px;text-align:right;padding:3pt;")) elems += self.get_name_elems(ar) elems.append(E.br()) elems += join_elems(list(self.address_location_lines()), sep=E.br) elems = [ E.div(*forcetext(elems), style="font-size:18px;font-weigth:bold;" "vertical-align:bottom;text-align:middle") ] elems += AddressOwner.get_overview_elems(self, ar) elems += ContactDetailsOwner.get_overview_elems(self, ar) return elems
def description(cls, fld, ar): if ar is None: return '' elems = [fld.help_text, E.br()] def x(label, lst, xlst): if lst is None: spec = '' else: lst = sorted([i.name or i.value for i in lst]) spec = ' '.join(lst) if xlst is not None: xlst = sorted(["!"+(i.name or i.value) for i in xlst]) spec += ' ' + ' '.join(xlst) spec = spec.strip() if spec: elems.extend([label, " ", spec, E.br()]) x(_("columns"), fld.vat_columns, fld.exclude_vat_columns) x(_("regimes"), fld.vat_regimes, fld.exclude_vat_regimes) x(_("classes"), fld.vat_classes, fld.exclude_vat_classes) elems += [ fld.__class__.__name__, ' ', DCLABELS[fld.dc], "" if fld.both_dc else " only", E.br()] if len(fld.observed_fields): names = [] for f in fld.observed_fields: n = f.value if f.value in fld.minus_observed_fields: n = "- " + n elif len(names) > 0: n = "+ " + n names.append(n) elems += ['= ', ' '.join(names), E.br()] return E.div(*forcetext(elems))
def overview(self, ar): if ar is None: return '' return E.div(*forcetext(self.get_overview_elems(ar)))
def mobile_item(self, ar): if ar is None: return '' return E.div(*forcetext(self.get_mobile_list_item_elems(ar)))