diff --git a/addons/website/models/ir_qweb.py b/addons/website/models/ir_qweb.py index ea982bbe563..64a374119fa 100644 --- a/addons/website/models/ir_qweb.py +++ b/addons/website/models/ir_qweb.py @@ -73,12 +73,21 @@ class Field(orm.AbstractModel): def attributes(self, cr, uid, field_name, record, options, source_element, g_att, t_att, qweb_context, context=None): + if options is None: options = {} column = record._model._all_columns[field_name].column + attrs = [('data-oe-translate', 1 if column.translate else 0)] + + placeholder = options.get('placeholder') \ + or source_element.getAttribute('placeholder') \ + or getattr(column, 'placeholder', None) + if placeholder: + attrs.append(('placeholder', placeholder)) + return itertools.chain( super(Field, self).attributes(cr, uid, field_name, record, options, source_element, g_att, t_att, qweb_context, context=context), - [('data-oe-translate', 1 if column.translate else 0)] + attrs ) def value_from_string(self, value): diff --git a/addons/website/static/src/css/editor.css b/addons/website/static/src/css/editor.css index e40d6996850..e21bfc1fbe8 100644 --- a/addons/website/static/src/css/editor.css +++ b/addons/website/static/src/css/editor.css @@ -211,9 +211,15 @@ ul.oe_menu_editor .disclose { } .cke_widget_editable:empty:after { - content: " "; + opacity: 0.3; white-space: pre-wrap; } +.cke_widget_editable:not([placeholder]):empty::after { + content: " "; +} +.cke_widget_editable[placeholder]:not(:focus):empty::after { + content: attr(placeholder); +} .oe_carlos_danger { outline: 1px solid red !important; diff --git a/addons/website/static/src/css/editor.sass b/addons/website/static/src/css/editor.sass index 38b1d9f3436..ff62f416d8d 100644 --- a/addons/website/static/src/css/editor.sass +++ b/addons/website/static/src/css/editor.sass @@ -171,11 +171,20 @@ ul.oe_menu_editor // Breaks completely horribly crazy products listing page, so take it out. .cke_widget_wrapper position: static !important + // prevent inline widgets from entirely disappearing when their (textual) // content is removed -.cke_widget_editable:empty:after - content: " " - white-space: pre-wrap +.cke_widget_editable + // basic config + &:empty:after + opacity: 0.3 + white-space: pre-wrap + // no @placeholder -> just add some padding + &:not([placeholder]):empty::after + content: " " + // with placeholder and when not (yet) focused -> display placeholder + &[placeholder]:not(:focus):empty::after + content: attr(placeholder) .oe_carlos_danger outline: 1px solid red !important diff --git a/addons/website/static/src/js/website.editor.js b/addons/website/static/src/js/website.editor.js index 1e3ef0da66a..c7c5620c9a4 100644 --- a/addons/website/static/src/js/website.editor.js +++ b/addons/website/static/src/js/website.editor.js @@ -859,7 +859,7 @@ var plugins = [ 'a11yhelp', 'basicstyles', 'blockquote', 'clipboard', 'colorbutton', 'colordialog', 'dialogadvtab', - 'elementspath', 'enterkey', 'entities', 'filebrowser', + 'elementspath', /*'enterkey',*/ 'entities', 'filebrowser', 'find', 'floatingspace','format', 'htmlwriter', 'iframe', 'indentblock', 'indentlist', 'justify', 'list', 'pastefromword', 'pastetext', 'preview', diff --git a/addons/website/views/website_templates.xml b/addons/website/views/website_templates.xml index 4df613359e4..fa65b909c9a 100644 --- a/addons/website/views/website_templates.xml +++ b/addons/website/views/website_templates.xml @@ -13,7 +13,7 @@