def format_as_html(self, ar): elems = [] if len(self.used_events) == 0: return E.p(gettext("No invoiced events")) # used_events = list(self.used_events) invoiced = self.used_events[self.invoiced_events:] coming = self.used_events[:self.invoiced_events] fmt = self.generator.get_invoiceable_event_formatter() # def fmt(ev): # return self.generator.format_invoiceable_event(ev, ar) if len(invoiced) > 0: elems.append("{0} : ".format(_("Invoiced"))) if len(invoiced) > MAX_SHOWN: elems.append("(...) ") invoiced = invoiced[-MAX_SHOWN:] elems += join_elems(map(fmt, invoiced), sep=', ') # s += ', '.join(map(fmt, invoiced)) # elems.append(E.p(s)) if len(coming) > 0: if len(elems) > 0: elems.append(E.br()) elems.append("{0} : ".format(_("Not invoiced"))) elems += join_elems(map(fmt, coming), sep=', ') # s += ', '.join(map(fmt, coming)) # elems.append(E.p(s)) return E.p(*elems)
def contact_details(self, ar): if ar is None: return '' sar = rt.models.phones.ContactDetailsByPartner.request(parent=ar, master_instance=self) items = [o.detail_type.as_html(o, sar) for o in sar if not o.end_date] return E.p(*join_elems(items, sep=', '))
def print_actions(self, ar): if ar is None: return '' elems = [] elems.append(ar.instance_action_button( self.write_xml)) return E.p(*join_elems(elems, sep=", "))
def print_actions(self, ar): if ar is None: return '' elems = [] elems.append(ar.instance_action_button( self.write_xml)) return E.p(*join_elems(elems, sep=", "))
def print_actions(self, ar): if ar is None: return '' elems = [] elems.append(ar.instance_action_button(self.print_presence_sheet)) elems.append(ar.instance_action_button(self.print_presence_sheet_html)) return E.p(*join_elems(elems, sep=", "))
def print_actions(self, ar): if ar is None: return '' elems = [] elems.append(ar.instance_action_button(self.print_labels)) elems.append(ar.instance_action_button(self.print_members)) elems.append(ar.instance_action_button(self.print_members_html)) return E.p(*join_elems(elems, sep=", "))
def print_actions(self, ar): if ar is None: return '' elems = [] elems.append(ar.instance_action_button( self.print_presence_sheet)) elems.append(ar.instance_action_button( self.print_presence_sheet_html)) return E.p(*join_elems(elems, sep=", "))
def welcome_messages(ar): locked_rows = list(Lockable.get_lockable_rows(ar.get_user())) if locked_rows: chunks = [ ugettext("You have a dangling edit lock on"), " "] chunks += join_elems( [ar.obj2html(obj) for obj in locked_rows], ", ") chunks.append('.') yield E.div(*chunks)
def f(obj, ar): if obj is None or ar is None: return E.div() try: utype = UploadType.objects.get(shortcut=i) except UploadType.DoesNotExist: return E.div() items = [] target = sender.modules.resolve(i.target) sar = ar.spawn_request(actor=target, master_instance=obj, known_values=dict(type=utype)) # param_values=dict(pupload_type=et)) n = sar.get_total_count() if n == 0: iar = target.insert_action.request_from(sar, master_instance=obj) btn = iar.ar2button( None, _("Upload"), icon_name="page_add", title=_("Upload a file from your PC to the server.")) items.append(btn) elif n == 1: after_show = ar.get_status() obj = sar.data_iterator[0] items.append( sar.renderer.href_button( sender.build_media_url(obj.file.name), _("show"), target='_blank', icon_name='page_go', style="vertical-align:-30%;", title=_("Open the uploaded file in a " "new browser window"))) after_show.update(record_id=obj.pk) items.append( sar.window_action_button( sar.ah.actor.detail_action, after_show, _("Edit"), icon_name='application_form', title=_("Edit metadata of the uploaded file."))) else: obj = sar.sliced_data_iterator[0] items.append( ar.obj2html(obj, pgettext("uploaded file", "Last"))) btn = sar.renderer.action_button(obj, sar, sar.bound_action, _("All {0} files").format(n), icon_name=None) items.append(btn) return E.div(*join_elems(items, ', '))
def pupil_info(self, ar): txt = self.pupil.get_full_name(nominative=True) if ar is None: elems = [txt] else: elems = [ar.obj2html(self.pupil, txt)] elems += [', '] elems += join_elems(list(self.pupil.address_location_lines()), sep=', ') return E.p(*elems)
def pupil_info(self, ar): txt = self.pupil.get_full_name(nominative=True) if ar is None: elems = [txt] else: elems = [ar.obj2html(self.pupil, txt)] elems += [', '] elems += join_elems( list(self.pupil.address_location_lines()), sep=', ') return E.p(*elems)
def print_actions(self, ar): if ar is None: return '' elems = [] elems.append(ar.instance_action_button( self.print_labels)) elems.append(ar.instance_action_button( self.print_members)) elems.append(ar.instance_action_button( self.print_members_html)) return E.p(*join_elems(elems, sep=", "))
def f(obj, ar): if obj is None or ar is None: return E.div() try: utype = UploadType.objects.get(shortcut=i) except UploadType.DoesNotExist: return E.div() items = [] target = sender.modules.resolve(i.target) sar = ar.spawn_request( actor=target, master_instance=obj, known_values=dict(type=utype)) # param_values=dict(pupload_type=et)) n = sar.get_total_count() if n == 0: iar = target.insert_action.request_from( sar, master_instance=obj) btn = iar.ar2button( None, _("Upload"), icon_name="page_add", title=_("Upload a file from your PC to the server.")) items.append(btn) elif n == 1: after_show = ar.get_status() obj = sar.data_iterator[0] items.append(sar.renderer.href_button( sender.build_media_url(obj.file.name), _("show"), target='_blank', icon_name='page_go', style="vertical-align:-30%;", title=_("Open the uploaded file in a " "new browser window"))) after_show.update(record_id=obj.pk) items.append(sar.window_action_button( sar.ah.actor.detail_action, after_show, _("Edit"), icon_name='application_form', title=_("Edit metadata of the uploaded file."))) else: obj = sar.sliced_data_iterator[0] items.append(ar.obj2html( obj, pgettext("uploaded file", "Last"))) btn = sar.renderer.action_button( obj, sar, sar.bound_action, _("All {0} files").format(n), icon_name=None) items.append(btn) return E.div(*join_elems(items, ', '))
def description(self, obj, ar): # pv = dict(start_date=obj.day, end_date=obj.day) # pv.update(observed_event=dd.PeriodEvents.active) # pv.update(user=ar.param_values.user) # sar = ar.spawn(MySessionsByDate, param_values=pv) elems = [obj.sar.ar2button(label=six.text_type(obj))] tickets = [ ar.obj2html(t, "#{0}".format(t.id), title=t.summary) for t in obj._tickets] if len(tickets) > 0: elems.append(" (") elems += join_elems(tickets, ', ') elems.append(")") return E.span(*elems)
def contact_details(self, ar): # if ar is None: # return '' items = [] for cdt in ContactDetailTypes.get_list_items(): if cdt.field_name: value = getattr(self, cdt.field_name) if value: items.append(cdt.format(value)) # items.append(ContactDetailTypes.email.format(self.email)) # # items.append(E.a(self.email, href="mailto:" + self.email)) # items.append(self.phone) # items.append(E.a(self.url, href=self.url)) return E.p(*join_elems(items, sep=', '))
def unused_get_table_summary(self, obj, ar): sar = self.request_from(ar, master_instance=obj) chunks = [] for mbr in sar: chunks.append(ar.obj2html(mbr, str(mbr.user))) chunks = join_elems(chunks, ', ') # sar = self.insert_action.request_from(sar) # if sar.get_permission(): # btn = sar.ar2button(None, _("Add member"), icon_name=None) # chunks.append(E.p((btn))) return E.div(*chunks)
def get_table_summary(self, obj, ar): if ar is None: return '' elems = [] # Button for starting a session from ticket sar = obj.start_session.request_from(ar) # if ar.renderer.is_interactive and sar.get_permission(): # if sar.get_permission(): # btn = sar.ar2button(obj) # elems += [E.p(btn)] # Active sessions: active_sessions = [] session_summaries = E.ul() qs = rt.models.working.Session.objects.filter(ticket=obj) tot = Duration() for ses in qs: d = ses.get_duration() if d is not None: tot += d if ses.end_time is None: txt = "{0} since {1}".format(ses.user, ses.start_time) lnk = ar.obj2html(ses, txt) sar = ses.end_session.request_from(ar) if sar.get_permission(): lnk = E.span(lnk, " ", sar.ar2button(ses)) active_sessions.append(lnk) if ses.summary: session_summaries.insert(0, E.li( "%s %s: %s"%(ses.user, naturaltime(datetime.combine( ses.start_date, ses.start_time)) ,ses.summary) ) ) # elems.append(E.p(_("Total {0} hours.").format(tot))) elems.append(E.p(_("Total %s hours.") % tot)) if len(active_sessions) > 0: elems.append(E.p( ensureUtf(_("Active sessions")), ": ", *join_elems(active_sessions, ', '))) if len(session_summaries) > 0: elems.append(session_summaries) return ar.html_text(E.div(*elems))
def get_table_summary(self, obj, ar): sar = self.request_from(ar, master_instance=obj) chunks = [] for mbr in sar: chunks.append(ar.obj2html(mbr, str(mbr.user))) chunks = join_elems(chunks, ', ') # sar = self.insert_action.request_from(sar) # if sar.get_permission(): # btn = sar.ar2button(None, _("Add member"), icon_name=None) # chunks.append(E.p((btn))) return E.div(*chunks)
def get_table_summary(self, obj, ar): if ar is None: return '' elems = [] # Button for starting a session from ticket sar = obj.start_session.request_from(ar) # if ar.renderer.is_interactive and sar.get_permission(): # if sar.get_permission(): # btn = sar.ar2button(obj) # elems += [E.p(btn)] # Active sessions: active_sessions = [] session_summaries = E.ul() qs = rt.models.working.Session.objects.filter(ticket=obj) tot = Duration() for ses in qs: d = ses.get_duration() if d is not None: tot += d if ses.end_time is None: txt = "{0} since {1}".format(ses.user, ses.start_time) lnk = ar.obj2html(ses, txt) sar = ses.end_session.request_from(ar) if sar.get_permission(): lnk = E.span(lnk, " ", sar.ar2button(ses)) active_sessions.append(lnk) if ses.summary: session_summaries.insert( 0, E.li("%s %s: %s" % (ses.user, naturaltime( datetime.combine(ses.start_date, ses.start_time)), ses.summary))) # elems.append(E.p(_("Total {0} hours.").format(tot))) elems.append(E.p(_("Total %s hours.") % tot)) if len(active_sessions) > 0: elems.append( E.p(ensureUtf(_("Active sessions")), ": ", *join_elems(active_sessions, ', '))) if len(session_summaries) > 0: elems.append(session_summaries) return ar.html_text(E.div(*elems))
def get_language_knowledge(self, *buttons): self.load_language_knowledge() lst = [] for lng in settings.SITE.languages: cl = self._cef_levels.get(lng.django_code, "---") lst.append("{}: {}".format(lng.name, cl)) # if cl is None: # lst.append("{}: {}".format(lng.name, )) # else: # lst.append("{}: {}".format(lng.name, cl)) if len(self._mother_tongues): lst.append("{}: {}".format( _("Mother tongues"), self.mother_tongues)) lst += buttons lst = join_elems(lst, E.br) return E.p(*lst)
def get_language_knowledge(self, *buttons): self.load_language_knowledge() lst = [] for lng in settings.SITE.languages: lst.append("{}: {}".format( lng.name, self._cef_levels.get(lng.django_code, NONE))) # if cl is None: # lst.append("{}: {}".format(lng.name, )) # else: # lst.append("{}: {}".format(lng.name, cl)) if len(self._mother_tongues): lst.append("{}: {}".format( _("Mother tongues"), self.mother_tongues)) lst += buttons lst = join_elems(lst, E.br) return E.p(*lst)
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 welcome_messages(ar): """Yield a message "Your stars are X, Y, ..." for the welcome page. This message mentions all starred objects of the requesting user and whose :attr:`nickname <Star.nickname>` is not empty. """ Star = rt.models.stars.Star qs = Star.objects.filter(user=ar.get_user()).exclude(nickname='') if qs.count() > 0: chunks = [str(_("Your stars are "))] chunks += join_elems([ ar.obj2html(obj.owner, obj.nickname or unicode(obj.owner)) for obj in qs]) chunks.append('.') yield E.span(*chunks)
def worked_tickets(self, obj, ar): # pv = dict(start_date=obj.day, end_date=obj.day) # pv.update(observed_event=dd.PeriodEvents.active) # pv.update(user=ar.param_values.user) # sar = ar.spawn(MySessionsByDate, param_values=pv) # elems = [obj.sar.ar2button(label=six.text_type(obj))] elems = [] tickets = [ ar.obj2html(t, "#{0}".format(t.id), title=t.summary) for t in obj._tickets ] if len(tickets) > 0: # elems.append(" (") elems += join_elems(tickets, ', ') # elems.append(")") return E.span(*elems)
def welcome_messages(ar): def fmt(model, pk): try: obj = model.objects.get(pk=pk) except model.DoesNotExist: return "{}{}".format(model.__name__, pk) return ar.obj2html(obj) up = ar.get_user().get_preferences() if len(up.locked_rows): chunks = [ ugettext("You have a dangling edit lock on"), " "] chunks += join_elems( [fmt(m, pk) for m, pk in up.locked_rows], ", ") chunks.append('.') yield E.span(*chunks)
def welcome_messages(ar): """Yield a message "Your stars are X, Y, ..." for the welcome page. This message mentions all starred objects of the requesting user and whose :attr:`nickname <Star.nickname>` is not empty. """ Star = rt.models.stars.Star qs = Star.objects.filter(user=ar.get_user()).exclude(nickname='') if qs.count() > 0: chunks = [str(_("Your stars are "))] chunks += join_elems([ ar.obj2html(obj.owner, obj.nickname or unicode(obj.owner)) for obj in qs]) chunks.append('.') yield E.span(*chunks)
def welcome_messages(ar): def fmt(model, pk): try: obj = model.objects.get(pk=pk) except model.DoesNotExist: return "{}{}".format(model.__name__, pk) return ar.obj2html(obj) up = ar.get_user().get_preferences() if len(up.locked_rows): chunks = [ ugettext("You have a dangling edit lock on"), " " ] chunks += join_elems( [fmt(m, pk) for m, pk in up.locked_rows], ", ") chunks.append('.') yield E.span(*chunks)
def my_description(cls, obj, ar): mi = ar.master_instance if mi is None: return lst = [obj.summary] tpl = u"{0}: {1}" # if obj.site is not None and obj.site == mi.interesting_for: # lst.append(_("site-specific")) if obj.site is not None: # and obj.site != mi.interesting_for: lst.append(tpl.format(ensureUtf(_("Site")), ensureUtf(obj.site))) if obj.user is not None: lst.append(tpl.format(ensureUtf(_("Author")), ensureUtf(obj.user))) # if obj.project is not None: # lst.append(tpl.format( # ensureUtf(_("Project")), ensureUtf(obj.project))) # if obj.topic is not None: # lst.append(tpl.format( # ensureUtf(_("Topic")), ensureUtf(obj.topic))) return E.p(*join_elems(lst, '. '))
def recent_comments(self, ar): if ar is None: return '' cls = rt.models.comments.CommentsByRFC sar = cls.request_from( ar, master_instance=self, limit=3) chunks = [] for com in sar.sliced_data_iterator: chunks.append(ar.obj2html(com, str(com))) chunks.append("...") chunks = join_elems(chunks, ', ') sar = cls.insert_action.request_from(sar) if sar.get_permission(): btn = sar.ar2button(None, _("Write comment"), icon_name=None) chunks.append(" ") chunks.append(btn) return E.div(*chunks)
def recent_comments(self, ar): if ar is None: return '' cls = rt.models.comments.CommentsByRFC sar = cls.request_from( ar, master_instance=self, limit=3) chunks = [] for com in sar.sliced_data_iterator: chunks.append(ar.obj2html(com, str(com))) chunks.append("...") chunks = join_elems(chunks, ', ') sar = cls.insert_action.request_from(sar) if sar.get_permission(): btn = sar.ar2button(None, _("Write comment"), icon_name=None) chunks.append(" ") chunks.append(btn) return E.div(*chunks)
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 my_description(cls, obj, ar): mi = ar.master_instance if mi is None: return lst = [obj.summary] tpl = u"{0}: {1}" # if obj.site is not None and obj.site == mi.interesting_for: # lst.append(_("site-specific")) if obj.site is not None: # and obj.site != mi.interesting_for: lst.append(tpl.format( ensureUtf(_("Site")), ensureUtf(obj.site))) if obj.user is not None: lst.append(tpl.format( ensureUtf(_("Author")), ensureUtf(obj.user))) # if obj.project is not None: # lst.append(tpl.format( # ensureUtf(_("Project")), ensureUtf(obj.project))) # if obj.topic is not None: # lst.append(tpl.format( # ensureUtf(_("Topic")), ensureUtf(obj.topic))) return E.p(*join_elems(lst, '. '))
def pick_choice(self, ar): if ar is None: return fld.value_from_object(self) # ▶: U+25B6, ◀: U+25C0 selected_tpl = "▶{}◀" elems = [] ba = ar.actor.get_action_by_name(action_name) for v in cls.get_list_items(): kw = dict(action_param_values=dict(choice=v)) label = str(v.button_text or v.text) if fld.value_from_object(self, ar) == v: elems.append(E.b(selected_tpl.format(label))) else: if fldname in ar.actor.get_disabled_fields(self, ar): pass # elems.append(label) else: elems.append( ar.action_button(ba, self, label=label, request_kwargs=kw, title=v.text)) return E.p(*join_elems(elems, sep=" | "))
def get_table_summary(self, obj, ar): if obj is None: return UploadType = rt.models.uploads.UploadType # Upload = rt.models.uploads.Upload elems = [] types = [] perm = ar.get_user().user_type.has_required_roles(self.required_roles) qs = UploadType.objects.all() if isinstance(obj, UploadController): area = obj.get_upload_area() if area is not None: qs = qs.filter(upload_area=area) else: return E.div("{} is not an UploadController!".format( model_class_path(obj.__class__))) volume = obj.get_uploads_volume() # print(20190208, volume) for ut in qs: sar = ar.spawn( self, master_instance=obj, known_values=dict(type_id=ut.id)) # logger.info("20140430 %s", sar.data_iterator.query) files = [] for m in sar: text = self.format_row_in_slave_summary(ar, m) if text is None: continue edit = ar.obj2html( m, text, # _("Edit"), # icon_name='application_form', title=_("Edit metadata of the uploaded file.")) if m.file.name: url = settings.SITE.build_media_url(m.file.name) elif m.volume_id and m.volume.base_url and m.library_file: url = m.volume.base_url + m.library_file else: url = None if url: show = ar.renderer.href_button( url, # u"\u21A7", # DOWNWARDS ARROW FROM BAR (↧) # u"\u21E8", u"\u21f2", # SOUTH EAST ARROW TO CORNER (⇲) style="text-decoration:none;", # _(" [show]"), # fmt(m), target='_blank', # icon_name=settings.SITE.build_static_url( # 'images/xsite/link'), # icon_name='page_go', # style="vertical-align:-30%;", title=_("Open the file in a new browser window")) # title=_("Open the uploaded file in a new browser window")) # logger.info("20140430 %s", tostring(e)) files.append(E.span(edit, ' ', show)) else: files.append(edit) if perm and ut.wanted \ and (ut.max_number < 0 or len(files) < ut.max_number): btn = self.insert_action.request_from( sar, master_instance=obj, known_values=dict(type_id=ut.id, volume=volume)).ar2button() if btn is not None: files.append(btn) if len(files) > 0: chunks = (str(ut), ': ') + tuple(join_elems(files, ', ')) types.append(chunks) # logger.info("20140430 %s", [tostring(e) for e in types]) # elems += [str(ar.bound_action.action.__class__), " "] if ar.bound_action.action.window_type == "d": if len(types) == 0: elems.append(E.ul(E.li(str(ar.no_data_text)))) else: elems.append(E.ul(*[E.li(*chunks) for chunks in types])) else: if len(types) == 0: elems.append(str(ar.no_data_text)) elems.append(" / ") else: for chunks in types: elems.extend(chunks) elems.append(" / ") elems.append(obj.show_uploads.as_button_elem(ar)) # ba = self.find_action_by_name("show_uploads") return E.div(*elems)
def get_table_summary(self, obj, ar): """Displays the uploads related to this controller as a list grouped by uploads type. Note that this also works on :class:`lino_welfare.modlib.uploads.models.UploadsByClient` and their subclasses for the different `_upload_area`. """ if obj is None: return UploadType = rt.models.uploads.UploadType # Upload = rt.models.uploads.Upload elems = [] types = [] perm = ar.get_user().user_type.has_required_roles(self.required_roles) qs = UploadType.objects.all() if isinstance(obj, UploadController): area = obj.get_upload_area() if area is not None: qs = qs.filter(upload_area=area) else: raise Exception("A {} is not an UploadController!".format( obj.__class__)) for ut in qs: sar = ar.spawn(self, master_instance=obj, known_values=dict(type_id=ut.id)) # logger.info("20140430 %s", sar.data_iterator.query) files = [] for m in sar: text = self.format_row_in_slave_summary(ar, m) if text is None: continue edit = ar.obj2html( m, text, # _("Edit"), # icon_name='application_form', title=_("Edit metadata of the uploaded file.")) if m.file.name: show = ar.renderer.href_button( settings.SITE.build_media_url(m.file.name), # u"\u21A7", # DOWNWARDS ARROW FROM BAR (↧) # u"\u21E8", u"\u21f2", # SOUTH EAST ARROW TO CORNER (⇲) style="text-decoration:none;", # _(" [show]"), # fmt(m), target='_blank', # icon_name=settings.SITE.build_static_url( # 'images/xsite/link'), # icon_name='page_go', # style="vertical-align:-30%;", title=_( "Open the uploaded file in a new browser window")) # logger.info("20140430 %s", tostring(e)) files.append(E.span(edit, ' ', show)) else: files.append(edit) if perm and ut.wanted \ and (ut.max_number < 0 or len(files) < ut.max_number): btn = self.insert_action.request_from( sar, master_instance=obj, known_values=dict(type_id=ut.id)).ar2button() if btn is not None: files.append(btn) if len(files) > 0: e = E.p(str(ut), ': ', *join_elems(files, ', ')) types.append(e) # logger.info("20140430 %s", [tostring(e) for e in types]) if len(types) == 0: elems.append(E.ul(E.li(str(ar.no_data_text)))) else: elems.append(E.ul(*[E.li(e) for e in types])) return E.div(*elems)
def get_table_summary(self, obj, ar): if obj is None: return UploadType = rt.models.uploads.UploadType # Upload = rt.models.uploads.Upload elems = [] types = [] perm = ar.get_user().user_type.has_required_roles(self.required_roles) qs = UploadType.objects.all() if isinstance(obj, UploadController): area = obj.get_upload_area() if area is not None: qs = qs.filter(upload_area=area) else: return E.div("{} is not an UploadController!".format( model_class_path(obj.__class__))) volume = obj.get_uploads_volume() # print(20190208, volume) for ut in qs: sar = ar.spawn(self, master_instance=obj, known_values=dict(type_id=ut.id)) # logger.info("20140430 %s", sar.data_iterator.query) files = [] for m in sar: text = self.format_row_in_slave_summary(ar, m) if text is None: continue edit = ar.obj2html( m, text, # _("Edit"), # icon_name='application_form', title=_("Edit metadata of the uploaded file.")) if m.file.name: url = settings.SITE.build_media_url(m.file.name) elif m.volume_id and m.volume.base_url and m.library_file: url = m.volume.base_url + m.library_file else: url = None if url: show = ar.renderer.href_button( url, # u"\u21A7", # DOWNWARDS ARROW FROM BAR (↧) # u"\u21E8", u"\u21f2", # SOUTH EAST ARROW TO CORNER (⇲) style="text-decoration:none;", # _(" [show]"), # fmt(m), target='_blank', # icon_name=settings.SITE.build_static_url( # 'images/xsite/link'), # icon_name='page_go', # style="vertical-align:-30%;", title=_("Open the file in a new browser window")) # title=_("Open the uploaded file in a new browser window")) # logger.info("20140430 %s", tostring(e)) files.append(E.span(edit, ' ', show)) else: files.append(edit) if perm and ut.wanted \ and (ut.max_number < 0 or len(files) < ut.max_number): btn = self.insert_action.request_from( sar, master_instance=obj, known_values=dict(type_id=ut.id, volume=volume)).ar2button() if btn is not None: files.append(btn) if len(files) > 0: chunks = (str(ut), ': ') + tuple(join_elems(files, ', ')) types.append(chunks) # logger.info("20140430 %s", [tostring(e) for e in types]) # elems += [str(ar.bound_action.action.__class__), " "] if ar.bound_action.action.window_type == "d": if len(types) == 0: elems.append(E.ul(E.li(str(ar.no_data_text)))) else: elems.append(E.ul(*[E.li(*chunks) for chunks in types])) else: if len(types) == 0: elems.append(str(ar.no_data_text)) elems.append(" / ") else: for chunks in types: elems.extend(chunks) elems.append(" / ") elems.append(obj.show_uploads.as_button_elem(ar)) # ba = self.find_action_by_name("show_uploads") return E.div(*elems)