Пример #1
0
 def test_ordering_unordered_sort_stable(self):
     group = menus.MenuGroup('menu', 'Menu')
     menus.MenuItem('a', 'A', group=group, can_view=can_view)
     menus.MenuItem('b', 'B', group=group, can_view=can_view)
     menus.MenuItem('c', 'C', group=group, can_view=can_view)
     menus.MenuItem('d', 'D', group=group, can_view=can_view)
     self._assert_name_order(group, ['a', 'b', 'c', 'd'])
Пример #2
0
 def test_explicit_placements(self):
     group = menus.MenuGroup('menu', 'Menu')
     menus.MenuItem('a', 'A', group=group, can_view=can_view, placement=5000)
     menus.MenuItem('b', 'B', group=group, can_view=can_view, placement=3000)
     menus.MenuItem('c', 'C', group=group, can_view=can_view, placement=1000)
     menus.MenuItem('d', 'D', group=group, can_view=can_view, placement=4000)
     menus.MenuItem('e', 'E', group=group, can_view=can_view, placement=2000)
     self._assert_name_order(group, ['c', 'e', 'b', 'd', 'a'])
Пример #3
0
 def test_force_multiple_first(self):
     group = menus.MenuGroup('menu', 'Menu')
     menus.MenuItem('a', 'A', group=group, can_view=can_view, placement=0)
     menus.MenuItem('b', 'B', group=group, can_view=can_view)
     menus.MenuItem('c', 'C', group=group, can_view=can_view)
     menus.MenuItem('d', 'D', group=group, can_view=can_view)
     menus.MenuItem('e', 'E', group=group, can_view=can_view, placement=0)
     self._assert_name_order(group, ['a', 'e', 'b', 'c', 'd'])
Пример #4
0
 def test_force_last(self):
     group = menus.MenuGroup('menu', 'Menu')
     menus.MenuItem('e', 'E', group=group, can_view=can_view,
         placement=float('inf'))
     menus.MenuItem('a', 'A', group=group, can_view=can_view)
     menus.MenuItem('b', 'B', group=group, can_view=can_view)
     menus.MenuItem('c', 'C', group=group, can_view=can_view)
     menus.MenuItem('d', 'D', group=group, can_view=can_view)
     self._assert_name_order(group, ['a', 'b', 'c', 'd', 'e'])
Пример #5
0
    def install_courses_menu_item(cls):
        menu_item = menus.MenuItem(
            'courses', 'Courses', action='courses',
            can_view=admin_action_can_view('courses'),
            href="{}?action=courses".format(cls.LINK_URL))

        dashboard.DashboardHandler.register_courses_menu_item(menu_item)
Пример #6
0
    def add_sub_nav_mapping(cls,
                            group_name,
                            item_name,
                            title,
                            action=None,
                            contents=None,
                            can_view=None,
                            href=None,
                            **kwargs):
        """Create a second level nav item.

        Args:
            group_name: Name of an existing top level nav item to use as the
                parent
            item_name: A unique key for this item
            title: Human-readable label
            action: A unique operation ID for
            contents: A handler which will be added as a custom get-action on
                DashboardHandler

        """

        group = cls.root_menu_group.get_child(group_name)
        if group is None:
            logging.critical('The group %s does not exist', group_name)
            return

        item = group.get_child(item_name)
        if item:
            logging.critical(
                'There is already a sub-menu item named "%s" registered in '
                'group %s.', item_name, group_name)
            return

        if contents:
            action = action or group_name + '_' + item_name

        if action and not href:
            href = "dashboard?action={}".format(action)

        def combined_can_view(app_context):
            if action and not cls.has_action_permission(app_context, action):
                return False

            if can_view and not can_view(app_context):
                return False

            return True

        item = menus.MenuItem(item_name,
                              title,
                              action=action,
                              group=group,
                              can_view=combined_can_view,
                              href=href,
                              **kwargs)
        cls.actions_to_menu_items[action] = item

        if contents:
            cls.add_custom_get_action(action, handler=contents)
