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")
>>>
>>>