summaryrefslogtreecommitdiff
path: root/addons/web/static/src
diff options
context:
space:
mode:
authorFabien Meghazi <fme@openerp.com>2012-11-12 18:11:28 +0100
committerFabien Meghazi <fme@openerp.com>2012-11-12 18:11:28 +0100
commitcd4c3c61ff82569ecb2b7637627154b1fb008a59 (patch)
treec9fcad52574369d070b7c47e9f9d9d2c3c1ca095 /addons/web/static/src
parentc74e6207016689ef28e857139f4157eeb04e57c1 (diff)
[FIX] Listview does not handle base64 value for binary fields
lp bug: https://launchpad.net/bugs/1077858 fixed bzr revid: fme@openerp.com-20121112171128-a1aoq2q4fma6fpxc
Diffstat (limited to 'addons/web/static/src')
-rw-r--r--addons/web/static/src/js/formats.js36
-rw-r--r--addons/web/static/src/js/view_form.js11
-rw-r--r--addons/web/static/src/js/view_list.js2
3 files changed, 38 insertions, 11 deletions
diff --git a/addons/web/static/src/js/formats.js b/addons/web/static/src/js/formats.js
index 03b2c5b775d..e586b94db6b 100644
--- a/addons/web/static/src/js/formats.js
+++ b/addons/web/static/src/js/formats.js
@@ -83,6 +83,42 @@ instance.web.strip_raw_chars = function (value) {
var normalize_format = function (format) {
return Date.normalizeFormat(instance.web.strip_raw_chars(format));
};
+
+/**
+ * Check with a scary heuristic if the value is a bin_size or not.
+ * If not, compute an approximate size out of the base64 encoded string.
+ *
+ * @param {String} value original format
+ */
+instance.web.binary_to_binsize = function (value) {
+ if (!value) {
+ return instance.web.human_size(0);
+ }
+ if (value.substr(0, 10).indexOf(' ') == -1) {
+ // Computing approximate size out of base64 encoded string
+ // http://en.wikipedia.org/wiki/Base64#MIME
+ return instance.web.human_size(value.length / 1.37);
+ } else {
+ // already bin_size
+ return value;
+ }
+};
+
+/**
+ * Returns a human readable size
+ *
+ * @param {Number} numner of bytes
+ */
+instance.web.human_size = function(size) {
+ var units = _t("Bytes,Kb,Mb,Gb,Tb,Pb,Eb,Zb,Yb").split(',');
+ var i = 0;
+ while (size >= 1024) {
+ size /= 1024;
+ ++i;
+ }
+ return size.toFixed(2) + ' ' + units[i];
+};
+
/**
* Formats a single atomic value based on a field descriptor
*
diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js
index 943b81481e7..62c534c0a48 100644
--- a/addons/web/static/src/js/view_form.js
+++ b/addons/web/static/src/js/view_form.js
@@ -4790,15 +4790,6 @@ instance.web.form.FieldBinary = instance.web.form.AbstractField.extend(instance.
this.$el.find('button.oe_form_binary_file_save').click(this.on_save_as);
this.$el.find('.oe_form_binary_file_clear').click(this.on_clear);
},
- human_filesize : function(size) {
- var units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
- var i = 0;
- while (size >= 1024) {
- size /= 1024;
- ++i;
- }
- return size.toFixed(2) + ' ' + units[i];
- },
on_file_change: function(e) {
var self = this;
var file_node = e.target;
@@ -4915,7 +4906,7 @@ instance.web.form.FieldBinaryFile = instance.web.form.FieldBinary.extend({
on_file_uploaded_and_valid: function(size, name, content_type, file_base64) {
this.binary_value = true;
this.internal_set_value(file_base64);
- var show_value = name + " (" + this.human_filesize(size) + ")";
+ var show_value = name + " (" + instance.web.human_size(size) + ")";
this.$el.find('input').eq(0).val(show_value);
this.set_filename(name);
},
diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js
index 538e2376bf5..9935436bdca 100644
--- a/addons/web/static/src/js/view_list.js
+++ b/addons/web/static/src/js/view_list.js
@@ -2176,7 +2176,7 @@ instance.web.list.Binary = instance.web.list.Column.extend({
return _.template('<a href="<%-href%>"><%-text%></a> (<%-size%>)', {
text: text,
href: download_url,
- size: row_data[this.id].value
+ size: instance.web.binary_to_binsize(row_data[this.id].value),
});
}
});