summaryrefslogtreecommitdiff
path: root/addons/web/static
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2015-01-06 11:49:04 +0100
committerChristophe Simonis <chs@odoo.com>2015-01-06 11:49:04 +0100
commitfab4d6d442ebbf081ead7e747f04b61e01ae9db2 (patch)
tree3dd9aad0f429f4229e500db503bbf8b7155f9c38 /addons/web/static
parent7fea986fd9f6f3ce1cc6c015a2523fdd23cf814d (diff)
parentea54d4af9f75e518c5871213a668a9f516e56830 (diff)
[MERGE] forward port of branch 8.0 up to ea54d4a
Diffstat (limited to 'addons/web/static')
-rw-r--r--addons/web/static/lib/fontawesome/css/font-awesome.css1
-rw-r--r--addons/web/static/src/css/base.css17
-rw-r--r--addons/web/static/src/css/base.sass15
-rw-r--r--addons/web/static/src/js/tour.js14
-rw-r--r--addons/web/static/src/js/view_form.js100
-rw-r--r--addons/web/static/src/js/view_list.js12
-rw-r--r--addons/web/static/src/xml/base.xml2
7 files changed, 109 insertions, 52 deletions
diff --git a/addons/web/static/lib/fontawesome/css/font-awesome.css b/addons/web/static/lib/fontawesome/css/font-awesome.css
index 4040b3cf859..dbaac90cc0b 100644
--- a/addons/web/static/lib/fontawesome/css/font-awesome.css
+++ b/addons/web/static/lib/fontawesome/css/font-awesome.css
@@ -13,6 +13,7 @@
}
.fa {
display: inline-block;
+ font-family: FontAwesome !important;
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit;
text-rendering: auto;
diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css
index 5b9afb52df4..52c5a73ecd1 100644
--- a/addons/web/static/src/css/base.css
+++ b/addons/web/static/src/css/base.css
@@ -41,6 +41,10 @@
margin-right: 0px !important;
}
+.apps-client {
+ border: 0;
+}
+
.oe_notification {
z-index: 1600;
}
@@ -2846,6 +2850,7 @@ div.ui-widget-overlay {
}
.ui-menu .ui-menu-item a {
padding: 1px 16px;
+ color: #404040;
}
.ui-menu .ui-menu-item a.ui-corner-all {
-moz-border-radius: 0;
@@ -3033,11 +3038,23 @@ body.oe_single_form .oe_single_form_container {
}
@media print {
+ body {
+ height: auto !important;
+ }
+
+ .openerp#announcement_bar_table {
+ display: none;
+ }
+
.openerp {
text-shadow: none;
}
+ .openerp .oe_application, .openerp .oe_view_manager_wrapper {
+ height: auto !important;
+ }
.openerp .oe_application > div > .oe_view_manager > .oe_view_manager_wrapper > div > .oe_view_manager_body {
overflow: visible;
+ position: relative !important;
}
.openerp .oe_header_row, .openerp ul.oe_header, .openerp div.oe_mail_thread_action, .openerp .oe_mail_recthread_actions, .openerp .oe_button_box, .openerp .oe_form button, .openerp button.oe_invite, .openerp .oe_form header, .openerp .openerp .oe_notebook > li.ui-state-default, .openerp .oe_topbar, .openerp .oe_leftbar, .openerp .oe_loading {
display: none !important;
diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass
index d19d0e0a177..740c0b6c01e 100644
--- a/addons/web/static/src/css/base.sass
+++ b/addons/web/static/src/css/base.sass
@@ -161,6 +161,9 @@ $sheet-padding: 16px
.oe_systray
margin-right: 0px !important
+.apps-client
+ border: 0
+
// Notifications {{{
.oe_notification
z-index: 1600
@@ -198,7 +201,7 @@ $sheet-padding: 16px
font-size: 13px
background: white
&.openerp_webclient_container
- height: 95%
+ height: 95% // fallback for browsers without support for calc()
height: -webkit-calc(100% - 34px)
height: calc(100% - 34px)
display: -ms-flexbox
@@ -206,7 +209,7 @@ $sheet-padding: 16px
display: flex
@media (max-width: 768px)
&.openerp_webclient_container
- height: 95%
+ height: 95% // fallback for browsers without support for calc()
height: -webkit-calc(100% - 52px)
height: calc(100% - 52px)
// }}}
@@ -2339,6 +2342,7 @@ div.ui-widget-overlay
padding: 0
a
padding: 1px 16px
+ color: #404040
a.ui-corner-all
@include radius(0)
a.ui-state-active
@@ -2504,9 +2508,16 @@ body.oe_single_form
// @media print {{{
@media print
+ body
+ height: auto !important
+ .openerp#announcement_bar_table
+ display: none
.openerp
+ .oe_application, .oe_view_manager_wrapper
+ height: auto !important
.oe_application > div > .oe_view_manager > .oe_view_manager_wrapper > div > .oe_view_manager_body
overflow: visible
+ position: relative !important
.oe_header_row, ul.oe_header, div.oe_mail_thread_action, .oe_mail_recthread_actions, .oe_button_box, .oe_form button, button.oe_invite, .oe_form header, .openerp .oe_notebook > li.ui-state-default, .oe_topbar, .oe_leftbar, .oe_loading
// We use !important here because jQuery adds @style = display: block on elements when using $.fn.show()
display: none !important
diff --git a/addons/web/static/src/js/tour.js b/addons/web/static/src/js/tour.js
index 08738ac019e..c42dc439c82 100644
--- a/addons/web/static/src/js/tour.js
+++ b/addons/web/static/src/js/tour.js
@@ -256,12 +256,20 @@ var Tour = {
},
repositionPopover: function() {
var popover = Tour.$element.data("bs.popover");
- var $tip = Tour.$element.data("bs.popover").tip();
+ var $tip = popover.tip();
if (popover.options.orphan) {
return $tip.css("top", $(window).outerHeight() / 2 - $tip.outerHeight() / 2);
}
+ if (Tour.$element.parents("div").filter(function(){ return getComputedStyle(this).position === 'fixed'; }).length) {
+ var pos = popover.getPosition();
+ var top = pos.top;
+ if (popover.options.placement === "top") top -= $tip.height();
+ if (popover.options.placement === "bottom") top += pos.height;
+ $tip.css({'top': top+'px'});
+ }
+
var offsetBottom, offsetHeight, offsetRight, offsetWidth, originalLeft, originalTop, tipOffset;
offsetWidth = $tip[0].offsetWidth;
offsetHeight = $tip[0].offsetHeight;
@@ -285,10 +293,10 @@ var Tour = {
$tip.offset(tipOffset);
if (popover.options.placement === "bottom" || popover.options.placement === "top") {
var left = Tour.$element.offset().left + Tour.$element.outerWidth()/2 - tipOffset.left;
- $tip.find(".arrow").css("left", left ? left + "px" : "");
+ popover.arrow().css("left", left ? left + "px" : "");
} else if (popover.options.placement !== "auto") {
var top = Tour.$element.offset().top + Tour.$element.outerHeight()/2 - tipOffset.top;
- $tip.find(".arrow").css("top", top ? top + "px" : "");
+ popover.arrow().css("top", top ? top + "px" : "");
}
},
_load_template: false,
diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js
index 933b662d3ff..b004fef331f 100644
--- a/addons/web/static/src/js/view_form.js
+++ b/addons/web/static/src/js/view_form.js
@@ -510,38 +510,47 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
}
this.onchanges_mutex.exec(function(){
return def.then(function(response) {
- if (widget && widget.field['change_default']) {
- var fieldname = widget.name;
- var value_;
- if (response.value && (fieldname in response.value)) {
- // Use value from onchange if onchange executed
- value_ = response.value[fieldname];
- } else {
- // otherwise get form value for field
- value_ = self.fields[fieldname].get_value();
- }
- var condition = fieldname + '=' + value_;
-
- if (value_) {
- return self.alive(new instance.web.Model('ir.values').call(
- 'get_defaults', [self.model, condition]
- )).then(function (results) {
- if (!results.length) {
+ var fields = {};
+ if (widget){
+ fields[widget.name] = widget.field;
+ }
+ else{
+ fields = self.fields_view.fields;
+ }
+ var defs = [];
+ _.each(fields, function(field, fieldname){
+ if (field && field.change_default) {
+ var value_;
+ if (response.value && (fieldname in response.value)) {
+ // Use value from onchange if onchange executed
+ value_ = response.value[fieldname];
+ } else {
+ // otherwise get form value for field
+ value_ = self.fields[fieldname].get_value();
+ }
+ var condition = fieldname + '=' + value_;
+
+ if (value_) {
+ defs.push(self.alive(new instance.web.Model('ir.values').call(
+ 'get_defaults', [self.model, condition]
+ )).then(function (results) {
+ if (!results.length) {
+ return response;
+ }
+ if (!response.value) {
+ response.value = {};
+ }
+ for(var i=0; i<results.length; ++i) {
+ // [whatever, key, value]
+ var triplet = results[i];
+ response.value[triplet[1]] = triplet[2];
+ }
return response;
- }
- if (!response.value) {
- response.value = {};
- }
- for(var i=0; i<results.length; ++i) {
- // [whatever, key, value]
- var triplet = results[i];
- response.value[triplet[1]] = triplet[2];
- }
- return response;
- });
+ }));
+ }
}
- }
- return response;
+ });
+ return _.isEmpty(defs) ? response : $.when.apply(null, defs);
}).then(function(response) {
return self.on_processed_onchange(response);
});
@@ -1151,7 +1160,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
},
build_eval_context: function() {
var a_dataset = this.dataset;
- return new instance.web.CompoundContext(a_dataset.get_context(), this._build_view_fields_values());
+ return new instance.web.CompoundContext(this._build_view_fields_values(), a_dataset.get_context());
},
});
@@ -3244,9 +3253,7 @@ instance.web.form.FieldRadio = instance.web.form.AbstractField.extend(instance.w
click_change_value: function (event) {
var val = $(event.target).val();
val = this.field.type == "selection" ? val : +val;
- if (val == this.get_value()) {
- this.set_value(false);
- } else {
+ if (val !== this.get_value()) {
this.set_value(val);
}
},
@@ -3762,7 +3769,14 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc
// disabled to solve a bug, but may cause others
//close: anyoneLoosesFocus,
minLength: 0,
- delay: 250
+ delay: 250,
+ });
+ var appendTo = this.$el.parents('.oe_view_manager_body, .modal-dialog').last();
+ if (appendTo.length === 0){
+ appendTo = '.oe_application > *';
+ }
+ this.$input.autocomplete({
+ appendTo: appendTo
});
// set position for list of suggestions box
this.$input.autocomplete( "option", "position", { my : "left top", at: "left bottom" } );
@@ -4069,16 +4083,18 @@ instance.web.form.FieldOne2Many = instance.web.form.AbstractField.extend({
var self = this;
self.load_views();
- this.is_loaded.done(function() {
- self.on("change:effective_readonly", self, function() {
- self.is_loaded = self.is_loaded.then(function() {
- self.viewmanager.destroy();
- return $.when(self.load_views()).done(function() {
- self.reload_current_view();
- });
+ var destroy = function() {
+ self.is_loaded = self.is_loaded.then(function() {
+ self.viewmanager.destroy();
+ return $.when(self.load_views()).done(function() {
+ self.reload_current_view();
});
});
+ };
+ this.is_loaded.done(function() {
+ self.on("change:effective_readonly", self, destroy);
});
+ this.view.on("on_button_cancel", self, destroy);
this.is_started = true;
this.reload_current_view();
},
diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js
index 97b3fde17bd..08d7d6f9da6 100644
--- a/addons/web/static/src/js/view_list.js
+++ b/addons/web/static/src/js/view_list.js
@@ -1537,9 +1537,11 @@ instance.web.ListView.Groups = instance.web.Class.extend( /** @lends instance.we
});
},
setup_resequence_rows: function (list, dataset) {
- // drag and drop enabled if list is not sorted and there is a
- // visible column with @widget=handle or "sequence" column in the view.
- if ((dataset.sort && dataset.sort())
+ // drag and drop enabled if list is not sorted (unless it is sorted by
+ // sequence (ASC)), and there is a visible column with @widget=handle
+ // or "sequence" column in the view.
+ if ((dataset.sort && dataset.sort() && dataset.sort() !== 'sequence'
+ && dataset.sort() !== 'sequence ASC')
|| !_(this.columns).any(function (column) {
return column.widget === 'handle'
|| column.name === 'sequence'; })) {
@@ -1611,7 +1613,9 @@ instance.web.ListView.Groups = instance.web.Class.extend( /** @lends instance.we
.filter(function (column) { return column.tag === 'field';})
.pluck('name').value(),
function (groups) {
- self.view.$pager.hide();
+ // page count is irrelevant on grouped page, replace by limit
+ self.view.$pager.find('.oe_pager_group').hide();
+ self.view.$pager.find('.oe_list_pager_state').text(self.view._limit ? self.view._limit : '∞');
$el[0].appendChild(
self.render_groups(groups));
if (post_render) { post_render(); }
diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml
index 8dd6aeb34c4..0bface3a4d4 100644
--- a/addons/web/static/src/xml/base.xml
+++ b/addons/web/static/src/xml/base.xml
@@ -84,7 +84,7 @@
</p>
<p class="oe_grey" style="margin: 10px">
By default, the master password is 'admin'. This password
- is required to created, delete dump or restore databases.
+ is required to create, delete, dump or restore databases.
</p>
<table class="db_option_table" style="margin: 10px">
<tr>