diff options
| author | Christophe Simonis <chs@odoo.com> | 2016-01-12 15:30:29 +0100 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2016-01-12 15:30:29 +0100 |
| commit | 7fa6f73302709d7e7b6b19ebd16d338b3dd0e2db (patch) | |
| tree | 1487b6fe232e0b9477a6e68018d5bc5d3432372f /addons/web | |
| parent | 2a834c22b0570b3a0d5ec5b4a8a0b378e3a6e12b (diff) | |
| parent | cb79297a41b7747a9318fd4794dce422ee931060 (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.js | 62 | ||||
| -rw-r--r-- | addons/web/static/src/js/views/form_widgets.js | 11 | ||||
| -rw-r--r-- | addons/web/static/src/xml/base.xml | 7 | ||||
| -rw-r--r-- | addons/web/static/test/x2many.js | 2 |
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' }, { |
