# Copyright 2017 Creu Blanca # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from odoo import _, models from odoo.exceptions import ValidationError class IrQWeb(models.AbstractModel): _inherit = "ir.qweb" @staticmethod def check_length(value, min_length=False, max_length=False): if min_length and len(value) < min_length: raise ValidationError(_("Length cannot be less than %s") % str(min_length)) if max_length and len(value) > max_length: raise ValidationError(_("Length cannot be more than %s") % str(max_length)) return value def _compile_directive_esc(self, el, options): min_value = el.attrib.pop("t-minlength", False) max_value = el.attrib.pop("t-maxlength", False) if min_value or max_value: el.attrib["t-esc"] = ( 'docs.env["ir.qweb"].check_length(' + el.attrib["t-esc"] + ", " + (min_value or "False") + ", " + (max_value or "False") + ")" ) if "t-length" in el.attrib: tlength = el.attrib.pop("t-length") el.attrib["t-esc"] = "(" + el.attrib["t-esc"] + ")[:" + tlength + "]" return super()._compile_directive_esc(el, options) def _compile_directive_raw(self, el, options): min_value = el.attrib.pop("t-minlength", False) max_value = el.attrib.pop("t-maxlength", False) if min_value or max_value: el.attrib["t-raw"] = ( 'docs.env["ir.qweb"].check_length(' + el.attrib["t-raw"] + ", " + (min_value or "False") + ", " + (max_value or "False") + ")" ) if "t-length" in el.attrib: tlength = el.attrib.pop("t-length") el.attrib["t-raw"] = el.attrib["t-raw"] + "[:" + tlength + "]" return super()._compile_directive_raw(el, options)