def __init__(self, card, action_log, configurator): """ Card is a card business object. """ super(CardMembers, self).__init__(card, action_log, configurator) # members part of the card self.overlay_add_members = component.Component( overlay.Overlay(lambda r: (r.i(class_='ico-btn icon-user'), r.span(_(u'+'), class_='count')), lambda r: component.Component(self).render( r, model='add_member_overlay'), dynamic=True, cls='card-overlay')) self.new_member = component.Component(usermanager.NewMember( self.autocomplete_method), model='add_members') self.members = [ component.Component( usermanager.UserManager.get_app_user(member.username, data=member)) for member in card.members ] self.see_all_members = component.Component( overlay.Overlay(lambda r: component.Component(self).render( r, model='more_users'), lambda r: component.Component(self).on_answer( self.remove_member).render( r, model='members_list_overlay'), dynamic=False, cls='card-overlay'))
def __init__(self, id_, app_title, app_banner, theme, card_extensions, search_engine, assets_manager_service, mail_sender_service, services_service, load_children=True): """Initialization In: -- ``id_`` -- the id of the board in the database -- ``mail_sender_service`` -- Mail service, used to send mail -- ``on_board_delete`` -- function to call when the board is deleted """ self.model = 'columns' self.app_title = app_title self.app_banner = app_banner self.theme = theme self.mail_sender = mail_sender_service self.id = id_ self.assets_manager = assets_manager_service self.search_engine = search_engine self._services = services_service # Board extensions are not extracted yet, so # board itself implement their API. self.board_extensions = { 'weight': self, 'labels': self, 'members': self } self.card_extensions = card_extensions.set_configurators( self.board_extensions) self.action_log = ActionLog(self) self.version = self.data.version self.modal = component.Component(popin.Empty()) self.card_matches = set() # search results self.last_search = u'' self.columns = [] self.archive_column = None if load_children: self.load_children() # Member part self.overlay_add_members = component.Component( overlay.Overlay(lambda r: (r.i(class_='ico-btn icon-user'), r.span(_(u'+'), class_='count')), lambda r: component.Component(self).render( r, model='add_member_overlay'), dynamic=True, cls='board-labels-overlay')) self.new_member = component.Component( usermanager.NewMember(self.autocomplete_method)) self.update_members() def many_user_render(h, number): return h.span(h.i(class_='ico-btn icon-user'), h.span(number, class_='count'), title=_("%s more...") % number) self.see_all_members = component.Component( overlay.Overlay(lambda r: many_user_render( r, len(self.all_members) - self.MAX_SHOWN_MEMBERS), lambda r: component.Component(self).render( r, model='members_list_overlay'), dynamic=False, cls='board-labels-overlay')) self.see_all_members_compact = component.Component( overlay.Overlay( lambda r: many_user_render(r, len(self.all_members)), lambda r: component.Component(self).render( r, model='members_list_overlay'), dynamic=False, cls='board-labels-overlay')) self.comp_members = component.Component(self) # Icons for the toolbar self.icons = { 'add_list': component.Component(Icon('icon-plus', _('Add list'))), 'edit_desc': component.Component( Icon('icon-pencil', _('Edit board description'))), 'preferences': component.Component(Icon('icon-cog', _('Preferences'))), 'export': component.Component(Icon('icon-download3', _('Export board'))), 'save_template': component.Component(Icon('icon-floppy', _('Save as template'))), 'archive': component.Component(Icon('icon-trashcan', _('Archive board'))), 'leave': component.Component(Icon('icon-exit', _('Leave this board'))), 'history': component.Component(Icon('icon-history', _("Action log"))), } # Title component self.title = component.Component(title.EditableTitle( self.get_title)).on_answer(self.set_title) self.must_reload_search = False