summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorXavier Morel <xmo@openerp.com>2013-12-05 12:39:08 +0100
committerXavier Morel <xmo@openerp.com>2013-12-05 12:39:08 +0100
commita1ecb6923b8673f9f4e00f4e27e0a6a12491edd8 (patch)
treebd6c253de0ebe89d3553809e16d25d3ae10b2581 /addons
parent04045c369931ea0c4359ddff0196c163dc5e6db5 (diff)
[ADD] saving of oddly localized/formatted stuff
bzr revid: xmo@openerp.com-20131205113908-9tr575ejn7hanhi7
Diffstat (limited to 'addons')
-rw-r--r--addons/website/models/ir_qweb.py79
-rw-r--r--addons/website/static/src/css/editor.css4
-rw-r--r--addons/website/static/src/js/website.editor.js14
3 files changed, 75 insertions, 22 deletions
diff --git a/addons/website/models/ir_qweb.py b/addons/website/models/ir_qweb.py
index 5876fa3873d..bb2062bad92 100644
--- a/addons/website/models/ir_qweb.py
+++ b/addons/website/models/ir_qweb.py
@@ -121,33 +121,49 @@ class Date(orm.AbstractModel):
_name = 'website.qweb.field.date'
_inherit = ['website.qweb.field', 'ir.qweb.field.date']
- def from_html(self, cr, uid, model, column, element, context=None):
- lang = self.user_lang(cr, uid, context=context)
- in_format = lang.date_format.encode('utf-8')
+ def attributes(self, cr, uid, field_name, record, options,
+ source_element, g_att, t_att, qweb_context,
+ context=None):
+ attrs = super(Date, self).attributes(
+ cr, uid, field_name, record, options, source_element, g_att, t_att,
+ qweb_context, context=None)
+ return itertools.chain(attrs, [('data-oe-original', record[field_name])])
+ def from_html(self, cr, uid, model, column, element, context=None):
value = element.text_content().strip()
- try:
- dt = datetime.datetime.strptime(in_format, value)
- except ValueError:
- dt = parse_fuzzy(in_format, value)
+ if not value: return False
- return dt.strftime(DEFAULT_SERVER_DATE_FORMAT)
+ datetime.datetime.strptime(value, DEFAULT_SERVER_DATE_FORMAT)
+ return value
class DateTime(orm.AbstractModel):
_name = 'website.qweb.field.datetime'
_inherit = ['website.qweb.field', 'ir.qweb.field.datetime']
- def from_html(self, cr, uid, model, column, element, context=None):
- lang = self.user_lang(cr, uid, context=context)
- in_format = (u"%s %s" % (lang.date_format, lang.time_format)).encode('utf-8')
+ def attributes(self, cr, uid, field_name, record, options,
+ source_element, g_att, t_att, qweb_context,
+ context=None):
+ column = record._model._all_columns[field_name].column
+ value = record[field_name]
+ if isinstance(value, basestring):
+ value = datetime.datetime.strptime(
+ value, DEFAULT_SERVER_DATETIME_FORMAT)
+ value = column.context_timestamp(
+ cr, uid, timestamp=value, context=context)
+
+ attrs = super(DateTime, self).attributes(
+ cr, uid, field_name, record, options, source_element, g_att, t_att,
+ qweb_context, context=None)
+ return itertools.chain(attrs, [
+ ('data-oe-original', value.strftime(openerp.tools.DEFAULT_SERVER_DATETIME_FORMAT))
+ ])
+ def from_html(self, cr, uid, model, column, element, context=None):
value = element.text_content().strip()
- try:
- dt = datetime.datetime.strptime(in_format, value)
- except ValueError:
- dt = parse_fuzzy(in_format, value)
+ if not value: return False
- return dt.strftime(DEFAULT_SERVER_DATETIME_FORMAT)
+ datetime.datetime.strptime(value, DEFAULT_SERVER_DATETIME_FORMAT)
+ return value
class Text(orm.AbstractModel):
_name = 'website.qweb.field.text'
@@ -302,3 +318,34 @@ class Monetary(orm.AbstractModel):
return float(value.replace(lang.thousands_sep, '')
.replace(lang.decimal_point, '.'))
+
+class Duration(orm.AbstractModel):
+ _name = 'website.qweb.field.duration'
+ _inherit = [
+ 'ir.qweb.field.duration',
+ 'website.qweb.field.float',
+ ]
+
+ def attributes(self, cr, uid, field_name, record, options,
+ source_element, g_att, t_att, qweb_context,
+ context=None):
+ attrs = super(Duration, self).attributes(
+ cr, uid, field_name, record, options, source_element, g_att, t_att,
+ qweb_context, context=None)
+ return itertools.chain(attrs, [('data-oe-original', record[field_name])])
+
+ def from_html(self, cr, uid, model, column, element, context=None):
+ value = element.text_content().strip()
+
+ # non-localized value
+ return float(value)
+
+
+class RelativeDatetime(orm.AbstractModel):
+ _name = 'website.qweb.field.relative'
+ _inherit = [
+ 'ir.qweb.field.relative',
+ 'website.qweb.field.datetime',
+ ]
+
+ # get formatting from ir.qweb.field.relative but edition/save from datetime
diff --git a/addons/website/static/src/css/editor.css b/addons/website/static/src/css/editor.css
index 487306be5dc..eaf1fdbe96b 100644
--- a/addons/website/static/src/css/editor.css
+++ b/addons/website/static/src/css/editor.css
@@ -206,10 +206,6 @@ ul.oe_menu_editor .disclose {
position: static !important;
}
-.cke_widget_drag_handler_container {
- display: none !important;
-}
-
.cke_widget_editable:empty:after {
content: " ";
white-space: pre-wrap;
diff --git a/addons/website/static/src/js/website.editor.js b/addons/website/static/src/js/website.editor.js
index b7bc451009b..6269013dd25 100644
--- a/addons/website/static/src/js/website.editor.js
+++ b/addons/website/static/src/js/website.editor.js
@@ -326,8 +326,18 @@
draggable: false,
upcast: function (el) {
- return el.attributes['data-oe-type']
- && el.attributes['data-oe-type'] !== 'monetary';
+ var matches = el.attributes['data-oe-type'] && el.attributes['data-oe-type'] !== 'monetary';
+ if (!matches) { return false; }
+
+ if (el.attributes['data-oe-original']) {
+ while (el.children.length) {
+ el.children[0].remove();
+ }
+ el.add(new CKEDITOR.htmlParser.text(
+ el.attributes['data-oe-original']
+ ));
+ }
+ return true;
},
});
editor.widgets.add('monetary', {