navbar dropdown, thanks Paolo
This commit is contained in:
@@ -1 +1 @@
|
||||
Version 2.0.8 (2012-09-12 09:55:52) stable
|
||||
Version 2.0.8 (2012-09-12 10:18:30) stable
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
'Cache': 'Cache',
|
||||
'Cache Keys': 'Cache Keys',
|
||||
'Cannot be empty': 'Non può essere vuoto',
|
||||
'Change password': 'Change password',
|
||||
'change password': 'Cambia password',
|
||||
'Check to delete': 'Seleziona per cancellare',
|
||||
'Clear CACHE?': 'Clear CACHE?',
|
||||
@@ -69,6 +70,7 @@
|
||||
'export as csv file': 'esporta come file CSV',
|
||||
'FAQ': 'FAQ',
|
||||
'First name': 'Nome',
|
||||
'Forgot username?': 'Forgot username?',
|
||||
'Forms and Validators': 'Forms and Validators',
|
||||
'Free Applications': 'Free Applications',
|
||||
'Group %(group_id)s created': 'Group %(group_id)s created',
|
||||
@@ -115,6 +117,7 @@
|
||||
'Modified On': 'Modified On',
|
||||
'My Sites': 'My Sites',
|
||||
'Name': 'Nome',
|
||||
'New password': 'New password',
|
||||
'New Record': 'Nuovo elemento (record)',
|
||||
'new record inserted': 'nuovo record inserito',
|
||||
'next 100 rows': 'prossime 100 righe',
|
||||
@@ -122,6 +125,7 @@
|
||||
'Non può essere vuoto': 'Non può essere vuoto',
|
||||
'not authorized': 'non autorizzato',
|
||||
'Object or table name': 'Object or table name',
|
||||
'Old password': 'Old password',
|
||||
'Online examples': 'Vedere gli esempi',
|
||||
'or import from csv file': 'oppure importa da file CSV',
|
||||
'Origin': 'Origine',
|
||||
@@ -153,10 +157,12 @@
|
||||
'Registration key': 'Chiave di Registazione',
|
||||
'Registration successful': 'Registration successful',
|
||||
'Remember me (for 30 days)': 'Remember me (for 30 days)',
|
||||
'Request reset password': 'Request reset password',
|
||||
'Reset Password key': 'Resetta chiave Password ',
|
||||
'Role': 'Ruolo',
|
||||
'Rows in Table': 'Righe nella tabella',
|
||||
'Rows selected': 'Righe selezionate',
|
||||
'Save profile': 'Save profile',
|
||||
'Semantic': 'Semantic',
|
||||
'Services': 'Services',
|
||||
'Size of cache:': 'Size of cache:',
|
||||
@@ -185,6 +191,9 @@
|
||||
'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Per costruire richieste (query) più complesse si usano (...)&(...) come "e" (AND), (...)|(...) come "o" (OR), e ~(...) come negazione (NOT).',
|
||||
'User %(id)s Logged-in': 'User %(id)s Logged-in',
|
||||
'User %(id)s Logged-out': 'User %(id)s Logged-out',
|
||||
'User %(id)s Password changed': 'User %(id)s Password changed',
|
||||
'User %(id)s Password reset': 'User %(id)s Password reset',
|
||||
'User %(id)s Profile updated': 'User %(id)s Profile updated',
|
||||
'User %(id)s Registered': 'User %(id)s Registered',
|
||||
'User ID': 'ID Utente',
|
||||
'Verify Password': 'Verify Password',
|
||||
|
||||
@@ -107,6 +107,7 @@ div.flash {
|
||||
-webkit-border-radius:5px;
|
||||
z-index:2000;
|
||||
}
|
||||
div.flash:hover { opacity:0.25; }
|
||||
|
||||
div.error_wrapper {display:block}
|
||||
div.error {
|
||||
|
||||
@@ -81,6 +81,8 @@ body {
|
||||
.ie-lte7 #navbar .auth_navbar, #navbar .auth_navbar a {color:expression(this.parentNode.currentStyle['color']); /* ie7 doesn't support inherit */}
|
||||
|
||||
#navbar .auth_navbar a:hover {color:white;text-decoration:none;} /* this overwrite bootswatch */
|
||||
ul#navbar{padding:0;} /*reset ul padding */
|
||||
ul#navbar>.auth_navbar{display:inline-block;padding:5px;} /* set padding of span.auth_navbar inside ul*/
|
||||
|
||||
body {
|
||||
height:auto; /*to avoid vertical scroll bar*/
|
||||
|
||||
@@ -25,10 +25,10 @@
|
||||
<meta name="google-site-verification" content="" />
|
||||
|
||||
<!-- Mobile Viewport Fix
|
||||
j.mp/mobileviewport & davidbcalhoun.com/2010/viewport-metatag
|
||||
device-width: Occupy full width of the screen in its current orientation
|
||||
initial-scale = 1.0 retains dimensions instead of zooming out if page height > device height
|
||||
user-scalable = yes allows the user to zoom in -->
|
||||
j.mp/mobileviewport & davidbcalhoun.com/2010/viewport-metatag
|
||||
device-width: Occupy full width of the screen in its current orientation
|
||||
initial-scale = 1.0 retains dimensions instead of zooming out if page height > device height
|
||||
user-scalable = yes allows the user to zoom in -->
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<link rel="shortcut icon" href="{{=URL('static','images/favicon.ico')}}" type="image/x-icon">
|
||||
@@ -69,20 +69,20 @@
|
||||
<div class="navbar navbar-fixed-top">
|
||||
<div class="navbar-inner">
|
||||
<div class="container">
|
||||
<!-- the next tag is necessary for bootstrap menus, do not remove -->
|
||||
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
|
||||
<!-- the next tag is necessary for bootstrap menus, do not remove -->
|
||||
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</a>
|
||||
<a class="brand" href="#">web2py™ </a>
|
||||
<div id="navbar">{{='auth' in globals() and auth.navbar() or ''}}</div>
|
||||
<div class="nav-collapse">
|
||||
{{is_mobile=request.user_agent().is_mobile}}
|
||||
{{if response.menu:}}
|
||||
{{=MENU(response.menu, _class='mobile-menu nav' if is_mobile else 'nav',mobile=is_mobile,li_class='dropdown',ul_class='dropdown-menu')}}
|
||||
{{pass}}
|
||||
</div><!--/.nav-collapse -->
|
||||
<a class="brand" href="#">web2py™ </a>
|
||||
<ul id="navbar" class="nav pull-right">{{='auth' in globals() and auth.navbar(mode="dropdown") or ''}}</ul>
|
||||
<div class="nav-collapse">
|
||||
{{is_mobile=request.user_agent().is_mobile}}
|
||||
{{if response.menu:}}
|
||||
{{=MENU(response.menu, _class='mobile-menu nav' if is_mobile else 'nav',mobile=is_mobile,li_class='dropdown',ul_class='dropdown-menu')}}
|
||||
{{pass}}
|
||||
</div><!--/.nav-collapse -->
|
||||
</div>
|
||||
</div>
|
||||
</div><!--/top navbar -->
|
||||
@@ -93,38 +93,38 @@
|
||||
<!-- Masthead ================================================== -->
|
||||
<header class="mastheader" id="header">
|
||||
<div class="page-header">
|
||||
<h1>
|
||||
{{=response.title or request.application}}
|
||||
<small>{{=response.subtitle or ''}}</small>
|
||||
</h1>
|
||||
<h1>
|
||||
{{=response.title or request.application}}
|
||||
<small>{{=response.subtitle or ''}}</small>
|
||||
</h1>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<section id="main" class="main span12">
|
||||
<div class="row">
|
||||
{{if left_sidebar_enabled:}}
|
||||
<div class="span3 left-sidebar">
|
||||
{{block left_sidebar}}
|
||||
<h3>Left Sidebar</h3>
|
||||
<p></p>
|
||||
{{end}}
|
||||
</div>
|
||||
{{pass}}
|
||||
{{if left_sidebar_enabled:}}
|
||||
<div class="span3 left-sidebar">
|
||||
{{block left_sidebar}}
|
||||
<h3>Left Sidebar</h3>
|
||||
<p></p>
|
||||
{{end}}
|
||||
</div>
|
||||
{{pass}}
|
||||
|
||||
<div class="{{=middle_columns}}">
|
||||
{{block center}}
|
||||
{{include}}
|
||||
{{end}}
|
||||
</div>
|
||||
<div class="{{=middle_columns}}">
|
||||
{{block center}}
|
||||
{{include}}
|
||||
{{end}}
|
||||
</div>
|
||||
|
||||
{{if right_sidebar_enabled:}}
|
||||
<div class="span3">
|
||||
{{block right_sidebar}}
|
||||
<h3>Right Sidebar</h3>
|
||||
<p></p>
|
||||
{{end}}
|
||||
</div>
|
||||
{{pass}}
|
||||
{{if right_sidebar_enabled:}}
|
||||
<div class="span3">
|
||||
{{block right_sidebar}}
|
||||
<h3>Right Sidebar</h3>
|
||||
<p></p>
|
||||
{{end}}
|
||||
</div>
|
||||
{{pass}}
|
||||
</div><!--/row-->
|
||||
</section><!--/main-->
|
||||
|
||||
@@ -132,11 +132,11 @@
|
||||
<footer class="footer" id="footer">
|
||||
{{block footer}} <!-- this is default footer -->
|
||||
<div class="footer-content">
|
||||
<div class="copyright pull-left">{{=T('Copyright')}} © {{=request.now.year}}</div>
|
||||
<div id="poweredBy" class="pull-right">
|
||||
{{=T('Powered by')}}
|
||||
<a href="http://www.web2py.com/">web2py</a>
|
||||
</div>
|
||||
<div class="copyright pull-left">{{=T('Copyright')}} © {{=request.now.year}}</div>
|
||||
<div id="poweredBy" class="pull-right">
|
||||
{{=T('Powered by')}}
|
||||
<a href="http://www.web2py.com/">web2py</a>
|
||||
</div>
|
||||
</div>
|
||||
{{end}}
|
||||
</footer>
|
||||
@@ -175,3 +175,4 @@
|
||||
<script src="{{=URL('static','js/share.js',vars=dict(static=URL('static','images')))}}"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
+33
-7
@@ -1208,16 +1208,17 @@ class Auth(object):
|
||||
|
||||
def navbar(self, prefix='Welcome', action=None,
|
||||
separators=(' [ ',' | ',' ] '), user_identifier=DEFAULT,
|
||||
referrer_actions=DEFAULT):
|
||||
referrer_actions=DEFAULT, mode='default'):
|
||||
referrer_actions = [] if not referrer_actions else referrer_actions
|
||||
request = current.request
|
||||
asdropdown = (mode == 'dropdown')
|
||||
T = current.T
|
||||
if isinstance(prefix, str):
|
||||
prefix = T(prefix)
|
||||
if prefix:
|
||||
prefix = prefix.strip() + ' '
|
||||
if not action:
|
||||
action=self.url(self.settings.function)
|
||||
action = self.url(self.settings.function)
|
||||
s1,s2,s3 = separators
|
||||
if URL() == action:
|
||||
next = ''
|
||||
@@ -1244,11 +1245,19 @@ class Auth(object):
|
||||
profile = A(T('Profile'), _href=href('profile'))
|
||||
password = A(T('Password'), _href=href('change_password'))
|
||||
bar = SPAN(prefix, user_identifier, s1, logout, s3, _class='auth_navbar')
|
||||
|
||||
if asdropdown:
|
||||
logout = LI(A(I(_class='icon-off'), ' '+T('Logout'), _href='%s/logout?_next=%s' %
|
||||
(action, urllib.quote(self.settings.logout_next)))) # the space before T('Logout') is intentional. It creates a gap between icon and text
|
||||
profile = LI(A(I(_class='icon-user'), ' '+T('Profile'), _href=href('profile')))
|
||||
password = LI(A(I(_class='icon-lock'), ' '+T('Password'), _href=href('change_password')))
|
||||
bar = UL(logout,_class='dropdown-menu') # logout will be the last item in list
|
||||
|
||||
if not 'profile' in self.settings.actions_disabled:
|
||||
bar.insert(-1, s2)
|
||||
if not asdropdown: bar.insert(-1, s2)
|
||||
bar.insert(-1, profile)
|
||||
if not 'change_password' in self.settings.actions_disabled:
|
||||
bar.insert(-1, s2)
|
||||
if not asdropdown: bar.insert(-1, s2)
|
||||
bar.insert(-1, password)
|
||||
else:
|
||||
login = A(T('Login'), _href=href('login'))
|
||||
@@ -1259,17 +1268,34 @@ class Auth(object):
|
||||
T('Lost password?'), _href=href('request_reset_password'))
|
||||
bar = SPAN(s1, login, s3, _class='auth_navbar')
|
||||
|
||||
if asdropdown:
|
||||
user_identifier = ''
|
||||
login = LI(A(I(_class='icon-off'), ' '+T('Login'), _href=href('login'))) #the space before T('Login') is intentional. It creates a gap between icon and text
|
||||
register = LI(A(I(_class='icon-user'), ' '+T('Register'), _href=href('register')))
|
||||
retrieve_username = LI(A(I(_class='icon-edit'), ' '+T('Forgot username?'), _href=href('retrieve_username')))
|
||||
lost_password = LI(A(I(_class='icon-lock'), ' '+T('Lost password?'), _href=href('request_reset_password')))
|
||||
bar = UL(login,_class='dropdown-menu') # login will be the last item in list
|
||||
|
||||
if not 'register' in self.settings.actions_disabled:
|
||||
bar.insert(-1, s2)
|
||||
if not asdropdown: bar.insert(-1, s2)
|
||||
bar.insert(-1, register)
|
||||
if self.settings.use_username and not 'retrieve_username' \
|
||||
in self.settings.actions_disabled:
|
||||
bar.insert(-1, s2)
|
||||
if not asdropdown: bar.insert(-1, s2)
|
||||
bar.insert(-1, retrieve_username)
|
||||
if not 'request_reset_password' \
|
||||
in self.settings.actions_disabled:
|
||||
bar.insert(-1, s2)
|
||||
if not asdropdown: bar.insert(-1, s2)
|
||||
bar.insert(-1, lost_password)
|
||||
|
||||
if asdropdown:
|
||||
bar.insert(-1, LI('',_class='divider'))
|
||||
if self.user_id:
|
||||
bar = LI(A(prefix, user_identifier, _href='#'),
|
||||
bar,_class='dropdown')
|
||||
else:
|
||||
bar = LI(A(T('Login'), _href='#'),
|
||||
bar,_class='dropdown')
|
||||
return bar
|
||||
|
||||
def __get_migrate(self, tablename, migrate=True):
|
||||
|
||||
Reference in New Issue
Block a user