Merge pull request #1876 from leonelcamara/bs4checkboxes

Update bootstrap from a v4-alpha version to the latest release
This commit is contained in:
mdipierro
2018-03-20 16:54:14 -05:00
committed by GitHub
8 changed files with 2506 additions and 51 deletions

View File

@@ -13,14 +13,17 @@
'**%(items)s** items, **%(bytes)s** %%{byte(bytes)}': '**%(items)s** items, **%(bytes)s** %%{byte(bytes)}',
'**not available** (requires the Python [[guppy http://pypi.python.org/pypi/guppy/ popup]] library)': '**not available** (requires the Python [[guppy http://pypi.python.org/pypi/guppy/ popup]] library)',
'?': '?',
'@markmin\x01An error occured, please [[reload %s]] the page': 'An error occured, please [[reload %s]] the page',
'@markmin\x01Number of entries: **%s**': 'Number of entries: **%s**',
'``**not available**``:red (requires the Python [[guppy http://pypi.python.org/pypi/guppy/ popup]] library)': '``**not available**``:red (requires the Python [[guppy http://pypi.python.org/pypi/guppy/ popup]] library)',
'About': 'About',
'About': 'Sobre',
'Access Control': 'Controle de acesso',
'admin': 'administrador',
'Administrative Interface': 'Interface Administrativa',
'Administrative interface': 'Painel Administrativo',
'Ajax Recipes': 'Formulas Ajax',
'An error occured, please [[reload %s]] the page': 'Ocorreu um erro, por favor [[recarregue %s]] a página',
'API Example': 'API Example',
'appadmin is disabled because insecure channel': 'appadmin está desactivada pois o canal é inseguro',
'Are you sure you want to delete this object?': 'Tem a certeza que quer deletar este objeto?',
'Author Reference Auth User': 'Author Reference Auth User',
@@ -73,27 +76,31 @@
'Disk Cache Keys': 'Disk Cache Keys',
'Disk Cleared': 'Disk Cleared',
'DISK contains items up to **%(hours)02d** %%{hour(hours)} **%(min)02d** %%{minute(min)} **%(sec)02d** %%{second(sec)} old.': 'DISK contains items up to **%(hours)02d** %%{hour(hours)} **%(min)02d** %%{minute(min)} **%(sec)02d** %%{second(sec)} old.',
'Documentation': 'Documentation',
"Don't know what to do?": "Don't know what to do?",
'Documentation': 'Documentação',
"Don't know what to do?": 'Não sabe o que fazer?',
'done!': 'concluído!',
'Download': 'Download',
'E-mail': 'E-mail',
'Edit': 'Editar',
'edit category': 'edit category',
'edit comment': 'edit comment',
'edit category': 'editar categoria',
'edit comment': 'editar comentário',
'Edit current record': 'Edição de registo currente',
'edit post': 'edit post',
'edit post': 'editar post',
'edit profile': 'Editar perfil',
'Edit This App': 'Edite esta aplicação',
'Email': 'Email',
'Email and SMS': 'Email and SMS',
'Errors': 'Errors',
'Email and SMS': 'Email e SMS',
'Enter an integer between %(min)g and %(max)g': 'Enter an integer between %(min)g and %(max)g',
'Errors': 'Erros',
'export as csv file': 'exportar como ficheiro csv',
'FAQ': 'FAQ',
'First name': 'First name',
'First Name': 'First Name',
'For %s #%s': 'For %s #%s',
'Forms and Validators': 'Forms and Validators',
'Free Applications': 'Free Applications',
'Graph Model': 'Graph Model',
'Grid Example': 'Grid Example',
'Groups': 'Groups',
'Hello World': 'Olá Mundo',
'Helping web2py': 'Helping web2py',
@@ -106,10 +113,11 @@
'insert new': 'inserir novo',
'insert new %s': 'inserir novo %s',
'Internal State': 'Estado interno',
'Introduction': 'Introduction',
'Introduction': 'Introdução',
'Invalid Query': 'Consulta Inválida',
'invalid request': 'Pedido Inválido',
'Key': 'Key',
'Last name': 'Last name',
'Last Name': 'Last Name',
'Layout': 'Esboço',
'Layout Plugins': 'Layout Plugins',
@@ -117,8 +125,9 @@
'Live Chat': 'Live Chat',
'Log In': 'Log In',
'login': 'login',
'Login': 'Login',
'logout': 'logout',
'Lost Password': 'Lost Password',
'Lost Password': 'Perdeu a Senha',
'Main Menu': 'Menu Principal',
'Manage %(action)s': 'Manage %(action)s',
'Manage Access Control': 'Manage Access Control',
@@ -128,7 +137,7 @@
'Modified By': 'Modified By',
'Modified On': 'Modified On',
'My Sites': 'My Sites',
'Name': 'Name',
'Name': 'Nome',
'New Record': 'Novo Registo',
'new record inserted': 'novo registo inserido',
'next %s rows': 'next %s rows',
@@ -136,7 +145,7 @@
'No Data': 'No Data',
'No databases in this application': 'Não há bases de dados nesta aplicação',
'Number of entries: **%s**': 'Number of entries: **%s**',
'Online book': 'Online book',
'Online book': 'Livro Online',
'Online examples': 'Exemplos online',
'or import from csv file': 'ou importe a partir de ficheiro csv',
'Other Plugins': 'Other Plugins',
@@ -160,13 +169,17 @@
'RAM Cache Keys': 'RAM Cache Keys',
'Ram Cleared': 'Ram Cleared',
'RAM contains items up to **%(hours)02d** %%{hour(hours)} **%(min)02d** %%{minute(min)} **%(sec)02d** %%{second(sec)} old.': 'RAM contains items up to **%(hours)02d** %%{hour(hours)} **%(min)02d** %%{minute(min)} **%(sec)02d** %%{second(sec)} old.',
'Recipes': 'Recipes',
'Recipes': 'Receitas',
'Record': 'registo',
'record does not exist': 'registo inexistente',
'Record id': 'id de registo',
'Register': 'Register',
'register': 'register',
'Register': 'Registar',
'register': 'registar',
'Registration identifier': 'Registration identifier',
'Registration key': 'Registration key',
'Remember me (for 30 days)': 'Lembrar de mim (por 30 dias)',
'Replyto Reference Post': 'Replyto Reference Post',
'Reset Password key': 'Reset Password key',
'Role': 'Role',
'Roles': 'Roles',
'Rows in Table': 'Linhas numa tabela',
@@ -183,12 +196,14 @@
'show category': 'show category',
'show comment': 'show comment',
'show post': 'show post',
'Sign Up': 'Sign Up',
'Sign Up': 'Registar-se',
'Sign up': 'Registar-se',
'Size of cache:': 'Size of cache:',
'state': 'estado',
'Statistics': 'Statistics',
'Stylesheet': 'Folha de estilo',
'submit': 'submit',
'submit': 'submeter',
'Submit': 'Submit',
'Support': 'Support',
'Sure you want to delete this object?': 'Tem a certeza que deseja eliminar este objecto?',
'Table': 'tabela',
@@ -212,9 +227,10 @@
'Welcome %s': 'Bem-vindo(a) %s',
'Welcome to Gluonization': 'Bem vindo ao Web2py',
'Welcome to web2py': 'Bem-vindo(a) ao web2py',
'Welcome to web2py!': 'Welcome to web2py!',
'Welcome to web2py!': 'Bem-vindo(a) ao web2py!',
'When': 'When',
'Which called the function %s located in the file %s': 'Which called the function %s located in the file %s',
'Wiki Example': 'Wiki Example',
'Working...': 'Working...',
'You are successfully running web2py': 'You are successfully running web2py',
'You can modify this application and adapt it to your needs': 'You can modify this application and adapt it to your needs',

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +1,4 @@
ul.navbar-nav.navbar-right {
position: absolute;
right: 100px;
}
label, th {
font-weigth: bold;
white-space: nowrap;
@@ -318,9 +315,6 @@ td.w2p_fc,
.web2py_grid table {
width: 100%;
}
input[type=checkbox], input[type=radio] {
margin: 4px 4px 0 0;
}
/* for backward compatbility with pre-font-awesome */
.icon.plus,.icon.arrowleft,.icon.download,.icon.trash,.icon.pen,.icon.arrowright,.icon.magnifier {
@@ -337,4 +331,4 @@ input[type=checkbox], input[type=radio] {
.icon.trash:before { content: "\f1f8";}
.icon.pen:before { content: "\f040";}
.icon.arrowright:before { content: "\f061";}
.icon.magnifier:before { content: "\f002";}
.icon.magnifier:before { content: "\f002";}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@@ -10,10 +10,10 @@
{{
if request.args(0)=='login':
if not 'register' in auth.settings.actions_disabled:
form.add_button(T('Sign Up'),URL(args='register', vars={'_next': request.vars._next} if request.vars._next else None),_class='btn btn-default btn-secondary')
form.add_button(T('Sign Up'),URL(args='register', vars={'_next': request.vars._next} if request.vars._next else None),_class='btn btn-default btn-secondary ml-1')
pass
if not 'request_reset_password' in auth.settings.actions_disabled:
form.add_button(T('Lost Password'),URL(args='request_reset_password'),_class='btn btn-default btn-secondary')
form.add_button(T('Lost Password'),URL(args='request_reset_password'),_class='btn btn-default btn-secondary ml-1')
pass
pass
=form

View File

@@ -35,7 +35,7 @@
<body>
<div class="w2p_flash alert alert-dismissable">{{=response.flash or ''}}</div>
<!-- Navbar ======================================= -->
<nav class="navbar navbar-toggleable-md navbar-light bg-faded">
<nav class="navbar navbar-expand-lg navbar-light bg-faded">
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
@@ -63,7 +63,7 @@
<input class="form-control mr-sm-2" type="text" placeholder="Search">
</form>
{{if 'auth' in globals():}}
<ul class="navbar-nav navbar-right">
<ul class="navbar-nav ml-lg-auto"">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{if auth.user:}}{{=auth.user.first_name}}{{else:}}LOGIN{{pass}}
@@ -111,6 +111,7 @@
</footer>
{{end}}
<!-- The javascript =============================== -->
<script src="{{=URL('static','js/popper.js')}}"></script>
<script src="{{=URL('static','js/bootstrap.min.js')}}"></script>
<script src="{{=URL('static','js/web2py-bootstrap4.js')}}"></script>
{{block page_js}}{{end page_js}}

View File

@@ -1106,14 +1106,16 @@ def formstyle_bootstrap4_stacked(form, fields):
if controls['_type'] == 'button':
controls.add_class('btn btn-secondary')
elif controls['_type'] == 'file':
controls.add_class('input-file')
controls.add_class('form-control-file')
elif controls['_type'] in ('text', 'password'):
controls.add_class('form-control')
elif controls['_type'] == 'checkbox':
elif controls['_type'] == 'checkbox' or controls['_type'] == 'radio':
controls.add_class('form-check-input')
label['_for'] = None
label.add_class('form-check-label')
label.insert(0, controls)
label.insert(0, ' ')
_controls = DIV(label, _help, _class="checkbox")
_controls = DIV(label, _help, _class="form-check")
label = ''
elif isinstance(controls, (SELECT, TEXTAREA)):
controls.add_class('form-control')
@@ -1142,7 +1144,6 @@ def formstyle_bootstrap4_inline_factory(col_label_size=3):
Experimental!
"""
def _inner(form, fields):
form.add_class('form-horizontal')
label_col_class = "col-sm-%d" % col_label_size
col_class = "col-sm-%d" % (12 - col_label_size)
offset_class = "col-sm-offset-%d" % col_label_size
@@ -1162,19 +1163,19 @@ def formstyle_bootstrap4_inline_factory(col_label_size=3):
controls.add_class('input-file')
elif controls['_type'] in ('text', 'password'):
controls.add_class('form-control')
elif controls['_type'] == 'checkbox':
label['_for'] = None
elif controls['_type'] == 'checkbox' or controls['_type'] == 'radio':
controls.add_class('form-check-input')
label.add_class('form-check-label')
label.insert(0, controls)
label.insert(1, ' ')
_controls = DIV(DIV(label, _help, _class="checkbox"),
_class="%s %s" % (offset_class, col_class))
label = ''
#label.insert(0, ' ')
_controls = DIV(DIV(label, _help, _class="form-check"), _class="%s" % col_class)
label = DIV(_class="sm-hidden %s" % label_col_class)
elif isinstance(controls, (SELECT, TEXTAREA)):
controls.add_class('form-control')
elif isinstance(controls, SPAN):
_controls = P(controls.components,
_class="form-control-static %s" % col_class)
_class="form-control-plaintext %s" % col_class)
elif isinstance(controls, UL):
for e in controls.elements("input"):
e.add_class('form-control')