From f84238c82771f2b840561bea78046070452ac267 Mon Sep 17 00:00:00 2001 From: Massimo Di Pierro Date: Sun, 29 Jan 2012 15:27:16 -0600 Subject: [PATCH] some better doctests and response.menu=[(*,*,*,*,condition)], thanks Yair --- VERSION | 2 +- gluon/html.py | 41 +++++++++++++++++++++++++++++++++++------ 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/VERSION b/VERSION index 06ba1e44..a5764db9 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 1.99.4 (2012-01-29 15:22:07) stable +Version 1.99.4 (2012-01-29 15:27:03) stable diff --git a/gluon/html.py b/gluon/html.py index ee98d17b..26cc7f65 100644 --- a/gluon/html.py +++ b/gluon/html.py @@ -148,6 +148,7 @@ def URL( host=None, port=None, encode_embedded_slash=False, + url_encode=True ): """ generate a URL @@ -179,6 +180,24 @@ def URL( >>> str(URL(a='a', c='c', f='f', args=['w/x', 'y/z'], encode_embedded_slash=True)) '/a/c/f/w%2Fx/y%2Fz' + >>> str(URL(a='a', c='c', f='f', args=['%(id)d'], url_encode=False)) + '/a/c/f/%(id)d' + + >>> str(URL(a='a', c='c', f='f', args=['%(id)d'], url_encode=True)) + '/a/c/f/%25%28id%29d' + + >>> str(URL(a='a', c='c', f='f', vars={'id' : '%(id)d' }, url_encode=False)) + '/a/c/f?id=%(id)d' + + >>> str(URL(a='a', c='c', f='f', vars={'id' : '%(id)d' }, url_encode=True)) + '/a/c/f?id=%25%28id%29d' + + >>> str(URL(a='a', c='c', f='f', anchor='%(id)d', url_encode=False)) + '/a/c/f#%(id)d' + + >>> str(URL(a='a', c='c', f='f', anchor='%(id)d', url_encode=True)) + '/a/c/f#%25%28id%29d' + generates a url '/a/c/f' corresponding to application a, controller c and function f. If r=request is passed, a, c, f are set, respectively, to r.application, r.controller, r.function. @@ -251,10 +270,13 @@ def URL( args = [args] if args: - if encode_embedded_slash: - other = '/' + '/'.join([urllib.quote(str(x), '') for x in args]) + if url_encode: + if encode_embedded_slash: + other = '/' + '/'.join([urllib.quote(str(x), '') for x in args]) + else: + other = args and urllib.quote('/' + '/'.join([str(x) for x in args])) else: - other = args and urllib.quote('/' + '/'.join([str(x) for x in args])) + other = args and ('/' + '/'.join([str(x) for x in args])) else: other = '' @@ -298,9 +320,15 @@ def URL( list_vars.append(('_signature', sig)) if list_vars: - other += '?%s' % urllib.urlencode(list_vars) + if url_encode: + other += '?%s' % urllib.urlencode(list_vars) + else: + other += '?%s' % '&'.join([var[0]+'='+var[1] for var in list_vars]) if anchor: - other += '#' + urllib.quote(str(anchor)) + if url_encode: + other += '#' + urllib.quote(str(anchor)) + else: + other += '#' + (str(anchor)) if extension: function += '.' + extension @@ -2090,7 +2118,8 @@ class MENU(DIV): li['_class'] = li['_class']+' '+self['li_active'] else: li['_class'] = self['li_active'] - ul.append(li) + if len(item) <= 4 or item[4] == True: + ul.append(li) return ul def serialize_mobile(self, data, select=None, prefix=''):