Beispiel #1
0
    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