Exemplo n.º 1
0
    def layout(item):
        """ Custom Layout Method """

        # Manage flags: hide any disabled/unauthorized items
        if not item.authorized:
            item.enabled = False
            item.visible = False
        elif item.enabled is None or item.enabled:
            item.enabled = True
            item.visible = True

        if item.enabled and item.visible:
            
            items = item.render_components()
            if item.parent is not None:

                classes = []

                if item.parent.parent is None:
                    # Item at the top-level?
                    toplevel = True
                    if item.opts.right:
                        classes.append("menu-right")
                else:
                    toplevel = False

                if item.components:
                    classes.append("has-dropdown not-click")
                    _class = " ".join(classes)
                    # Menu item with Dropdown
                    if item.get_first(enabled=True):
                        _href = item.url()
                        return LI(A(item.label,
                                    _href=_href,
                                    _id=item.attr._id
                                    ),
                                  UL(items,
                                     _class="dropdown"
                                     ),
                                  _class=_class,
                                  )
                else:
                    # Menu item without Drop-Down
                    if toplevel:
                        item_url = item.url()
                        if item_url == URL(c="default", f="index"):
                            classes.append("menu-home")
                        if item.selected:
                            classes.append("active")
                        _class = " ".join(classes)
                        return LI(A(item.label,
                                    _href=item_url,
                                    _id=item.attr._id,
                                    ),
                                  _class=_class,
                                  )
                    else:
                        # Submenu item
                        if isinstance(item.label, dict):
                            if "name" in item.label:
                                label = item.label["name"]
                            else:
                                return None
                        else:
                            label = item.label
                        link = A(label, _href=item.url(), _id=item.attr._id)
                        return LI(link)
            else:
                # Main menu

                right = []
                left = []
                for item in items:
                    if "menu-right" in item["_class"]:
                        item.remove_class("menu-right")
                        right.append(item)
                    else:
                        left.append(item)
                right.reverse()
                return NAV(
                    UL(LI(A(" ",
                            _href=URL(c="default", f="index"),
                            _class="S3menulogo"
                            ),
                          _class="name"
                          ),
                       LI(A(SPAN(current.T("Menu"))),
                          _class="toggle-topbar menu-icon",
                          ),
                       _class="title-area"),
                    SECTION(UL(right,
                               _class="right"),
                            UL(left,
                               _class="left"),
                            _class="top-bar-section"),
                    _class = "top-bar",
                    data = {"topbar": " "},
                )

        else:
            return None
Exemplo n.º 2
0
    def layout(item):
        """ Custom Layout Method """

        # Manage flags: hide any disabled/unauthorized items
        if not item.authorized:
            item.enabled = False
            item.visible = False
        elif item.enabled is None or item.enabled:
            item.enabled = True
            item.visible = True

        if not item.enabled or not item.visible:
            return None

        items = item.render_components()
        if item.parent is not None:

            classes = []

            if item.parent.parent is None:
                # Item at the top-level?
                toplevel = True
                if item.opts.right:
                    classes.append("menu-right")
            else:
                toplevel = False

            if item.components:
                classes.append("has-dropdown not-click")
                if item.selected:
                    classes.append("active")
                _class = " ".join(classes)
                # Menu item with Dropdown
                if item.get_first(enabled=True, link=True):
                    _href = item.url()
                    return LI(
                        A(item.label, _href=_href, _id=item.attr._id),
                        UL(items, _class="dropdown"),
                        _class=_class,
                    )
                else:
                    # No active items in drop-down
                    # => hide the entire entry
                    return None
            else:
                # Menu item without Drop-Down
                item_url = item.url()
                label = item.label
                if toplevel:
                    # Top-level item
                    if item_url == URL(c="default", f="index"):
                        classes.append("menu-home")
                    if item.selected:
                        classes.append("active")
                    _class = " ".join(classes)
                else:
                    # Submenu item
                    if isinstance(label, dict):
                        if "name" in label:
                            label = label["name"]
                        else:
                            return None
                    _class = None
                link_class = "s3_modal" if item.opts.modal else None
                return LI(
                    A(
                        label,
                        _class=link_class,
                        _href=item_url,
                        _id=item.attr._id,
                    ),
                    _class=_class,
                )
        else:
            # Main menu
            right = []
            left = []
            for child in items:
                if "menu-right" in child["_class"]:
                    child.remove_class("menu-right")
                    right.append(child)
                else:
                    left.append(child)
            right.reverse()
            if current.response.s3.rtl:
                right, left = left, right

            T = current.T
            data_options = {
                "back": T("Back"),
            }

            return NAV(
                UL(
                    LI(A(
                        " ",
                        _href=URL(c="default", f="index"),
                    ),
                       _class="name"),
                    LI(
                        A(SPAN(current.T("Menu"))),
                        _class="toggle-topbar menu-icon",
                    ),
                    _class="title-area",
                ),
                SECTION(
                    UL(right, _class="right"),
                    UL(left, _class="left"),
                    _class="top-bar-section",
                ),
                _class="top-bar",
                data={
                    "topbar": " ",
                    "options": "back_text:%(back)s" % data_options,
                },
            )
