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

-- 



Reply via email to