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 <[email protected]>
> 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
>>>
>>>
>>>
>>>
--