me too.
@Massimo: please feel free to use it, edit, ask, etc.

here's a small variation with mobile parameter:

def twitter_menu(menu, level=0, mobile=False):
    """
    Generates twitter bootstrap's compliant menu
    """
    lis = []
    for li in menu:
        (text, active, href) = li[:3]
        sub =  len(li) > 3 and li[3] or []
        if len(sub) == 0:
            li_class = None
            el = LI(A(text, _href=href), _class=li_class)
            lis.append(el)
        else:
            li_class = 'dropdown'
            caret = level == 0 and B(_class='caret') or 
I(_class='icon-chevron-right')
            if mobile:
                li_class = None
                caret = B(_class='caret')
                sub_ul = twitter_menu(sub, level=level)
                el = LI(A(text, caret, _href=href, 
_class="dropdown-toggle", **{'_data-toggle' : 'dropdown'}), _class=li_class)
                lis.append(el)
                lis.extend(sub_ul)
            else:
                sub_ul = twitter_menu(sub, level=level+1)
                el = LI(A(text, caret, _href=href, 
_class="dropdown-toggle", **{'_data-toggle' : 'dropdown'}), sub_ul, 
_class=li_class)
                lis.append(el)
    if level == 0:
        return UL(*lis, _class='nav')
    else:
        if mobile:
            return lis
        return UL(*lis, _class="dropdown-menu")



Il giorno sabato 26 maggio 2012 10:56:10 UTC+2, Paolo Caruccio ha scritto:
>
> Do you mean to add a new MENU attribute (i.e. 'bootstrap_menu') like 
> 'mobile' and to switch by menu types?
> I think that's a good option.
>
> Il giorno sabato 26 maggio 2012 03:40:26 UTC+2, Massimo Di Pierro ha 
> scritto:
>>
>> We can include this in MENU and eliminate the JS. What do you think?
>>
>> On Friday, 25 May 2012 15:52:50 UTC-5, Niphlod wrote:
>>>
>>> I may be a little late....I implemented it for my app but never used 
>>> because my menu has only 4 items :-P
>>> include bootstrap.css and add to css this (took from 
>>> https://github.com/twitter/bootstrap/issues/424)
>>>
>>> .nav li.dropdown ul.dropdown-menu li:HOVER ul {
>>>         display:block;
>>>         position:absolute;
>>>         left:100%;
>>>         -webkit-border-radius: 3px;
>>>         -moz-border-radius: 3px;
>>>         border-radius: 3px;
>>>     }
>>>     .nav li.dropdown ul.dropdown-menu ul {
>>>         display: none;
>>>         float:right;
>>>         position: relative;
>>>         top: auto;
>>>         margin-top: -30px;
>>>     }
>>>
>>>     .nav li.dropdown ul.dropdown-menu .dropdown-menu::before {
>>>         content: '';
>>>         display: inline-block;
>>>         border-top: 7px solid transparent;
>>>         border-bottom: 7px solid transparent;
>>>         border-right:7px solid #CCC;
>>>         border-right-color: rgba(0, 0, 0, 0.2);
>>>         position: absolute;
>>>         top: 9px;
>>>         left: -14px;
>>>     }
>>>
>>>     .nav li.dropdown ul.dropdown-menu .dropdown-menu::after {
>>>         content: '';
>>>         display: inline-block;
>>>         border-top: 6px solid transparent;
>>>         border-bottom: 6px solid transparent;
>>>         border-right:6px solid white;
>>>         position: absolute;
>>>         top: 10px;
>>>         left: -12px;
>>>     }
>>>
>>>
>>> def twitter_menu(menu, level=0):
>>>     """
>>>     Generates twitter bootstrap's compliant menu
>>>     """
>>>     lis = []
>>>     for li in menu:
>>>         (text, active, href) = li[:3]
>>>         sub =  len(li) > 3 and li[3] or []
>>>         if len(sub) == 0:
>>>             li_class = None
>>>             el = LI(A(text, _href=href), _class=li_class)
>>>         else:
>>>             li_class = 'dropdown'
>>>             caret = level == 0 and B(_class='caret') or 
>>> I(_class='icon-chevron-right')
>>>             sub_ul = twitter_menu(sub, level=level+1)
>>>             el = LI(A(text, caret, _href=href, _class="dropdown-toggle", 
>>> **{'_data-toggle' : 'dropdown'}), sub_ul, _class=li_class)
>>>         lis.append(el)
>>>
>>>     if level == 0:
>>>         return UL(*lis, _class='nav')
>>>     else:
>>>         return UL(*lis, _class="dropdown-menu")
>>>
>>>

Reply via email to