Proposal: In gluon/html.py, line 2200 I have changed from
def serialize_mobile(self, data, select=None, prefix=''): if not select: select = SELECT(**self.attributes) for item in data: if len(item) <= 4 or item[4] == True: * if item[2]: # remove this line* select.append(OPTION(CAT(prefix, item[0]), _value=item[2], _selected=item[1])) if len(item)>3 and len(item[3]): self.serialize_mobile(item[3], select, prefix = CAT(prefix, item[0], '/')) select['_onchange'] = 'window.location=this.value' return select to: def serialize_mobile(self, data, select=None, prefix=''): if not select: select = SELECT(**self.attributes) for item in data: if len(item) <= 4 or item[4] == True: select.append(OPTION(CAT(prefix, item[0]), _value=item[2], _selected=item[1])) if len(item)>3 and len(item[3]): self.serialize_mobile(item[3], select, prefix = CAT(prefix, item[0], '/')) select['_onchange'] = 'window.location=this.value' return select Now there is no difference between the desktop and the mobile version of the menu. A menu item without a link and with subitems will be displayed on all devices. ----------------------------------------------- Addendum 1: If somebody wants the original behavior, he has to change (e.g.) from response.menu = [ (T('Home'), False, URL('default','index'), [ (T('Dummy1'), False, URL('default','index'), [],), (T('Dummy2'), False, None, [], ), (T('Desktop'), False, URL('default','index'), [], not (request.user_agent().is_**mobile or request.user_agent().is_ **tablet)), (T('Mobile'), False, URL('default','index'), [], request.user_agent().is_**mobile), (T('Tablet'), False, URL('default','index'), [], request.user_agent().is_**tablet), ]) ] to response.menu = [ (T('Home'), False, URL('default','index'), [ (T('Dummy1'), False, URL('default','index'), [],), (T('Dummy2'), False, None, [], *not request.user_agent().is_mobile* ), (T('Desktop'), False, URL('default','index'), [], not (request.user_agent().is_**mobile or request.user_agent().is_ **tablet)), (T('Mobile'), False, URL('default','index'), [], request.user_agent().is_**mobile), (T('Tablet'), False, URL('default','index'), [], request.user_agent().is_**tablet), ]) ] -------------------------------------------------------------------- Addendum 2: There is an error in my examples, this is the corrected code: response.menu = [ (T('Home'), False, URL('default','index'), [ (T('Dummy1'), False, URL('default','index'), [],), (T('Dummy2'), False, None, [],), (T('Desktop'), False, URL('default','index'), [], not (request.user_agent().is_**mobile or request.user_agent().* is_tablet*)), (T('Mobile'), False, URL('default','index'), [], request.user_agent().is_**mobile), (T('Tablet'), False, URL('default','index'), [], request.user_agent().is_**tablet), ]) ] and: response.menu = [ (T('Home'), False, URL('default','index'), [ (T('Dummy1'), False, URL('default','index'), [],), (T('Dummy2'), False, None, [],), (T('Desktop'), False, URL('default','index'), [], not (request.user_agent().is_**mobile or request.user_agent().* is_tablet*)), (T('Mobile'), False, URL('default','index'), [], request.user_agent().is_**mobile), (T('Tablet'), False, URL('default','index'), [], request.user_agent().is_**tablet), ]) ] 2012/8/21 Massimo Di Pierro <massimo.dipie...@gmail.com> > Can you elaborate? Is there a problem that need to be solved? > > > On Tuesday, 21 August 2012 09:46:35 UTC-5, szimszon wrote: >> >> +1 >> >> https://groups.google.com/d/**msg/web2py-developers/** >> FMCF0HTs64A/CJ-PNCaIsuwJ<https://groups.google.com/d/msg/web2py-developers/FMCF0HTs64A/CJ-PNCaIsuwJ> >> >> 2012. augusztus 21., kedd 15:58:27 UTC+2 időpontban mweissen a következőt >> írta: >>> >>> I have played with some menu details and these are my results >>> >>> First try: >>> >>> response.menu = [ >>> (T('Home'), False, URL('default','index'), [ >>> (T('Dummy1'), False, URL('default','index'), [],), >>> (T('Dummy2'), False, None, [],), >>> (T('Desktop'), False, URL('default','index'), [], >>> not (request.user_agent().is_**mobile or >>> request.user_agent().is_**mobile)), >>> (T('Mobile'), False, URL('default','index'), [], >>> request.user_agent().is_**mobile), >>> (T('Tablet'), False, URL('default','index'), [], >>> request.user_agent().is_**tablet), >>> ]) >>> ] >>> >>> >>> *Desktop:* >>> I have expected and I got: Home | Dummy1 | Dummy2 | Desktop (#1) >>> >>> *Mobile phone:* >>> I have expected: >>> Home | Dummy1 | Dummy2 | Mobile >>> >>> I got: >>> Home | Dummy1 | Mobile (#2) >>> >>> *Tablet:* >>> I have expected: >>> Home | Dummy1 | Dummy2 | Tablet >>> >>> I got: >>> Home | Dummy1 | Mobile | Tablet (#2, #3) >>> >>> Now a second try: >>> >>> response.menu = [ >>> (T('Home'), False, None, [ >>> (T('Dummy1'), False, URL('default','index'), [],), >>> (T('Dummy2'), False, None, [],), >>> (T('Desktop'), False, URL('default','index'), [], >>> not (request.user_agent().is_**mobile or >>> request.user_agent().is_**mobile)), >>> (T('Mobile'), False, URL('default','index'), [], >>> request.user_agent().is_**mobile), >>> (T('Tablet'), False, URL('default','index'), [], >>> request.user_agent().is_**tablet), >>> ]) >>> ] >>> >>> >>> *Desktop:* >>> I have expected and I got: Home | Dummy1 | Dummy2 | Desktop (#1) >>> >>> *Mobile phone:* >>> I have expected: >>> Home | Dummy1 | Dummy2 | Mobile >>> >>> I got: >>> <empty menu> (#2, #4) >>> >>> *Tablet:* >>> I have expected: >>> Home | Dummy1 | Dummy2 | Tablet >>> >>> I got: >>> <empty menu> (#2, #4) >>> >>> Comments: >>> >>> #1: Everything works as expected, but only on a desktop pc >>> #2: Menu items without a link are not displayed on a mobile device >>> #3: Interesting: a tablet is a "tablet" *and *a "mobile phone" >>> #4: The empty menu is very confusing. It took some hours to find it out, >>> because my "real" menu is more complicated. >>> >>> Maybe #2, #3 and #4 are *features *and not *bugs*, but I think, these >>> things should be documented or changed. >>> My proposal: menu items should not become invisible depending on the >>> device. If somebody wants this behavior he could use the fifth component. >>> >>> Maybe is_tablet should be True only for tablets and not for mobile >>> phones too. But in this case there should be not only a mobile.htmlview but >>> also a >>> tablet.html. And this would make things more complicated. >>> >>> Regards, Martin >>> >>> >>> >>> --