Exemplo n.º 3
0
    def layout(item):
        """ Layout Method (Item Renderer) """

        # Manage flags: hide any disabled/unauthorized items
        if not item.authorized and not item.opts.always_display:
            item.enabled = False
            item.visible = False
        elif item.enabled is None or item.enabled:
            item.enabled = True
            item.visible = True

        if item.enabled and item.visible:

            items = item.render_components()
            if item.parent is not None:

                if item.attr._class:
                    classes = item.attr._class.split(" ")
                else:
                    classes = []

                if item.parent.parent is None:
                    # Item at the top-level?
                    toplevel = True
                    if item.opts.right:
                        classes.append("menu-right")
                else:
                    toplevel = False

                if item.components:
                    classes.append("has-dropdown not-click")
                    _class = " ".join(classes)
                    # Menu item with Dropdown
                    if item.get_first(enabled=True):
                        _href = item.url()
                        return LI(
                            A(item.label, _href=_href, _id=item.attr._id),
                            UL(items, _class="dropdown"),
                            _class=_class,
                        )
                else:
                    # Menu item without Drop-Down
                    if toplevel:
                        item_url = item.url()
                        if item_url == URL(c="default", f="index"):
                            classes.append("menu-home")
                        if item.selected:
                            classes.append("active")
                        _class = " ".join(classes)
                        icon = item.opts.icon
                        if icon:
                            label = LABEL(ICON(icon), item.label)
                        else:
                            label = item.label
                        return LI(
                            A(
                                label,
                                _href=item_url,
                                _id=item.attr._id,
                                _target=item.attr._target,
                            ),
                            _class=_class,
                        )
                    else:
                        # Submenu item
                        if isinstance(item.label, dict):
                            if "id" in item.label:
                                return S3MainMenuDefaultLayout.checkbox_item(
                                    item)
                            elif "name" in item.label:
                                label = item.label["name"]
                            else:
                                return None
                        else:
                            label = item.label
                        link = A(
                            label,
                            _href=item.url(),
                            _id=item.attr._id,
                            _target=item.attr._target,
                        )
                        _class = " ".join(classes)
                        return LI(link, _class=_class)
            else:
                # The main menu itself
                T = current.T
                settings = current.deployment_settings

                if item.opts.title_area:
                    # Custom override
                    title_area = item.opts.title_area
                else:
                    # Standard: render a menu logo
                    logo = settings.get_ui_menu_logo()
                    if logo is None:
                        # Render an icon
                        logo = SPAN(
                            settings.get_system_name_short(),
                            _class="logo",
                        )
                    elif isinstance(logo, str):
                        # Assume image-URL
                        logo = IMG(
                            _src=logo,
                            _class="logo",
                            _alt=settings.get_system_name_short(),
                        )
                    #else:
                    # use as-is (assume HTML or T())
                    title_area = A(
                        logo,
                        _href=URL(c="default", f="index"),
                        _title=T("Homepage"),
                    )

                # Arrange items left/right
                right = []
                left = []
                for item in items:
                    if "menu-right" in item["_class"]:
                        item.remove_class("menu-right")
                        right.append(item)
                    else:
                        left.append(item)
                right.reverse()

                # Reverse if right-to-left
                if current.response.s3.rtl:
                    right, left = left, right

                # Build top-bar HTML
                return NAV(
                    UL(
                        LI(
                            title_area,
                            _class="name",
                        ),
                        LI(
                            A(SPAN(T("Menu"))),
                            _class="toggle-topbar menu-icon",
                        ),
                        _class="title-area",
                    ),
                    SECTION(
                        UL(
                            right,
                            _class="right",
                        ),
                        UL(
                            left,
                            _class="left",
                        ),
                        _class="top-bar-section",
                    ),
                    _class="top-bar",
                    data={"topbar": " "},
                )
        else:
            return None
