From d4bae06d081798e35529c2323b66ec5467545cdb Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Fri, 21 Aug 2015 10:13:23 +0200 Subject: [PATCH] [IMP] web: use css to display attachment mimetype Widgets and website display images or display the type with icon like pdf, doc... --- addons/mail/models/__init__.py | 1 - addons/mail/models/ir_attachment.py | 174 ------------------ addons/mail/models/mail_message.py | 4 +- .../static/src/img/mimetypes/webimage.png | Bin 2603 -> 0 bytes addons/mail/static/src/js/mail.js | 7 +- addons/mail/static/src/xml/mail.xml | 35 +--- addons/mail/views/mail_message_views.xml | 11 +- addons/project/project.py | 2 +- addons/web/static/src/css/base.css | 23 ++- addons/web/static/src/css/base.sass | 21 ++- addons/web/static/src/css/mimetypes.css | 66 +++++++ .../static/src/img/mimetypes/addresses.png | Bin .../static/src/img/mimetypes/archive.png | Bin .../static/src/img/mimetypes/audio.png | Bin .../static/src/img/mimetypes/binary.png | Bin .../static/src/img/mimetypes/calendar.png | Bin .../static/src/img/mimetypes/certificate.png | Bin .../static/src/img/mimetypes/disk.png | Bin .../static/src/img/mimetypes/document.png | Bin .../static/src/img/mimetypes/font.png | Bin .../static/src/img/mimetypes/html.png | Bin .../static/src/img/mimetypes/image.png | Bin addons/web/static/src/img/mimetypes/pdf.png | Bin 0 -> 2456 bytes .../static/src/img/mimetypes/presentation.png | Bin .../static/src/img/mimetypes/print.png | Bin .../static/src/img/mimetypes/script.png | Bin .../static/src/img/mimetypes/spreadsheet.png | Bin .../static/src/img/mimetypes/text.png | Bin .../static/src/img/mimetypes/unknown.png | Bin .../static/src/img/mimetypes/vector.png | Bin .../static/src/img/mimetypes/video.png | Bin addons/web/static/src/js/framework/formats.js | 1 - .../src/js/views/form_relational_widgets.js | 29 ++- addons/web/static/src/xml/base.xml | 11 +- addons/web/views/webclient_templates.xml | 1 + addons/web_editor/models/ir_qweb.py | 2 +- .../web_kanban/static/src/js/kanban_record.js | 1 + addons/website/models/website.py | 2 +- addons/website/static/src/js/website.js | 7 + addons/website/views/website_templates.xml | 1 + .../views/website_mail_channel.xml | 11 +- .../static/src/css/website_mail.css | 8 - .../static/src/css/website_mail.sass | 7 - 43 files changed, 158 insertions(+), 267 deletions(-) delete mode 100644 addons/mail/models/ir_attachment.py delete mode 100644 addons/mail/static/src/img/mimetypes/webimage.png create mode 100644 addons/web/static/src/css/mimetypes.css rename addons/{mail => web}/static/src/img/mimetypes/addresses.png (100%) rename addons/{mail => web}/static/src/img/mimetypes/archive.png (100%) rename addons/{mail => web}/static/src/img/mimetypes/audio.png (100%) rename addons/{mail => web}/static/src/img/mimetypes/binary.png (100%) rename addons/{mail => web}/static/src/img/mimetypes/calendar.png (100%) rename addons/{mail => web}/static/src/img/mimetypes/certificate.png (100%) rename addons/{mail => web}/static/src/img/mimetypes/disk.png (100%) rename addons/{mail => web}/static/src/img/mimetypes/document.png (100%) rename addons/{mail => web}/static/src/img/mimetypes/font.png (100%) rename addons/{mail => web}/static/src/img/mimetypes/html.png (100%) rename addons/{mail => web}/static/src/img/mimetypes/image.png (100%) create mode 100644 addons/web/static/src/img/mimetypes/pdf.png rename addons/{mail => web}/static/src/img/mimetypes/presentation.png (100%) rename addons/{mail => web}/static/src/img/mimetypes/print.png (100%) rename addons/{mail => web}/static/src/img/mimetypes/script.png (100%) rename addons/{mail => web}/static/src/img/mimetypes/spreadsheet.png (100%) rename addons/{mail => web}/static/src/img/mimetypes/text.png (100%) rename addons/{mail => web}/static/src/img/mimetypes/unknown.png (100%) rename addons/{mail => web}/static/src/img/mimetypes/vector.png (100%) rename addons/{mail => web}/static/src/img/mimetypes/video.png (100%) diff --git a/addons/mail/models/__init__.py b/addons/mail/models/__init__.py index 80a2054910f..ca72296a6fb 100644 --- a/addons/mail/models/__init__.py +++ b/addons/mail/models/__init__.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- -import ir_attachment import mail_message_subtype import mail_tracking_value import mail_alias diff --git a/addons/mail/models/ir_attachment.py b/addons/mail/models/ir_attachment.py deleted file mode 100644 index e40f94c9974..00000000000 --- a/addons/mail/models/ir_attachment.py +++ /dev/null @@ -1,174 +0,0 @@ -# -*- coding: utf-8 -*- - -import os.path - -from openerp import api, fields, models - - -class IrAttachment(models.Model): - """ Update partner to add a field about notification preferences """ - _name = "ir.attachment" - _inherit = 'ir.attachment' - - _fileext_to_type = { - '7z': 'archive', - 'aac': 'audio', - 'ace': 'archive', - 'ai': 'vector', - 'aiff': 'audio', - 'apk': 'archive', - 'app': 'binary', - 'as': 'script', - 'asf': 'video', - 'ass': 'text', - 'avi': 'video', - 'bat': 'script', - 'bin': 'binary', - 'bmp': 'image', - 'bzip2': 'archive', - 'c': 'script', - 'cab': 'archive', - 'cc': 'script', - 'ccd': 'disk', - 'cdi': 'disk', - 'cdr': 'vector', - 'cer': 'certificate', - 'cgm': 'vector', - 'cmd': 'script', - 'coffee': 'script', - 'com': 'binary', - 'cpp': 'script', - 'crl': 'certificate', - 'crt': 'certificate', - 'cs': 'script', - 'csr': 'certificate', - 'css': 'html', - 'csv': 'spreadsheet', - 'cue': 'disk', - 'd': 'script', - 'dds': 'image', - 'deb': 'archive', - 'der': 'certificate', - 'djvu': 'image', - 'dmg': 'archive', - 'dng': 'image', - 'doc': 'document', - 'docx': 'document', - 'dvi': 'print', - 'eot': 'font', - 'eps': 'vector', - 'exe': 'binary', - 'exr': 'image', - 'flac': 'audio', - 'flv': 'video', - 'gif': 'webimage', - 'gz': 'archive', - 'gzip': 'archive', - 'h': 'script', - 'htm': 'html', - 'html': 'html', - 'ico': 'image', - 'icon': 'image', - 'img': 'disk', - 'iso': 'disk', - 'jar': 'archive', - 'java': 'script', - 'jp2': 'image', - 'jpe': 'webimage', - 'jpeg': 'webimage', - 'jpg': 'webimage', - 'jpx': 'image', - 'js': 'script', - 'key': 'presentation', - 'keynote': 'presentation', - 'lisp': 'script', - 'lz': 'archive', - 'lzip': 'archive', - 'm': 'script', - 'm4a': 'audio', - 'm4v': 'video', - 'mds': 'disk', - 'mdx': 'disk', - 'mid': 'audio', - 'midi': 'audio', - 'mkv': 'video', - 'mng': 'image', - 'mp2': 'audio', - 'mp3': 'audio', - 'mp4': 'video', - 'mpe': 'video', - 'mpeg': 'video', - 'mpg': 'video', - 'nrg': 'disk', - 'numbers': 'spreadsheet', - 'odg': 'vector', - 'odm': 'document', - 'odp': 'presentation', - 'ods': 'spreadsheet', - 'odt': 'document', - 'ogg': 'audio', - 'ogm': 'video', - 'otf': 'font', - 'p12': 'certificate', - 'pak': 'archive', - 'pbm': 'image', - 'pdf': 'print', - 'pem': 'certificate', - 'pfx': 'certificate', - 'pgf': 'image', - 'pgm': 'image', - 'pk3': 'archive', - 'pk4': 'archive', - 'pl': 'script', - 'png': 'webimage', - 'pnm': 'image', - 'ppm': 'image', - 'pps': 'presentation', - 'ppt': 'presentation', - 'ps': 'print', - 'psd': 'image', - 'psp': 'image', - 'py': 'script', - 'r': 'script', - 'ra': 'audio', - 'rar': 'archive', - 'rb': 'script', - 'rpm': 'archive', - 'rtf': 'text', - 'sh': 'script', - 'sub': 'disk', - 'svg': 'vector', - 'sxc': 'spreadsheet', - 'sxd': 'vector', - 'tar': 'archive', - 'tga': 'image', - 'tif': 'image', - 'tiff': 'image', - 'ttf': 'font', - 'txt': 'text', - 'vbs': 'script', - 'vc': 'spreadsheet', - 'vml': 'vector', - 'wav': 'audio', - 'webp': 'image', - 'wma': 'audio', - 'wmv': 'video', - 'woff': 'font', - 'xar': 'vector', - 'xbm': 'image', - 'xcf': 'image', - 'xhtml': 'html', - 'xls': 'spreadsheet', - 'xlsx': 'spreadsheet', - 'xml': 'html', - 'zip': 'archive' - } - - file_type_icon = fields.Char('File Type Icon', compute='get_attachment_type', store=True) - file_type = fields.Char(related='file_type_icon') # FIXME remove in trunk - - @api.depends('datas_fname') - @api.one - def get_attachment_type(self): - fileext = os.path.splitext(self.datas_fname or '')[1].lower()[1:] - self.file_type_icon = self._fileext_to_type.get(fileext, 'unknown') diff --git a/addons/mail/models/mail_message.py b/addons/mail/models/mail_message.py index 69a805558c9..3315ecb2fca 100644 --- a/addons/mail/models/mail_message.py +++ b/addons/mail/models/mail_message.py @@ -207,12 +207,12 @@ class Message(models.Model): partner_tree = dict((partner[0], partner) for partner in partners_names) # 2. Attachments as SUPERUSER, because could receive msg and attachments for doc uid cannot see - attachments_data = attachments.sudo().read(['id', 'datas_fname', 'name', 'file_type_icon']) + attachments_data = attachments.sudo().read(['id', 'datas_fname', 'name', 'mimetype']) attachments_tree = dict((attachment['id'], { 'id': attachment['id'], 'filename': attachment['datas_fname'], 'name': attachment['name'], - 'file_type_icon': attachment['file_type_icon'], + 'mimetype': attachment['mimetype'], }) for attachment in attachments_data) # 3. Tracking values diff --git a/addons/mail/static/src/img/mimetypes/webimage.png b/addons/mail/static/src/img/mimetypes/webimage.png deleted file mode 100644 index ab2f84a1a54ae90feffcf683d2490ba2391eb953..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2603 zcmV+`3e@$9P)9OoH^pYNZ;&aO^YBt<^Rwd}aIl_ta?adRq! zko2mBP*U0w2&K?ME((EM^l;GwEuo}=($HQsB<)3v6G9AyKtmfsN)sn`>n1+ejUCHp z%dsWd*6wO|=kR~MnAy=vTFGvkBY0rM|Bq&8-uL_7@BI%Ws>-MNFrRAlR|#AtaFqZq z!2Uyf9>VHxRki!02B4}moiJ?!=%Q^wrmX09Z@c-<&8RB-4(_@X$FY7|jwp(B`_65b zR5i_js&+e$L#0w~jZK?q&AZa}TH7l+@0as$mAUt|e|~RoA4w8-=Mrj7=YfCi=iIq- zAE-=3q_vY{o!w}suh}8#>%E2z8%6-IiDe!EfU&VLjvN{N06?dI1j*YeUZIuG?9Rd| zR|Q>TNs=TbVA~K-wIoSQ6o>yCXe5ocWNjmDug}lQ!Ya%Q9K~9jN^fBTN}MDZ8~xYO zo&hYFJlZA)DlHj6<`AGwEi}Prb)hJ#HqXj}1d=4d(JRY97{^p9HI{UD;`$zvOC}{E zVi7U9N<_>o$w-?TnTdF_s5OhaV(pCOE=(YfF+^7ob)n=79eo{~Jae9@N{yjq{q*&A zr$mg&?$eg2>w-nSknRz($b;1cyBGm$mBc2vmmwe`*_ldY{9M8+>v>Fy}v8av;KG7Oc*G)2FZ0#pPYgE47zMU*JE_`a9x{>yi*;n&aaWbM#3T(`29wJW+Y z#^(MLlQ40y##DKln?Jh>$2E+sTEbK{F@y)ItFVNZcgvFDfD5gqf}# zM4U8oV$#0R895mRu^8h(MyOV+apX(|&rz-$T0*JdfQ|88FPjr(0+Q6^Z4z_$=Sn>C ztGAHKC||m5DRGqE|Nt|pz5>#W{q{cTs@9^Ny zUgy&39v=Vp4S0apGWPEsy~JO4o#mI`xe?cyGYy?L4jFvor|!3)gt7sv=#t8&30iap zyaD40#?8PxsYo@R#)dWGa2nePA%WFP;KvWH<dLV-_Klua*9Nf;lD3*v%E2qdU&ph-QQba~)8pq`*H*jV|> z9RuusZv{Vp?p^L2>0#wSz$@>J^TgI8Z28{J^mUml0xxcWmw5RaV>W?IPf9wf799nn zvq%`%f>T4B1c>l^2XU?$#_jCGHYy}j=Lydr!$vWh0Fh#2&`^2oq3hT)I>jTuJHWaX zCI0fx1TXz)Bdhwo%Yqj-K)e8P3wRAbUu(?CfXRWII)`2sCNYG+&79^ms_HL4QUq4Y{VYlfoSSVVu3`dHqu$>*kprid%Q)!7r`wePBCxe1bD8;=+RLo zCMJlY@GxXsi#dUIDHTv7>78B6fnYxP)|Z=Zq;py7PLAY*AOh3%^gX91!z%)Boq$VG z!09QU9VZ<2?%U7gg-N0)q7g=$7aWOaEm}=(Luk;2WIit~OTOlB)B1A2@ewaT<67=w z2zdrhPc$wIJ~2gp@RE{f$jYHXmJTlE_B&S5)6>ga+ux{9UcC64h)7!-efYVs{Z@gz z3cQ*kZ?_dPceiTJmRz-=I7WE-jT&!{&%DDJLm?;;1TKETB`CTW&qcg|Cmws8YPG`H z*)x>OWsV&iwdHc<{b&F1>;Y0&pD&@E$1ESlF|zR%0Fst>7-J}v0!qaK#bSX{sX(b7 zP%8RtSht!=rOd&9A0Ubos+9_d4j-D{y>H(G}7AX{52Cg08^qEt{i6x0+cI|$rcKpPtZ@u{3i^sFn+Icp*V)+mce(nAb9lVI( z`#!$s<9QxlOIv|Gdv-JYnPI{(Vsc_a_wL)f@BjxgK3^(a2!LFB<%d>PQCBm`veiTZF{{wcJ}P}k96ffle(KZ-9Uq_g{qtKk|7Lu=JPm}| zSy$CKCond4_J=QQ-SP{y+Nn)9(rjBvwPkN|rcL(MLB;r(o_Hd N002ovPDHLkV1i%V-y8q{ diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js index 9f3ce11dca6..0567fc89464 100644 --- a/addons/mail/static/src/js/mail.js +++ b/addons/mail/static/src/js/mail.js @@ -14,6 +14,7 @@ var utils = require('web.utils'); var web_client = require('web.web_client'); var Widget = require('web.Widget'); var View = require('web.View'); +var formats = require('web.formats'); var _t = core._t; var QWeb = core.qweb; @@ -902,7 +903,7 @@ var MailThread = Attachment.extend ({ else if (author) { avt = '/web/image/res.partner/' + author[0] + '/image_small'; }else { - avt = '/web/image/res.partner/' + session.uid + '/image_small'; + avt = '/web/image/res.users/' + session.uid + '/image_small'; } return avt; }, @@ -1357,7 +1358,8 @@ var ComposeMessage = Attachment.extend ({ 'name': filename, 'filename': filename, 'url': '', - 'upload': true + 'upload': true, + 'mimetype': '' }); this.$(".o_timeline_msg_attachment_list").html(this.display_attachments(this)); @@ -1379,6 +1381,7 @@ var ComposeMessage = Attachment.extend ({ 'id': result.id, 'name': result.name, 'filename': result.filename, + 'mimetype': result.mimetype, 'url': '/web/content/' + result.id + '?download=true' }; } diff --git a/addons/mail/static/src/xml/mail.xml b/addons/mail/static/src/xml/mail.xml index d3197d7d11b..f1de2b68daf 100644 --- a/addons/mail/static/src/xml/mail.xml +++ b/addons/mail/static/src/xml/mail.xml @@ -191,34 +191,17 @@ --> - -
- - -
-
-
- -
-
- uploading -
+
+ +
+
+
+
- - -
- - -
-
-
- -
-
- uploading -
+
+ uploading
- +
diff --git a/addons/mail/views/mail_message_views.xml b/addons/mail/views/mail_message_views.xml index 6f2b5c88dd6..6c3f28ee6af 100644 --- a/addons/mail/views/mail_message_views.xml +++ b/addons/mail/views/mail_message_views.xml @@ -112,7 +112,7 @@ ir.attachment - + @@ -120,13 +120,10 @@
-
- +
+
-
- -
-
+
diff --git a/addons/project/project.py b/addons/project/project.py index a954de936a1..633f929927d 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -439,7 +439,7 @@ class task(osv.osv): def _compute_displayed_image(self, cr, uid, ids, prop, arg, context=None): res = {} for line in self.browse(cr, uid, ids, context=context): - res[line.id] = line.attachment_ids and line.attachment_ids.filtered(lambda x: x.file_type_icon == 'webimage')[0] or None + res[line.id] = line.attachment_ids and line.attachment_ids.filtered(lambda x: x.mimetype.startswith('image'))[0] or None return res _columns = { diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index b235bd73094..10556c1e30f 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -1875,17 +1875,34 @@ border: solid 1px rgba(124, 123, 173, 0.14); } .openerp .oe_fileupload .oe_attachments .oe_attachment { + background-repeat: no-repeat; + word-wrap: break-word; padding: 2px; padding-left: 4px; padding-right: 4px; + overflow: hidden; } -.openerp .oe_fileupload .oe_attachments .oe_attachment .fa { +.openerp .oe_fileupload .oe_attachments .oe_attachment a { + display: block; + background-repeat: no-repeat; + background-size: contain; + word-wrap: break-word; + width: 100px; + height: 80px; +} +.openerp .oe_fileupload .oe_attachments .oe_attachment > .fa { font-size: 23px; - margin-top: -5px; + position: absolute; + top: -5px; + right: -8px; } -.openerp .oe_fileupload .oe_attachments .oe_attachment .fa:hover { +.openerp .oe_fileupload .oe_attachments .oe_attachment > .fa:hover { text-decoration: none; } +.openerp .oe_fileupload .oe_attachments .oe_attachment .fa-inverse { + font-size: 1.15em; + margin-top: 1px; +} .openerp .oe_fileupload .oe_attachments .oe_attachment:nth-child(odd) { background: white; } diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index 5b48b1dc8b4..64a73b8addd 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -1650,14 +1650,29 @@ $sheet-padding: 16px border-radius: 2px border: solid 1px rgba(124,123,173,0.14) .oe_attachment + background-repeat: no-repeat + word-wrap: break-word padding: 2px padding-left: 4px padding-right: 4px - .fa + overflow: hidden + a + display: block + background-repeat: no-repeat + background-size: contain + word-wrap: break-word + width: 100px + height: 80px + > .fa font-size: 23px - margin-top: -5px - .fa:hover + position: absolute + top: -5px + right: -8px + > .fa:hover text-decoration: none + .fa-inverse + font-size: 1.15em + margin-top: 1px .oe_attachment:nth-child(odd) background: white .oe_attachment:nth-child(even) diff --git a/addons/web/static/src/css/mimetypes.css b/addons/web/static/src/css/mimetypes.css new file mode 100644 index 00000000000..43aa6b7fae9 --- /dev/null +++ b/addons/web/static/src/css/mimetypes.css @@ -0,0 +1,66 @@ +.o_image { + background-image: url('/web/static/src/img/mimetypes/unknown.png'); + background-size: contain; + width: 100px; + height: 80px; + display: inline-block; + background-position: center; + background-repeat: no-repeat; +} +.o_image[data-mimetype^='image'] { + background-image: url('/web/static/src/img/mimetypes/image.png'); +} +.o_image[data-mimetype^='audio'] { + background-image: url('/web/static/src/img/mimetypes/audio.png'); +} +.o_image[data-mimetype*='octet-stream'], .o_image[data-mimetype*='download'] { + background-image: url('/web/static/src/img/mimetypes/binary.png'); +} +.o_image[data-mimetype^='video'], .o_image[title$='.mp4'], .o_image[title$='.avi'] { + background-image: url('/web/static/src/img/mimetypes/video.png'); +} +.o_image[data-mimetype$='archive'], .o_image[data-mimetype$='compressed'], .o_image[data-mimetype*='zip'], .o_image[data-mimetype$='tar'], .o_image[data-mimetype*='package'] { + background-image: url('/web/static/src/img/mimetypes/archive.png'); +} +.o_image[data-mimetype='application/pdf'] { + background-image: url('/web/static/src/img/mimetypes/pdf.png'); +} +.o_image[data-mimetype^='text'], .o_image[data-mimetype$='rtf'] { + background-image: url('/web/static/src/img/mimetypes/text.png'); +} +.o_image[data-mimetype^='text-master'], .o_image[data-mimetype*='document'], .o_image[data-mimetype*='msword'] { + background-image: url('/web/static/src/img/mimetypes/document.png'); +} +.o_image[data-mimetype$='postscript'], .o_image[data-mimetype$='cdr'], .o_image[data-mimetype$='xara'], .o_image[data-mimetype$='cgm'], .o_image[data-mimetype$='graphics'], .o_image[data-mimetype$='draw'], .o_image[data-mimetype*='svg'] { + background-image: url('/web/static/src/img/mimetypes/vector.png'); +} +.o_image[data-mimetype*='xml'], .o_image[data-mimetype$='css'], .o_image[data-mimetype$='html'] { + background-image: url('/web/static/src/img/mimetypes/html.png'); +} +.o_image[data-mimetype*='-image'], .o_image[data-mimetype*='diskimage'] { + background-image: url('/web/static/src/img/mimetypes/disk.png'); +} +.o_image[data-mimetype$='csv'], .o_image[data-mimetype*='vc'], .o_image[data-mimetype*='excel'], .o_image[data-mimetype$='numbers'], .o_image[data-mimetype$='calc'], .o_image[data-mimetype*='mods'], .o_image[data-mimetype*='spreadsheet'] { + background-image: url('/web/static/src/img/mimetypes/spreadsheet.png'); +} +.o_image[data-mimetype^='key'] { + background-image: url('/web/static/src/img/mimetypes/certificate.png'); +} +.o_image[data-mimetype*='presentation'], .o_image[data-mimetype*='keynote'], .o_image[data-mimetype*='teacher'], .o_image[data-mimetype*='slideshow'], .o_image[data-mimetype*='powerpoint'] { + background-image: url('/web/static/src/img/mimetypes/presentation.png'); +} +.o_image[data-mimetype*='cert'], .o_image[data-mimetype*='rules'], .o_image[data-mimetype*='pkcs'], .o_image[data-mimetype$='stl'], .o_image[data-mimetype$='crl'] { + background-image: url('/web/static/src/img/mimetypes/certificate.png'); +} +.o_image[data-mimetype*='-font'] { + background-image: url('/web/static/src/img/mimetypes/font.png'); +} +.o_image[data-mimetype*='-dvi'] { + background-image: url('/web/static/src/img/mimetypes/print.png'); +} +.o_image[data-mimetype*='script'], .o_image[data-mimetype$='bat'], .o_image[data-mimetype$='cgi'], .o_image[data-mimetype$='-c'], .o_image[data-mimetype*='java'], .o_image[data-mimetype*='ruby'] { + background-image: url('/web/static/src/img/mimetypes/script.png'); +} +.o_image[data-mimetype*='calendar'], .o_image[data-mimetype$='ldif'] { + background-image: url('/web/static/src/img/mimetypes/calendar.png'); +} diff --git a/addons/mail/static/src/img/mimetypes/addresses.png b/addons/web/static/src/img/mimetypes/addresses.png similarity index 100% rename from addons/mail/static/src/img/mimetypes/addresses.png rename to addons/web/static/src/img/mimetypes/addresses.png diff --git a/addons/mail/static/src/img/mimetypes/archive.png b/addons/web/static/src/img/mimetypes/archive.png similarity index 100% rename from addons/mail/static/src/img/mimetypes/archive.png rename to addons/web/static/src/img/mimetypes/archive.png diff --git a/addons/mail/static/src/img/mimetypes/audio.png b/addons/web/static/src/img/mimetypes/audio.png similarity index 100% rename from addons/mail/static/src/img/mimetypes/audio.png rename to addons/web/static/src/img/mimetypes/audio.png diff --git a/addons/mail/static/src/img/mimetypes/binary.png b/addons/web/static/src/img/mimetypes/binary.png similarity index 100% rename from addons/mail/static/src/img/mimetypes/binary.png rename to addons/web/static/src/img/mimetypes/binary.png diff --git a/addons/mail/static/src/img/mimetypes/calendar.png b/addons/web/static/src/img/mimetypes/calendar.png similarity index 100% rename from addons/mail/static/src/img/mimetypes/calendar.png rename to addons/web/static/src/img/mimetypes/calendar.png diff --git a/addons/mail/static/src/img/mimetypes/certificate.png b/addons/web/static/src/img/mimetypes/certificate.png similarity index 100% rename from addons/mail/static/src/img/mimetypes/certificate.png rename to addons/web/static/src/img/mimetypes/certificate.png diff --git a/addons/mail/static/src/img/mimetypes/disk.png b/addons/web/static/src/img/mimetypes/disk.png similarity index 100% rename from addons/mail/static/src/img/mimetypes/disk.png rename to addons/web/static/src/img/mimetypes/disk.png diff --git a/addons/mail/static/src/img/mimetypes/document.png b/addons/web/static/src/img/mimetypes/document.png similarity index 100% rename from addons/mail/static/src/img/mimetypes/document.png rename to addons/web/static/src/img/mimetypes/document.png diff --git a/addons/mail/static/src/img/mimetypes/font.png b/addons/web/static/src/img/mimetypes/font.png similarity index 100% rename from addons/mail/static/src/img/mimetypes/font.png rename to addons/web/static/src/img/mimetypes/font.png diff --git a/addons/mail/static/src/img/mimetypes/html.png b/addons/web/static/src/img/mimetypes/html.png similarity index 100% rename from addons/mail/static/src/img/mimetypes/html.png rename to addons/web/static/src/img/mimetypes/html.png diff --git a/addons/mail/static/src/img/mimetypes/image.png b/addons/web/static/src/img/mimetypes/image.png similarity index 100% rename from addons/mail/static/src/img/mimetypes/image.png rename to addons/web/static/src/img/mimetypes/image.png diff --git a/addons/web/static/src/img/mimetypes/pdf.png b/addons/web/static/src/img/mimetypes/pdf.png new file mode 100644 index 0000000000000000000000000000000000000000..bfb4850594f2d27491c93776557e572f485c8403 GIT binary patch literal 2456 zcmV;J31{|+P)@*HHxN2 z(Z5jmL#X8;QlPXA2-Hdx8v_&(s8FLMhHhK;!J`yhcDLPaOSkvlxijk zm@vt?=ggd$JHPMweSfbr@X_(nF{wjUn|N&JWAk;`A+9VGSB%_sDY{FFE{ry(l(IFY zolqeTT3LIiF4@PgzkXf+e+0l&J09P=bm_A5X3l6(N~tMXt#l@hZD$!8K1$D<-Rb`R zew4VIbS-w;l9Xf)DAV|JP1Q7z~-k88WB88T_4hl_a#9|4e z(I`ic4$`^5b7c6~u{V`tUA}tty7$HlK&v((LI@PDxB)?eJdx_~CAT^XPkUYy1lzS4 zK6Zrn|MecHO`plR=Pr(a;`Dj#XyzN+w?FdfDFc8nun68N6IkV(@?;Eekb^A)tAJYl`D^2h$UD3mBn z!{AhEgrQ?YB;xhVnKg&D*4BgyY0qxm`p|h}1)z_jfC6<8p5FO;EGtvR>(sjF9Wy^Z zgU?=YKB7R^4MLjEz`zI0n==n9Yhh(A+B-Vx4j$-y;n7DoFI}@{-RlzuP@s^%x&mMR z$`yHF<&^S`IcKmrFDl-=cP(f13QbdJAw?>c#dU>PG)Bfsqm-hlDH-qS?fK)DEn8aF zu3dXo|=RWlmHQMT^Gl3u^k)7ad7-z2Kos9dMn2ByKrpBpL1{>2gmi#{oeI^am5Ft z@!DVa@baD)*?*vuBC<;P%=32}bpJ&#B4nz?MV3hR$j_r_6r%7khUY|~rPG?A`((La% zz&Yo962mYXHgDN{F|d1l0E!0QS$9`2nM|ha&IKQyB-1}Y&%XWWkvg)S2g;mrsa65Z zaG0~^Hxh|P5pg~G*$$^tr}*&1hxGRk(Aaopyr;Ko&A0&s{AfOAC0mC>@od+zuFR7j1RlTG;KF1kZM zb%Ml>ZM1!GnDo_O#f?PAkvrDTN1~A^uDGFz=R&3Ls*nOX?F&#MM1QvfiN;V$l{C$7 zYMgTl(=f|yXI!a7j>)P<5-RaHcCrmbD6bvHT1%*^+NdFaEeZvU*vrm}U#E(*H@od@ z%snrn**0PrqYB^C-Agu`t@vicFi9qxg6ZVM16d)T&t(TH0Ky;G4(4mGpdCFz__p7K}$>X)KEy}=@SH@ikKUIVjI~NE6FThLHOBch;F`@)cOrI&7iflrKU3y1T_^D z@(PlI(5g_ec(G^i9zyROV&t-`Ad%qIhMy4s!MCv&FTuWWX;n|!-PMg{Wh>gPX&NMh z6q`JSs0t$T;3lkV*Fd5U1=yEdPWtV)h<*QNQujWBeeU@c|G%}hb(Bg}rkX^K^fQXhL8LhNOrAojs8~0j*@-qhO!mfaprulT{`MOB-dE7N4nj!7 zZ8;lz#Wh&p`!U+z_hLSLKj;Sb6<1?lx`KZW4q{mr#_$laSO3EC_7jDi&M;|fYneg{ zmFzTVnKa>F-i^KZd?L615H&o6ecpxGD{sJUYVmDF<(-$)+CggN4d~D9LVxxTm>ch4 z(ZWyRE?k6!BRH3Q5jWXZmH|{MZzoQnz}VRS5GaLn@ufIRJ`eTvg=$z8yPLcRjzn;- zT#0k#O0cuM^TKX8GKdq4Lj{?T}8Hxi9wK6D?MJMY0+c4>*=)jU>l z?7%QNYx!jr6GxTLepNp4two_R?MkS@exkR17nwPW@BtiQsIy6Z?|Okm)mseeD{oTW+Os^^N6jHLnF#aW1cq3f~zDyB>v&v*3>2q$s3j z&xM0;5L&xXV_*h&oly3GVV0Yr!y0I@;UDRCd;+P-y)IGJS{1 z07Rm+RpWgn{s-(J@1aWUA-LxxfxXqz{mKbb2*3?TeB*+yt}ZW!S7kcL3v8Mu?H%o? zfH8`w{1!~ba4FTsGGPiC1WQWg)vIl7tz~|{boB{(k{pj!p_Y~kMoX#SB{mR{)gB9g z2oNpZMpsJZd;C>ZD$wT&euYjaOt z-+4>2+3W#d10%kCRROqu8+r1nog09=blsRQh^n@df>d4QTE-_bmM?^e?Kr)^`R&si zfRh3FYKF!L5cOLeF#T))ZA}P}_BnsjAD7vHs_um_eGRGqf$%{PuJ3)UN?z#y{`fax WBbO2hC)JMt0000...Upload in progress... - - - - + + + + + + +
diff --git a/addons/web/views/webclient_templates.xml b/addons/web/views/webclient_templates.xml index 1a674676553..64d60dcf379 100644 --- a/addons/web/views/webclient_templates.xml +++ b/addons/web/views/webclient_templates.xml @@ -94,6 +94,7 @@ odoo._modules = ; + diff --git a/addons/web_editor/models/ir_qweb.py b/addons/web_editor/models/ir_qweb.py index 87dd6e58226..503f95a0d38 100644 --- a/addons/web_editor/models/ir_qweb.py +++ b/addons/web_editor/models/ir_qweb.py @@ -337,7 +337,7 @@ class Image(orm.AbstractModel): if max_width or max_height: max_size = '%sx%s' % (max_width, max_height) - sha = hashlib.sha1(record.write_date).hexdigest()[0:7] + sha = hashlib.sha1(getattr(record, '__last_update')).hexdigest()[0:7] max_size = '' if max_size is None else '/%s' % max_size src = '/web/image/%s/%s/%s%s?unique=%s' % (record._name, record.id, field_name, max_size, sha) diff --git a/addons/web_kanban/static/src/js/kanban_record.js b/addons/web_kanban/static/src/js/kanban_record.js index 787fed34978..40c7c279d87 100644 --- a/addons/web_kanban/static/src/js/kanban_record.js +++ b/addons/web_kanban/static/src/js/kanban_record.js @@ -57,6 +57,7 @@ var KanbanRecord = Widget.extend({ widget: this, read_only_mode: this.read_only_mode, user_context: session.user_context, + formats: formats, }; for (var p in this) { if (_.str.startsWith(p, 'kanban_')) { diff --git a/addons/website/models/website.py b/addons/website/models/website.py index 3c57c03ac50..1d3291008af 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -561,7 +561,7 @@ class website(osv.osv): def image_url(self, cr, uid, record, field, size=None, context=None): """Returns a local url that points to the image field of a given browse record.""" sudo_record = record.sudo() - sha = hashlib.sha1(sudo_record.write_date).hexdigest()[0:7] + sha = hashlib.sha1(getattr(sudo_record, '__last_update')).hexdigest()[0:7] size = '' if size is None else '/%s' % size return '/web/image/%s/%s/%s%s?unique=%s' % (record._name, record.id, field, size, sha) diff --git a/addons/website/static/src/js/website.js b/addons/website/static/src/js/website.js index f049593e8d7..ded64d27704 100644 --- a/addons/website/static/src/js/website.js +++ b/addons/website/static/src/js/website.js @@ -230,6 +230,13 @@ base.ready().then(function () { } },0); +// display image thumbnail +$(".o_image[data-mimetype^='image']").each(function () { + var $img = $(this); + if (/gif|jpe|jpg|png/.test($img.data('mimetype')) && $img.data('src')) { + $img.css('background-image', "url('" + $img.data('src') + "')"); + } +}); /** * Object who contains all method and bind for the top bar, the template is create server side. diff --git a/addons/website/views/website_templates.xml b/addons/website/views/website_templates.xml index ad5b53ac608..8d102c592a1 100644 --- a/addons/website/views/website_templates.xml +++ b/addons/website/views/website_templates.xml @@ -13,6 +13,7 @@