diff options
| author | Christophe Matthieu <chm@openerp.com> | 2012-10-26 15:58:34 +0200 |
|---|---|---|
| committer | Christophe Matthieu <chm@openerp.com> | 2012-10-26 15:58:34 +0200 |
| commit | 00bfec86ab5222ee8d46f50e57c3003b9a5d1c72 (patch) | |
| tree | 4d6513ff189bff17643723d04e7d9431657e9215 /addons/web/static/src | |
| parent | 9fe8d72078038b248cb82c209e242ec4c0ab6e2d (diff) | |
[IMP] form view: FieldBinaryFileUploader modify
bzr revid: chm@openerp.com-20121026135834-ygs25fjfmeh3tte8
Diffstat (limited to 'addons/web/static/src')
| -rw-r--r-- | addons/web/static/src/js/view_form.js | 67 | ||||
| -rw-r--r-- | addons/web/static/src/xml/base.xml | 23 |
2 files changed, 46 insertions, 44 deletions
diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 08240456b37..79b7a2cba52 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -4910,20 +4910,16 @@ instance.web.form.FieldOne2ManyBinaryMultiFiles = instance.web.form.AbstractFiel } this.ds_file = new instance.web.DataSetSearch(this, 'ir.attachment'); this.fileupload_id = _.uniqueId('oe_fileupload_temp'); - $(window).on(this.fileupload_id, this.on_file_loaded); + $(window).on(this.fileupload_id, _.bind(this.on_file_loaded, this)); - this.files = false; + this.list_file = false; }, start: function() { this._super(this); - this.$list_file = this.$('.oe_placeholder_files'); this.$el.on('change', 'input.oe_form_binary_file', this.on_file_change ); - this.display_files(); }, set_value: function(value_) { - var values = this.files = (value_ && !this.files) ? value_ : this.files; - this._super( values ); - this.display_files(); + this._super( value_ ); }, get_value: function() { return _.map(this.get('value'), function (value) { return commands.link_to( value.id ); }); @@ -4931,13 +4927,15 @@ instance.web.form.FieldOne2ManyBinaryMultiFiles = instance.web.form.AbstractFiel get_file_url: function (attachment) { return instance.origin + '/web/binary/saveas?session_id=' + this.session.session_id + '&model=ir.attachment&field=datas&filename_field=datas_fname&id=' + attachment['id']; }, - display_files: function(){ - if(this.$list_file) { - var render = $(instance.web.qweb.render('FieldBinaryFileUploader.files', {'widget': this})); - this.$list_file.replaceWith( render ); - this.$list_file = this.$(".oe_files"); - this.$list_file.on('click', '.oe_delete', this.on_file_delete); - } + render_value: function () { + var render = $(instance.web.qweb.render('FieldBinaryFileUploader.files', {'widget': this})); + render.on('click', '.oe_delete', _.bind(this.on_file_delete, this)); + this.$('.oe_placeholder_files, .oe_files').replaceWith( render ); + + // reinit input type file + var $input = this.$('input.oe_form_binary_file'); + $input.after($input.clone(true)).remove(); + this.$(".oe_fileuploader").show(); }, on_file_change: function (event) { event.stopPropagation(); @@ -4948,12 +4946,17 @@ instance.web.form.FieldOne2ManyBinaryMultiFiles = instance.web.form.AbstractFiel var filename = $target.val().replace(/.*[\\\/]/,''); // if the files is currently uploded, don't send again - if( !isNaN(_.find(this.files, function (file) { return (file.filename || file.name) == filename && file.upload; } )) ) { + if( !isNaN(_.find(this.get('value'), function (file) { return (file.filename || file.name) == filename && file.upload; } )) ) { return false; } + // block UI or not + if(this.node.attrs.blockui) { + instance.web.blockUI(); + } + // if the files exits for this answer, delete the file before upload - this.files = _.filter(this.files, function (file) { + var files = _.filter(this.get('value'), function (file) { if((file.filename || file.name) == filename) { self.ds_file.unlink([file.id]); return false; @@ -4962,11 +4965,6 @@ instance.web.form.FieldOne2ManyBinaryMultiFiles = instance.web.form.AbstractFiel } }); - // block UI or not - if(this.node.attrs.blockui) { - instance.web.blockUI(); - } - // TODO : unactivate send on wizard and form // submit file @@ -4974,14 +4972,15 @@ instance.web.form.FieldOne2ManyBinaryMultiFiles = instance.web.form.AbstractFiel this.$(".oe_fileuploader").hide(); // add file on result - this.files.push({ + files.push({ 'id': 0, 'name': filename, 'filename': filename, 'url': '', 'upload': true }); - this.set_value(); + + this.set({'value': files}); } }, on_file_loaded: function (event, result) { @@ -4992,9 +4991,10 @@ instance.web.form.FieldOne2ManyBinaryMultiFiles = instance.web.form.AbstractFiel // TODO : activate send on wizard and form - for(var i in this.files){ - if(this.files[i].filename == result.filename && this.files[i].upload) { - this.files[i] = { + var files = this.get('value'); + for(var i in files){ + if(files[i].filename == result.filename && files[i].upload) { + files[i] = { 'id': result.id, 'name': result.name, 'filename': result.filename, @@ -5002,27 +5002,24 @@ instance.web.form.FieldOne2ManyBinaryMultiFiles = instance.web.form.AbstractFiel }; } } - this.set_value(); - var $input = this.$('input.oe_form_binary_file'); - $input.after($input.clone(true)).remove(); - this.$(".oe_fileuploader").show(); + this.set({'value': files}); + this.render_value() }, on_file_delete: function (event) { event.stopPropagation(); var file_id=$(event.target).data("id"); if (file_id) { var files=[]; - for(var i in this.files){ - if(file_id!=this.files[i].id){ - files.push(this.files[i]); + for(var i in this.get('value')){ + if(file_id != this.get('value')[i].id){ + files.push(this.get('value')[i]); } else { this.ds_file.unlink([file_id]); } } - this.files = files; - this.set_value(); + this.set({'value': files}); } }, }); diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index f2f9e0f4989..7472b212021 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -1175,13 +1175,11 @@ </div> </t> <t t-name="FieldBinaryFileUploader.files"> - <ul class="oe_files"> - <t t-foreach="widget.files" t-as="file"> - <li> + <div class="oe_files"> + <t t-if="!widget.get('effective_readonly')" t-foreach="widget.get('value')" t-as="file"> + <div> <span t-if="(file.upload or file.percent_loaded<100)" t-attf-title="{(file.name || file.filename) + (file.date?' \n('+file.date+')':'' )}" t-attf-name="{file.name || file.filename}"> - <span class="oe_fileuploader_in_process"> - <span>...Upload in progress...</span> - </span> + <span class="oe_fileuploader_in_process">...Upload in progress...</span> <t t-raw="file.name || file.filename"/> </span> <a t-if="(!file.upload or file.percent_loaded>=100)" t-att-href="file.url" t-attf-title="{(file.name || file.filename) + (file.date?' \n('+file.date+')':'' )}"> @@ -1190,14 +1188,21 @@ <t t-if="(!file.upload or file.percent_loaded>=100)"> <a class="oe_delete" title="Delete this file" t-attf-data-id="{file.id}">x</a> </t> - </li> + </div> </t> - </ul> + <t t-if="widget.get('effective_readonly')" t-foreach="widget.get('value')" t-as="file"> + <div> + <a t-att-href="file.url" t-attf-title="{(file.name || file.filename) + (file.date?' \n('+file.date+')':'' )}"> + <t t-raw="file.name || file.filename"/> + </a> + </div> + </t> + </div> </t> <t t-name="FieldBinaryFileUploader"> <div t-att-style="widget.node.attrs.style" t-attf-class="oe_fileuploader #{widget.node.attrs.class ? widget.node.attrs.class :''}"> <div class="oe_placeholder_files"/> - <div class="oe_add"> + <div class="oe_add" t-if="!widget.get('effective_readonly')"> <!-- uploader of file --> <button><span class="oe_e">p</span></button> <t t-call="HiddenInputFile"> |
