summaryrefslogtreecommitdiff
path: root/addons/web
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2016-01-12 15:30:29 +0100
committerChristophe Simonis <chs@odoo.com>2016-01-12 15:30:29 +0100
commit7fa6f73302709d7e7b6b19ebd16d338b3dd0e2db (patch)
tree1487b6fe232e0b9477a6e68018d5bc5d3432372f /addons/web
parent2a834c22b0570b3a0d5ec5b4a8a0b378e3a6e12b (diff)
parentcb79297a41b7747a9318fd4794dce422ee931060 (diff)
[MERGE] forward port of branch 9.0 up to cb79297
Diffstat (limited to 'addons/web')
-rw-r--r--addons/web/static/src/js/framework/utils.js62
-rw-r--r--addons/web/static/src/js/views/form_widgets.js11
-rw-r--r--addons/web/static/src/xml/base.xml7
-rw-r--r--addons/web/static/test/x2many.js2
4 files changed, 65 insertions, 17 deletions
diff --git a/addons/web/static/src/js/framework/utils.js b/addons/web/static/src/js/framework/utils.js
index f1f28d83613..087d4c73d65 100644
--- a/addons/web/static/src/js/framework/utils.js
+++ b/addons/web/static/src/js/framework/utils.js
@@ -441,3 +441,65 @@ return {
});
+odoo.define('web.dom_utils', function (require) {
+"use strict";
+
+var core = require('web.core');
+
+// TO DO: move this into new file dom_utils.js
+/**
+ * Autoresize a $textarea node, by recomputing its height when necessary
+ * @param {number} [options.min_height] by default, 50.
+ * @param {Widget} [options.parent] if set, autoresize will listen to some extra
+ * events to decide when to resize itself. This is useful for widgets that are
+ * not in the dom when the autoresize is declared.
+ */
+function autoresize ($textarea, options) {
+ options = options || {};
+
+ var $fixed_text_area;
+ var min_height = (options && options.min_height) || 50;
+ if (!$fixed_text_area) {
+ $fixed_text_area = $('<textarea>').css({
+ position: 'absolute',
+ opacity: 0,
+ height: 10,
+ top: -10000,
+ left: -10000,
+ });
+ $fixed_text_area.addClass($fixed_text_area[0].classList);
+ $fixed_text_area.insertAfter($textarea);
+ }
+
+ resize();
+ if ($textarea.__auto_resized) {
+ return;
+ }
+ $textarea.__auto_resized = true;
+
+ $textarea.on('input focus', resize);
+ if (options.parent) {
+ core.bus.on('DOM_updated', options.parent, resize);
+ core.bus.on('view_shown', options.parent, resize);
+ }
+
+ function resize () {
+ var heightOffset;
+ var style = window.getComputedStyle($textarea[0], null);
+ if (style.boxSizing === 'content-box') {
+ heightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));
+ } else {
+ heightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);
+ }
+ $fixed_text_area.width($textarea.outerWidth());
+ $fixed_text_area.val($textarea.val());
+ var height = $fixed_text_area[0].scrollHeight;
+ $textarea.css({height: Math.max(height + heightOffset, min_height)});
+ }
+}
+
+return {
+ autoresize: autoresize,
+};
+
+});
diff --git a/addons/web/static/src/js/views/form_widgets.js b/addons/web/static/src/js/views/form_widgets.js
index c1cc05ce156..96107503a5f 100644
--- a/addons/web/static/src/js/views/form_widgets.js
+++ b/addons/web/static/src/js/views/form_widgets.js
@@ -15,6 +15,7 @@ var Priority = require('web.Priority');
var pyeval = require('web.pyeval');
var session = require('web.session');
var utils = require('web.utils');
+var dom_utils = require('web.dom_utils');
var _t = core._t;
var QWeb = core.qweb;
@@ -573,16 +574,8 @@ var FieldText = common.AbstractField.extend(common.ReinitializeFieldMixin, {
render_value: function() {
if (! this.get("effective_readonly")) {
var show_value = formats.format_value(this.get('value'), this, '');
- if (show_value === '') {
- this.$textarea.css('height', parseInt(this.default_height, 10)+"px");
- }
this.$textarea.val(show_value);
- if (! this.auto_sized) {
- this.auto_sized = true;
- autosize(this.$textarea);
- } else {
- this.$textarea.trigger("autosize");
- }
+ dom_utils.autoresize(this.$textarea, {parent: this, min_height: parseInt(this.default_height)});
} else {
var txt = this.get("value") || '';
this.$(".oe_form_text_content").text(txt);
diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml
index 07b6fcb70ac..ce4b04a5a87 100644
--- a/addons/web/static/src/xml/base.xml
+++ b/addons/web/static/src/xml/base.xml
@@ -1113,13 +1113,6 @@
<t t-jquery="thead > tr:first">
this.removeAttr('t-if');
</t>
-
- <t t-jquery="td.oe-actions">
- this.removeAttr('t-if');
- </t>
- <t t-jquery="td.oe-actions" t-operation="prepend">
- <h3 class="oe_view_title"><t t-esc="fields_view.arch.attrs.string"/></h3>
- </t>
</t>
<div t-name="SearchView" class="oe_searchview form-control input-sm">
diff --git a/addons/web/static/test/x2many.js b/addons/web/static/test/x2many.js
index edd95de2d04..f57b03bcb1d 100644
--- a/addons/web/static/test/x2many.js
+++ b/addons/web/static/test/x2many.js
@@ -449,7 +449,7 @@ Tour.register({
},
{
title: "change text value",
- element: '.oe_form_field[data-fieldname="body"] textarea',
+ element: '.oe_form_field[data-fieldname="body"] textarea[name="body"]',
sampleText: 'ccc'
},
{