Пример #7
0
def make_help_menu(root_group):
    anyone_can_view = lambda x: True

    group = menus.MenuGroup('help', 'Help', group=root_group, placement=6000)

    menus.MenuItem(
        'documentation',
        'Documentation',
        href='https://www.google.com/edu/openonline/tech/index.html',
        can_view=anyone_can_view,
        group=group,
        placement=1000,
        target='_blank')

    menus.MenuItem(
        'videos',
        'Demo videos',
        href='https://www.youtube.com/playlist?list=PLFB_aGY5EfxeltJfJZwkjqDLAW'
        'dMfSpES',
        can_view=anyone_can_view,
        group=group,
        placement=2000,
        target='_blank')

    menus.MenuItem('showcase',
                   'Showcase courses',
                   href='https://www.google.com/edu/openonline/index.html',
                   can_view=anyone_can_view,
                   group=group,
                   placement=3000,
                   target='_blank')

    menus.MenuItem(
        'forum',
        'Support forum',
        href=('https://groups.google.com/forum/?fromgroups#!categories/'
              'course-builder-forum/general-troubleshooting'),
        can_view=anyone_can_view,
        group=group,
        placement=4000,
        target='_blank')
Пример #8
0
        def bind(key, label, handler, href=None):
            if href:
                target = '_blank'
            else:
                target = None
                href = "{}?action={}".format(cls.LINK_URL, key)

            def can_view(app_context):
                return can_view_admin_action(key)

            menu_item = menus.MenuItem(
                key, label, action=key, can_view=can_view, group=group,
                href=href, target=target)

            if handler:
                cls.get_actions.append(key)
                cls.actions_to_menu_items[key] = menu_item
Пример #9
0
    def add_sub_nav_mapping(
            cls, group_name, item_name, title, action=None, contents=None,
            can_view=None, href=None, no_app_context=False,
            sub_group_name=None, **kwargs):
        """Create a second level nav item.

        Args:
            group_name: Name of an existing top level nav item to use as the
                parent
            item_name: A unique key for this item
            title: Human-readable label
            action: A unique operation ID for
            contents: A handler which will be added as a custom get-action on
                DashboardHandler
            can_view: Pass a boolean function here if your handler has
                additional permissions logic in it that the dashboard does not
                check for you.  You must additionally check it in your handler.
            sub_group_name: The sub groups 'pinned', 'default', and 'advanced'
                exist in that order and 'default' is used by default.  You can
                pass some other string to create a new group at the end.
            other arguments: see common/menus.py
        """

        group = cls.root_menu_group.get_child(group_name)
        if group is None:
            logging.critical('The group %s does not exist', group_name)
            return

        if sub_group_name is None:
            sub_group_name = 'default'

        sub_group = group.get_child(sub_group_name)
        if not sub_group:
            sub_group = menus.MenuGroup(
                sub_group_name, None, group=group)

        item = sub_group.get_child(item_name)
        if item:
            logging.critical(
                'There is already a sub-menu item named "%s" registered in '
                'group %s subgroup %s.', item_name, group_name, sub_group_name)
            return

        if contents:
            action = action or group_name + '_' + item_name

        if action and not href:
            href = "dashboard?action={}".format(action)

        def combined_can_view(app_context):
            if action:
                # Current design disallows actions at the global level.
                # This might change in the future.
                if not app_context and not no_app_context:
                    return False

                # Check permissions in the dashboard
                if not cls.can_view(action):
                    return False

            # Additional custom visibility check
            if can_view and not can_view(app_context):
                return False

            return True

        item = menus.MenuItem(
            item_name, title, action=action, group=sub_group,
            can_view=combined_can_view, href=href, **kwargs)
        cls.actions_to_menu_items[action] = item

        if contents:
            cls.add_custom_get_action(action, handler=contents)