diff --git a/CHANGELOG b/CHANGELOG
index 782f9b061d..531961e1af 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,4 @@
+* Customize bootstrap default style
* Set field's name as input's name attribute
* Position copied records based on order
* Sanitize translated RichtText fields content (issue9453)
diff --git a/COPYRIGHT b/COPYRIGHT
index 5e59971036..9cba55f27a 100644
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -3,6 +3,7 @@ Copyright (C) 2012-2020 Cédric Krier.
Copyright (C) 2012-2014 Bertrand Chenal.
Copyright (C) 2012-2020 B2CK SPRL.
Copyright (C) 2019 Jitbit.
+Copyright (C) 2013 Thomas Park
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/Gruntfile.js b/Gruntfile.js
index 990c6c5901..d530bd03fb 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -100,19 +100,32 @@ module.exports = function(grunt) {
less: {
dev: {
options: {
- paths: ['src', 'bower_components/bootstrap/less']
+ paths: [
+ 'src',
+ 'bower_components',
+ 'bower_components/bootstrap',
+ 'bower_components/bootstrap/less',
+ 'bower_components/bootstrap-rtl-ondemand/less',
+ 'bower_components/eonasdan-bootstrap-datetimepicker/src/less',
+ ]
},
files: {
- 'dist/<%= pkg.name %>.css': 'src/*.less'
+ 'dist/<%= pkg.name %>.css': 'src/sao.less'
}
},
'default': {
options: {
- paths: ['src', 'bower_components/bootstrap/less'],
+ paths: [
+ 'src',
+ 'bower_components',
+ 'bower_components/bootstrap/less',
+ 'bower_components/bootstrap-rtl-ondemand/less',
+ 'bower_components/eonasdan-bootstrap-datetimepicker/src/less',
+ ],
yuicompress: true
},
files: {
- 'dist/<%= pkg.name %>.min.css': 'src/*.less'
+ 'dist/<%= pkg.name %>.min.css': 'src/sao.less'
}
}
},
diff --git a/index.html b/index.html
index d8d6d1b4ca..ef61807acd 100644
--- a/index.html
+++ b/index.html
@@ -1,7 +1,7 @@
-
+
@@ -23,9 +23,6 @@ this repository contains the full copyright notices and license terms. -->
-
-
-
@@ -42,7 +39,7 @@ this repository contains the full copyright notices and license terms. -->
-
+
@@ -59,9 +61,20 @@ this repository contains the full copyright notices and license terms. -->
-
diff --git a/src/input-icon.less b/src/input-icon.less
index 575b656383..2a0782d7de 100644
--- a/src/input-icon.less
+++ b/src/input-icon.less
@@ -1,6 +1,5 @@
-/*
- * Input icons
- */
+/* This file is part of Tryton. The COPYRIGHT file at the top level of
+ this repository contains the full copyright notices and license terms. */
@import "variables";
.input-icon {
diff --git a/src/offcanvas.less b/src/offcanvas.less
index be62fa96a0..95b7e76d4c 100644
--- a/src/offcanvas.less
+++ b/src/offcanvas.less
@@ -1,7 +1,5 @@
-/*
- * Off Canvas
- * --------------------------------------------------
- */
+/* This file is part of Tryton. The COPYRIGHT file at the top level of
+ this repository contains the full copyright notices and license terms. */
@import "variables";
@offcanvas-md: @screen-md-max;
diff --git a/src/sao-variables.less b/src/sao-variables.less
new file mode 100644
index 0000000000..7c27f22317
--- /dev/null
+++ b/src/sao-variables.less
@@ -0,0 +1,29 @@
+/* This file is part of Tryton. The COPYRIGHT file at the top level of
+ this repository contains the full copyright notices and license terms. */
+@brand-primary: #267f82;
+@brand-success: #32ad52;
+@brand-info: #71bdc1;
+@brand-warning: #e78e42;
+@brand-danger: #e74842;
+
+@state-selected-text: lighten(@brand-primary, 25%);
+@state-selected-bg: lighten(@brand-primary, 50%);
+@state-selected-border: darken(spin(@state-selected-bg, -10), 5%);
+
+@input-border-focus: lighten(@brand-primary, 25%);
+
+@navbar-inverse-bg: @brand-primary;
+
+@navbar-inverse-link-color: lighten(@brand-primary, 30%);
+
+@navbar-inverse-toggle-hover-bg: rgba(0,0,0,0.5);
+@navbar-inverse-toggle-icon-bar-bg: rgba(0,0,0,0.5);
+
+@nav-tabs-justified-link-border-color: @nav-tabs-border-color;
+
+@panel-default-text: #fff;
+@panel-default-heading-bg: @brand-primary;
+
+@icon-font-path: "../bower_components/bootstrap/fonts/";
+
+@font-size-small: @font-size-base;
diff --git a/src/sao.js b/src/sao.js
index 1218c6d770..cb3e816d64 100644
--- a/src/sao.js
+++ b/src/sao.js
@@ -281,9 +281,9 @@ var Sao = {};
Sao.config.display_size = 20;
Sao.config.bug_url = 'https://bugs.tryton.org/';
Sao.config.title = 'Tryton';
- Sao.config.icon_colors = '#3465a4,#555753,#cc0000'.split(',');
- Sao.config.calendar_colors = '#fff,#3465a4'.split(',');
- Sao.config.graph_color = '#3465a4';
+ Sao.config.icon_colors = '#267f82,#3e4950,#e78e42'.split(',');
+ Sao.config.calendar_colors = '#fff,#267f82'.split(',');
+ Sao.config.graph_color = '#267f82';
Sao.config.bus_timeout = 10 * 60 * 1000;
Sao.i18n = i18n();
@@ -350,10 +350,6 @@ var Sao = {};
Sao.Action.execute(action_id, {}, null, {});
});
Sao.set_title();
- Sao.common.ICONFACTORY.get_icon_url('tryton-menu')
- .then(function(url) {
- jQuery('.navbar-brand > img').attr('src', url);
- });
var new_lang = preferences.language != Sao.i18n.getLocale();
var prm = jQuery.Deferred();
Sao.i18n.setlang(preferences.language).always(function() {
@@ -572,7 +568,6 @@ var Sao = {};
var session = Sao.Session.current_session;
Sao.Tab.tabs.close(true).done(function() {
jQuery('#user-preferences').empty();
- jQuery('#user-logout').empty();
jQuery('#user-favorites').empty();
jQuery('#global-search').empty();
jQuery('#menu').empty();
@@ -585,7 +580,6 @@ var Sao = {};
Sao.Tab.tabs.close(true).done(function() {
jQuery('#user-preferences').empty();
jQuery('#user-favorites').empty();
- jQuery('#user-logout').empty();
jQuery('#menu').empty();
new Sao.Window.Preferences(function() {
Sao.Session.current_session.reset_context();
@@ -665,7 +659,6 @@ var Sao = {};
Sao.user_menu = function(preferences) {
jQuery('#user-preferences').empty();
jQuery('#user-favorites').empty();
- jQuery('#user-logout').empty();
jQuery('#user-preferences').append(jQuery(' ', {
'href': '#',
'title': preferences.status_bar,
@@ -674,17 +667,12 @@ var Sao = {};
Sao.preferences();
}).text(preferences.status_bar));
var title = Sao.i18n.gettext("Logout");
- jQuery('#user-logout').append(jQuery(' ', {
- 'href': '#',
- 'title': title,
- 'aria-label': title,
- }).click(Sao.logout).append(
- Sao.common.ICONFACTORY.get_icon_img('tryton-exit', {
- 'class': 'icon hidden-xs',
- 'aria-hidden': true,
- })).append(jQuery(' ', {
- 'class': 'visible-xs',
- }).text(title)));
+ jQuery('#user-logout > a')
+ .attr('title', title)
+ .attr('aria-label', title)
+ .off()
+ .click(Sao.logout)
+ .find('span:not(.icon)').text(title);
};
Sao.main_menu_row_activate = function() {
diff --git a/src/sao.less b/src/sao.less
index a6f7c10b48..f959a4a553 100644
--- a/src/sao.less
+++ b/src/sao.less
@@ -1,5 +1,76 @@
-@import "variables";
-@import "mixins";
+/* This file is part of Tryton. The COPYRIGHT file at the top level of
+ this repository contains the full copyright notices and license terms. */
+@import "bootstrap";
+@import "bootstrap-rtl";
+@import "bootstrap-datetimepicker-build";
+@import "sao-variables";
+html[theme="default"] {
+ @import "theme";
+}
+
+// Fix double rtl prefix
+.float-rtl-grid-columns(@class, @rtl-prefix) {
+ .col(@index) { // initial
+ @item: ~".col-@{class}-@{index}";
+ .col((@index + 1), @item);
+ }
+ .col(@index, @list) when (@index =< @grid-columns) { // general
+ @item: ~".col-@{class}-@{index}";
+ .col((@index + 1), ~"@{list}, @{item}");
+ }
+ .col(@index, @list) when (@index > @grid-columns) { // terminal
+ @{list} {
+ float: right;
+ }
+ }
+ .col(1); // kickstart it
+}
+
+
+.navbar-inverse {
+ .close {
+ color: @navbar-inverse-link-color;
+
+ &:hover,
+ &:focus {
+ color: @navbar-inverse-link-hover-color;
+ background-color: @navbar-inverse-link-hover-bg;
+ }
+ }
+ .active .close {
+ &,
+ &:hover,
+ &:focus {
+ color: @navbar-inverse-link-active-color;
+ background-color: @navbar-inverse-link-active-bg;
+ }
+ }
+}
+
+.navbar {
+ .icon {
+ display: inline-block;
+ height: unit(@line-height-base, em);
+ vertical-align: middle;
+ }
+}
+
+.btn-primary {
+ .icon {
+ filter: brightness(0) invert(1);
+ }
+}
+
+.panel-heading {
+ a {
+ color: inherit;
+ }
+}
+
+.modal-header {
+ background-color: @brand-primary;
+ color: #fff;
+}
#tablist > li > a {
> span {
@@ -73,8 +144,8 @@
white-space: nowrap;
}
-.list-group-item-variant(selected; @state-info-bg; @state-info-text);
-.table-row-variant(selected; @state-info-bg);
+.list-group-item-variant(selected; @state-selected-bg; @state-selected-text);
+.table-row-variant(selected; @state-selected-bg);
/* Duplicate bootstrap variant to have precedence over selected */
.table-row-variant(success; @state-success-bg);
.table-row-variant(warning; @state-warning-bg);
@@ -400,7 +471,7 @@ img.icon {
display: inline-table;
}
table.form-container > tbody > tr > td {
- padding: 1px;
+ padding: 2px;
}
table.form-hcontainer > tbody > tr > td {
padding-top: 0px;
@@ -523,6 +594,7 @@ img.icon {
label {
font-weight: normal;
display: inline;
+ padding: 0 5px;
&.required {
font-weight: bold;
}
@@ -534,7 +606,7 @@ img.icon {
margin-bottom: 15px;
}
.panel-heading {
- padding: 1px 1px;
+ padding: 2px 2px;
}
fieldset.form-group_ {
overflow: auto;
@@ -573,12 +645,6 @@ input.column-boolean {
.center-block();
}
-.form-boolean, .dict-boolean, .editabletree-boolean {
- input[type=checkbox] {
- width: initial;
- }
-}
-
.dict-label {
text-align: right;
text-align: end;
@@ -756,6 +822,8 @@ input.column-boolean {
transform: translateX(-50%);
z-index: 1000;
min-width: 50%;
+ text-align: center;
+ font-size: @font-size-large;
}
img.global-search-icon {
@@ -767,3 +835,7 @@ img.favorite-icon {
width: 1em;
height: 1em;
}
+
+@import "input-icon";
+@import "offcanvas";
+@import (optional) "custom.less";
diff --git a/src/screen.js b/src/screen.js
index bb382e29ac..d5c2339418 100644
--- a/src/screen.js
+++ b/src/screen.js
@@ -29,7 +29,7 @@
this.el.append(this.filter_box);
this.filter_button = jQuery(' ', {
type: 'button',
- 'class': 'btn btn-default'
+ 'class': 'btn btn-link'
}).text(Sao.i18n.gettext('Filters'));
this.filter_button.click(this.search_box.bind(this));
this.search_entry = jQuery(' ', {
diff --git a/src/tab.js b/src/tab.js
index d0e2449e18..d20b3b2530 100644
--- a/src/tab.js
+++ b/src/tab.js
@@ -164,7 +164,7 @@
'class': 'toolbar panel-heading',
'role': 'toolbar'
}).append(jQuery('
', {
- 'class': 'container-fluid'
+ 'class': 'container-fluid navbar-inverse'
}).append(jQuery('
', {
'class': 'dropdown navbar-header navbar-left flip'
}).append(jQuery(' ', {
@@ -1204,6 +1204,7 @@
color = '';
}
badge.css('background-color', color);
+ badge.css('color', '#fff');
badge.text(text);
button.attr('title', title);
button.prop('disabled', disabled);
diff --git a/src/theme.less b/src/theme.less
new file mode 100644
index 0000000000..77c87b25d2
--- /dev/null
+++ b/src/theme.less
@@ -0,0 +1,568 @@
+/* This file is part of Tryton. The COPYRIGHT file at the top level of
+ this repository contains the full copyright notices and license terms. */
+/* The MIT License (MIT)
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+@input-border-radius: 0;
+@input-border-radius-large: 0;
+@input-border-radius-small: 0;
+@input-bg-disabled: transparent;
+
+.navbar {
+ border: none;
+ .box-shadow(0 1px 2px rgba(0,0,0,.3));
+}
+
+#btn(@class, @bg) {
+ .btn-@{class} {
+
+ &:focus,
+ &:hover,
+ &:active:hover {
+ background-color: darken(@bg, 6%);
+ }
+
+ &:active {
+ background-color: darken(@bg, 12%);
+ #gradient > .radial(darken(@bg, 12%) 10%, @bg 11%);
+ background-size: 1000% 1000%;
+ .box-shadow(2px 2px 4px rgba(0,0,0,.4));
+ }
+ }
+}
+
+#btn(default, @btn-default-bg);
+#btn(primary, @btn-primary-bg);
+#btn(success, @btn-success-bg);
+#btn(info, @btn-info-bg);
+#btn(warning, @btn-warning-bg);
+#btn(danger, @btn-danger-bg);
+#btn(link, #fff);
+
+.btn {
+ text-transform: uppercase;
+ border: none;
+ .box-shadow(1px 1px 4px rgba(0,0,0,.4));
+ .transition(all 0.4s);
+
+ &-link {
+ border-radius: @btn-border-radius-base;
+ .box-shadow(none);
+ color: @btn-default-color;
+
+ &:hover,
+ &:focus {
+ .box-shadow(none);
+ color: @btn-default-color;
+ text-decoration: none;
+ }
+ }
+
+ &-default {
+
+ &.disabled {
+ background-color: rgba(0, 0, 0, 0.1);
+ color: rgba(0, 0, 0, 0.4);
+ opacity: 1;
+ }
+ }
+}
+
+.table-hover {
+ > tbody > tr,
+ > tbody > tr > th,
+ > tbody > tr > td {
+ .transition(all 0.2s);
+ }
+}
+
+textarea,
+textarea.form-control,
+input.form-control,
+input[type=text],
+input[type=password],
+input[type=email],
+input[type=number],
+[type=text].form-control,
+[type=password].form-control,
+[type=email].form-control,
+[type=tel].form-control,
+[contenteditable].form-control {
+ padding: 0 5px;
+ border: none;
+ -webkit-appearance: none;
+ .box-shadow(inset 0 -1px 0 #ddd);
+
+ &:focus {
+ .box-shadow(inset 0 -2px 0 @brand-primary);
+ }
+
+ &[disabled],
+ &[readonly] {
+ .box-shadow(none);
+ border-bottom: 2px dotted #ddd;
+ }
+
+ &.input {
+ &-sm {
+ font-size: @font-size-small;
+ }
+
+ &-lg {
+ font-size: @font-size-large;
+ }
+ }
+}
+
+.input-group-lg > .form-control,
+.input-group-lg > .input-group-addon {
+ padding: 0 5px;
+}
+.input-group-sm > .form-control,
+.input-group-sm > .input-group-addon {
+ padding: 0 5px;
+}
+
+select,
+select.form-control {
+ border: 0;
+ border-radius: 0;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ padding-left: 0;
+ padding-right: 0;
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAAJ1BMVEVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmaP/QSjAAAADHRSTlMAAgMJC0uWpKa6wMxMdjkoAAAANUlEQVR4AeXJyQEAERAAsNl7Hf3X6xt0QL6JpZWq30pdvdadme+0PMdzvHm8YThHcT1H7K0BtOMDniZhWOgAAAAASUVORK5CYII=);
+ background-size: 13px;
+ background-repeat: no-repeat;
+ background-position: right center;
+ .box-shadow(inset 0 -1px 0 #ddd);
+ font-size: 16px;
+ line-height: 1.5;
+
+ &::-ms-expand {
+ display: none;
+ }
+
+ &.input {
+ &-sm {
+ font-size: @font-size-small;
+ }
+
+ &-lg {
+ font-size: @font-size-large;
+ }
+ }
+
+ &:focus {
+ .box-shadow(inset 0 -2px 0 @brand-primary);
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAAJ1BMVEUhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISF8S9ewAAAADHRSTlMAAgMJC0uWpKa6wMxMdjkoAAAANUlEQVR4AeXJyQEAERAAsNl7Hf3X6xt0QL6JpZWq30pdvdadme+0PMdzvHm8YThHcT1H7K0BtOMDniZhWOgAAAAASUVORK5CYII=);
+ }
+
+ &[multiple] {
+ background: none;
+ }
+}
+
+.radio,
+.radio-inline,
+.checkbox,
+.checkbox-inline {
+ label {
+ padding-left: 25px;
+ }
+
+ input[type="radio"],
+ input[type="checkbox"] {
+ margin-left: -25px;
+ }
+}
+
+input[type="radio"],
+.radio input[type="radio"],
+.radio-inline input[type="radio"] {
+ position: relative;
+ border: none;
+ -webkit-appearance: none;
+ appearance: none;
+ cursor: pointer;
+
+ &:focus {
+ outline: none;
+ }
+
+ &:before,
+ &:after {
+ content: "";
+ display: block;
+ width: 18px;
+ height: 18px;
+ left: 50%;
+ margin: auto;
+ margin-left: -9px;
+ border-radius: 50%;
+ .transition(240ms);
+ }
+
+ &.form-control:before,
+ &.form-control:after {
+ top: 6px;
+ }
+
+ &:before {
+ position: absolute;
+ background-color: @brand-primary;
+ .scale(0);
+ }
+
+ &:after {
+ position: relative;
+ border: 2px solid @gray;
+ }
+
+ &:checked:before {
+ .scale(0.5);
+ }
+
+ &:disabled:checked:before {
+ background-color: @gray-light;
+ }
+
+ &:checked:after {
+ border-color: @brand-primary;
+ }
+
+ &:disabled:after,
+ &[readonly]:after,
+ &:disabled:checked:after,
+ &[readonly]:checked:after {
+ border-color: @gray-light;
+ }
+}
+
+input[type="checkbox"],
+.checkbox input[type="checkbox"],
+.checkbox-inline input[type="checkbox"] {
+ position: relative;
+ border: none;
+ -webkit-appearance: none;
+ appearance: none;
+ cursor: pointer;
+
+ &:focus {
+ outline: none;
+ }
+
+ &:focus:before {
+ border-color: @brand-primary;
+ }
+
+ &:before {
+ content: "";
+ display: block;
+ width: 18px;
+ height: 18px;
+ margin: auto;
+ border: 2px solid @gray;
+ border-radius: 2px;
+ .transition(240ms);
+ }
+
+ &.form-control:before {
+ position: absolute;
+ top: 6px;
+ left: 0;
+ right: 0;
+ }
+
+ &:checked:after {
+ content: "";
+ position: absolute;
+ top: 1px;
+ left: 50%;
+ display: table;
+ width: 6px;
+ height: 12px;
+ margin: auto;
+ margin-left: -3px;
+ border: 2px solid #fff;
+ border-top-width: 0;
+ border-left-width: 0;
+ .rotate(45deg);
+ }
+
+ &.form-control:after {
+ top: 6px;
+ }
+
+ &:indeterminate:after {
+ content: "";
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ margin-left: -7px;
+ transform: translate(0, -50%);
+ width: 14px;
+ height: 2px;
+ background: #fff;
+ }
+
+ &:checked:before,
+ &:indeterminate:before {
+ background-color: @brand-primary;
+ border-color: @brand-primary;
+ }
+
+ &:disabled:before,
+ &[readonly]:before {
+ border-color: @gray-light;
+ }
+
+ &:disabled:checked:before,
+ &[readonly]:checked:before {
+ background-color: @gray-light;
+ border-color: transparent;
+ }
+}
+
+.form-boolean, .dict-boolean, .editabletree-boolean {
+ input[type=checkbox] {
+ width: default;
+ }
+}
+
+.has-warning {
+ input:not([type=checkbox]),
+ .form-control,
+ input.form-control[readonly],
+ input[type=text][readonly],
+ [type=text].form-control[readonly],
+ input:not([type=checkbox]):focus,
+ .form-control:focus {
+ border-bottom: none;
+ .box-shadow(inset 0 -2px 0 @brand-warning);
+ }
+}
+
+.has-error {
+ input:not([type=checkbox]),
+ .form-control,
+ input.form-control[readonly],
+ input[type=text][readonly],
+ [type=text].form-control[readonly],
+ input:not([type=checkbox]):focus,
+ .form-control:focus {
+ border-bottom: none;
+ .box-shadow(inset 0 -2px 0 @brand-danger);
+ }
+}
+
+.has-success {
+ input:not([type=checkbox]),
+ .form-control,
+ input.form-control[readonly],
+ input[type=text][readonly],
+ [type=text].form-control[readonly],
+ input:not([type=checkbox]):focus,
+ .form-control:focus {
+ border-bottom: none;
+ .box-shadow(inset 0 -2px 0 @brand-success);
+ }
+}
+
+.nav-tabs {
+ > li > a,
+ > li > a:focus {
+ margin-right: 0;
+ background-color: transparent;
+ border: none;
+ color: @navbar-default-link-color;
+ .box-shadow(inset 0 -1px 0 #ddd);
+ .transition(all 0.2s);
+
+ &:hover {
+ background-color: transparent;
+ .box-shadow(inset 0 -2px 0 @brand-primary);
+ color: @brand-primary;
+ }
+ }
+
+ & > li.active > a,
+ & > li.active > a:focus {
+ border: none;
+ .box-shadow(inset 0 -2px 0 @brand-primary);
+ color: @brand-primary;
+
+ &:hover {
+ border: none;
+ color: @brand-primary;
+ }
+ }
+
+ & > li.disabled > a {
+ .box-shadow(inset 0 -1px 0 #ddd);
+ }
+
+ &.nav-justified {
+
+ & > li > a,
+ & > li > a:hover,
+ & > li > a:focus,
+ & > .active > a,
+ & > .active > a:hover,
+ & > .active > a:focus {
+ border: none;
+ }
+ }
+
+ .dropdown-menu {
+ margin-top: 0;
+ }
+}
+
+.dropdown-menu {
+ margin-top: 0;
+ border: none;
+ .box-shadow(0 1px 4px rgba(0,0,0,.3));
+}
+
+.alert {
+ border: none;
+ color: #fff;
+
+ &-success {
+ background-color: @brand-success;
+ }
+
+ &-info {
+ background-color: @brand-info;
+ }
+
+ &-warning {
+ background-color: @brand-warning;
+ }
+
+ &-danger {
+ background-color: @brand-danger;
+ }
+
+ a:not(.close):not(.btn),
+ .alert-link {
+ color: #fff;
+ font-weight: bold;
+ }
+
+ .close {
+ color: #fff;
+ }
+}
+
+.badge {
+ padding: 4px 6px 4px;
+}
+
+.progress {
+ position: relative;
+ z-index: 1;
+ border-radius: 0;
+
+ .box-shadow(none);
+
+ &-bar {
+ .box-shadow(none);
+
+ &:last-child {
+ border-radius: 0 3px 3px 0;
+ }
+
+ &:last-child {
+ &:before {
+ display: block;
+ content: "";
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ left: 0;
+ right: 0;
+ z-index: -1;
+ background-color: lighten(@progress-bar-bg, 35%);
+ }
+ }
+
+ &-success:last-child.progress-bar:before {
+ background-color: lighten(@brand-success, 35%);
+ }
+
+ &-info:last-child.progress-bar:before {
+ background-color: lighten(@brand-info, 45%);
+ }
+ &-warning:last-child.progress-bar:before {
+ background-color: lighten(@brand-warning, 35%);
+ }
+
+ &-danger:last-child.progress-bar:before {
+ background-color: lighten(@brand-danger, 25%);
+ }
+ }
+}
+
+.close {
+ font-size: 34px;
+ font-weight: 300;
+ line-height: inherit;
+ opacity: 0.6;
+ .transition(all 0.2s);
+
+ &:hover {
+ opacity: 1;
+ }
+}
+
+.well {
+ border-radius: 0;
+ .box-shadow(none);
+}
+
+.panel {
+ border: none;
+ border-radius: 2px;
+ .box-shadow(0 1px 4px rgba(0,0,0,.3));
+
+ &-heading {
+ border-bottom: none;
+ }
+
+ &-footer {
+ border-top: none;
+ }
+}
+
+.popover {
+ border: none;
+ .box-shadow(0 1px 4px rgba(0,0,0,.3));
+}
+
+.carousel {
+ &-caption {
+ h1, h2, h3, h4, h5, h6 {
+ color: inherit;
+ }
+ }
+}
diff --git a/src/view/tree.js b/src/view/tree.js
index c269e10a78..7fa30c8bac 100644
--- a/src/view/tree.js
+++ b/src/view/tree.js
@@ -695,7 +695,7 @@
'selection': 9,
'one2many': 5,
'many2many': 5,
- 'boolean': 2,
+ 'boolean': 3,
'binary': 20,
}[column.attributes.widget] || 10;
var factor = 1;