Exemplo n.º 4
0
    def layout(item):
        """ Custom Layout Method """

        # Manage flags: hide any disabled/unauthorized items
        if not item.authorized:
            item.enabled = False
            item.visible = False
        elif item.enabled is None or item.enabled:
            item.enabled = True
            item.visible = True

        if item.enabled and item.visible:

            items = item.render_components()
            if item.parent is not None:

                classes = []

                if item.parent.parent is None:
                    # Item at the top-level?
                    toplevel = True
                    if item.opts.right:
                        classes.append("menu-right")
                else:
                    toplevel = False

                if item.components:
                    classes.append("has-dropdown not-click")
                    _class = " ".join(classes)
                    # Menu item with Dropdown
                    if item.get_first(enabled=True):
                        _href = item.url()
                        return LI(
                            A(SPAN(item.label), _href=_href,
                              _id=item.attr._id),
                            UL(items, _class="dropdown"),
                            _class=_class,
                        )
                else:
                    # Menu item without Drop-Down
                    if toplevel:
                        item_url = item.url()
                        if item_url == URL(c="default", f="index"):
                            classes.append("menu-home")
                        if item.selected:
                            classes.append("active")
                        _class = " ".join(classes)
                        return LI(
                            A(
                                SPAN(item.label),
                                _href=item_url,
                                _id=item.attr._id,
                            ),
                            _class=_class,
                        )
                    else:
                        # Submenu item
                        if isinstance(item.label, dict):
                            if "id" in item.label:
                                return S3MainMenuDefaultLayout.checkbox_item(
                                    item)
                            elif "name" in item.label:
                                label = item.label["name"]
                            else:
                                return None
                        else:
                            label = item.label
                        link = A(label, _href=item.url(), _id=item.attr._id)
                        return LI(link)
            else:
                # Main menu
                right = []
                left = []
                for item in items:
                    if "menu-right" in item["_class"]:
                        item.remove_class("menu-right")
                        right.append(item)
                    else:
                        left.append(item)
                right.reverse()

                T = current.T
                settings = current.deployment_settings
                logo_url = URL(
                    c="static",
                    f="themes",
                    args=["WACOP", "img", "wa-cop-logo--white.svg"],
                )
                home_url = URL(
                    c="default",
                    f="index",
                )
                title_area = UL(
                    LI(
                        H1(
                            A(
                                IMG(
                                    _src=logo_url,
                                    _class="logo",
                                    _alt=settings.get_system_name_short(),
                                ),
                                _href=home_url,
                            ), ),
                        _class="name",
                    ),
                    LI(
                        A(
                            SPAN(T("Menu"), ),
                            _href="#",
                        ),
                        _class="toggle-topbar menu-icon",
                    ),
                    _class="title-area",
                )

                return NAV(
                    title_area,
                    SECTION(
                        UL(
                            right,
                            _class="right",
                        ),
                        UL(
                            left,
                            _class="left",
                        ),
                        _class="top-bar-section",
                    ),
                    data={"topbar": " "},
                    _class="top-bar",
                    _role="navigation",
                )

        else:
            return None