author | Sylvain Thénault <sylvain.thenault@logilab.fr> |
Fri, 02 Jul 2010 18:03:18 +0200 | |
changeset 5872 | 137be4487ade |
parent 5868 | c4380d8cfc25 |
child 5877 | 0c7b7b76a84f |
permissions | -rw-r--r-- |
5421
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4382
diff
changeset
|
1 |
# copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4382
diff
changeset
|
2 |
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4382
diff
changeset
|
3 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4382
diff
changeset
|
4 |
# This file is part of CubicWeb. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4382
diff
changeset
|
5 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4382
diff
changeset
|
6 |
# CubicWeb is free software: you can redistribute it and/or modify it under the |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4382
diff
changeset
|
7 |
# terms of the GNU Lesser General Public License as published by the Free |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4382
diff
changeset
|
8 |
# Software Foundation, either version 2.1 of the License, or (at your option) |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4382
diff
changeset
|
9 |
# any later version. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4382
diff
changeset
|
10 |
# |
5424
8ecbcbff9777
replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5421
diff
changeset
|
11 |
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT |
5421
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4382
diff
changeset
|
12 |
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4382
diff
changeset
|
13 |
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4382
diff
changeset
|
14 |
# details. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4382
diff
changeset
|
15 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4382
diff
changeset
|
16 |
# You should have received a copy of the GNU Lesser General Public License along |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4382
diff
changeset
|
17 |
# with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
18 |
"""Specific views for entities adapting to IDownloadable""" |
0 | 19 |
|
20 |
__docformat__ = "restructuredtext en" |
|
1639 | 21 |
_ = unicode |
0 | 22 |
|
2312
af4d8f75c5db
use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2136
diff
changeset
|
23 |
from logilab.mtconverter import BINARY_ENCODINGS, TransformError, xml_escape |
0 | 24 |
|
1639 | 25 |
from cubicweb.view import EntityView |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
26 |
from cubicweb.selectors import (one_line_rset, implements, match_context_prop, |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
27 |
adaptable, has_mimetype) |
4023
eae23c40627a
drop common subpackage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3890
diff
changeset
|
28 |
from cubicweb.mttransforms import ENGINE |
5866
e676a869a3e9
[idownloadable] make the download view http cache friendly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
29 |
from cubicweb.web import box, httpcache |
1639 | 30 |
from cubicweb.web.views import primary, baseviews |
0 | 31 |
|
32 |
||
3846
1a7d10864628
new argument to provide extra content
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3789
diff
changeset
|
33 |
def download_box(w, entity, title=None, label=None, footer=u''): |
3460
e4843535db25
[api] some more _cw / __regid__, automatic tests now pass again
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3451
diff
changeset
|
34 |
req = entity._cw |
1885
c2011d238e98
replace sideRelated with sideBox
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
1639
diff
changeset
|
35 |
w(u'<div class="sideBox">') |
249
5ab64969df20
define an actual download box, keeping download_box function for bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
237
diff
changeset
|
36 |
if title is None: |
5ab64969df20
define an actual download box, keeping download_box function for bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
237
diff
changeset
|
37 |
title = req._('download') |
5ab64969df20
define an actual download box, keeping download_box function for bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
237
diff
changeset
|
38 |
w(u'<div class="sideBoxTitle downloadBoxTitle"><span>%s</span></div>' |
2312
af4d8f75c5db
use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2136
diff
changeset
|
39 |
% xml_escape(title)) |
0 | 40 |
w(u'<div class="sideBox downloadBox"><div class="sideBoxBody">') |
41 |
w(u'<a href="%s"><img src="%s" alt="%s"/> %s</a>' |
|
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
42 |
% (xml_escape(entity.cw_adapt_to('IDownloadable').download_url()), |
5467
57372dbfd114
[https] fix resource urls in https version of a site: should use the https version as well to avoid warnings from the nrowser
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5444
diff
changeset
|
43 |
req.uiprops['DOWNLOAD_ICON'], |
2312
af4d8f75c5db
use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2136
diff
changeset
|
44 |
_('download icon'), xml_escape(label or entity.dc_title()))) |
3846
1a7d10864628
new argument to provide extra content
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3789
diff
changeset
|
45 |
w(u'%s</div>' % footer) |
1a7d10864628
new argument to provide extra content
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3789
diff
changeset
|
46 |
w(u'</div></div>\n') |
0 | 47 |
|
985
6a25c58a1c23
backport stable branch, take care a lot of conflicts occured, this may be the revision you're looking for...
sylvain.thenault@logilab.fr
diff
changeset
|
48 |
|
5866
e676a869a3e9
[idownloadable] make the download view http cache friendly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
49 |
class DownloadBox(box.EntityBoxTemplate): |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3072
diff
changeset
|
50 |
__regid__ = 'download_box' |
985
6a25c58a1c23
backport stable branch, take care a lot of conflicts occured, this may be the revision you're looking for...
sylvain.thenault@logilab.fr
diff
changeset
|
51 |
# no download box for images |
957
b1f68f725fe9
don't show download box nor download link for images, by default hide name attribute even if not specified in the interface
sylvain.thenault@logilab.fr
parents:
431
diff
changeset
|
52 |
# XXX primary_view selector ? |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
53 |
__select__ = (one_line_rset() & match_context_prop() |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
54 |
& adaptable('IDownloadable') & ~has_mimetype('image/')) |
249
5ab64969df20
define an actual download box, keeping download_box function for bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
237
diff
changeset
|
55 |
order = 10 |
1498
2c6eec0b46b9
fix imports, cleanup, repair some ajax calls
sylvain.thenault@logilab.fr
parents:
987
diff
changeset
|
56 |
|
249
5ab64969df20
define an actual download box, keeping download_box function for bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
237
diff
changeset
|
57 |
def cell_call(self, row, col, title=None, label=None, **kwargs): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
58 |
entity = self.cw_rset.get_entity(row, col) |
249
5ab64969df20
define an actual download box, keeping download_box function for bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
237
diff
changeset
|
59 |
download_box(self.w, entity, title, label) |
5ab64969df20
define an actual download box, keeping download_box function for bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
237
diff
changeset
|
60 |
|
5ab64969df20
define an actual download box, keeping download_box function for bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
237
diff
changeset
|
61 |
|
1639 | 62 |
class DownloadView(EntityView): |
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
431
diff
changeset
|
63 |
"""this view is replacing the deprecated 'download' controller and allow |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
431
diff
changeset
|
64 |
downloading of entities providing the necessary interface |
0 | 65 |
""" |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3072
diff
changeset
|
66 |
__regid__ = 'download' |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
67 |
__select__ = one_line_rset() & adaptable('IDownloadable') |
0 | 68 |
|
69 |
templatable = False |
|
70 |
content_type = 'application/octet-stream' |
|
71 |
binary = True |
|
5866
e676a869a3e9
[idownloadable] make the download view http cache friendly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
72 |
http_cache_manager = httpcache.EntityHTTPCacheManager |
0 | 73 |
add_to_breadcrumbs = False |
74 |
||
75 |
def set_request_content_type(self): |
|
76 |
"""overriden to set the correct filetype and filename""" |
|
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
77 |
entity = self.cw_rset.complete_entity(self.cw_row or 0, self.cw_col or 0) |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
78 |
adapter = entity.cw_adapt_to('IDownloadable') |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
79 |
encoding = adapter.download_encoding() |
0 | 80 |
if encoding in BINARY_ENCODINGS: |
81 |
contenttype = 'application/%s' % encoding |
|
82 |
encoding = None |
|
83 |
else: |
|
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
84 |
contenttype = adapter.download_content_type() |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
85 |
self._cw.set_content_type(contenttype or self.content_type, |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
86 |
filename=adapter.download_file_name(), |
0 | 87 |
encoding=encoding) |
88 |
||
89 |
def call(self): |
|
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
90 |
entity = self.cw_rset.complete_entity(self.cw_row or 0, self.cw_col or 0) |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
91 |
adapter = entity.cw_adapt_to('IDownloadable') |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
92 |
self.w(adapter.download_data()) |
0 | 93 |
|
5866
e676a869a3e9
[idownloadable] make the download view http cache friendly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
94 |
def last_modified(self): |
e676a869a3e9
[idownloadable] make the download view http cache friendly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
95 |
return self.cw_rset.get_entity(self.cw_row or 0, self.cw_col or 0).modification_date |
0 | 96 |
|
1639 | 97 |
class DownloadLinkView(EntityView): |
0 | 98 |
"""view displaying a link to download the file""" |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3072
diff
changeset
|
99 |
__regid__ = 'downloadlink' |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
100 |
__select__ = adaptable('IDownloadable') |
0 | 101 |
title = None # should not be listed in possible views |
102 |
||
1498
2c6eec0b46b9
fix imports, cleanup, repair some ajax calls
sylvain.thenault@logilab.fr
parents:
987
diff
changeset
|
103 |
|
0 | 104 |
def cell_call(self, row, col, title=None, **kwargs): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
105 |
entity = self.cw_rset.get_entity(row, col) |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
106 |
url = xml_escape(entity.cw_adapt_to('IDownloadable').download_url()) |
2312
af4d8f75c5db
use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2136
diff
changeset
|
107 |
self.w(u'<a href="%s">%s</a>' % (url, xml_escape(title or entity.dc_title()))) |
0 | 108 |
|
109 |
||
1639 | 110 |
class IDownloadablePrimaryView(primary.PrimaryView): |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
111 |
__select__ = adaptable('IDownloadable') |
0 | 112 |
|
1554
3a3263df6cdd
new primary view using uicfg.rdisplay (major api cleanup)
sylvain.thenault@logilab.fr
parents:
1498
diff
changeset
|
113 |
def render_entity_attributes(self, entity): |
3a3263df6cdd
new primary view using uicfg.rdisplay (major api cleanup)
sylvain.thenault@logilab.fr
parents:
1498
diff
changeset
|
114 |
super(IDownloadablePrimaryView, self).render_entity_attributes(entity) |
0 | 115 |
self.w(u'<div class="content">') |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
116 |
adapter = entity.cw_adapt_to('IDownloadable') |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
117 |
contenttype = adapter.download_content_type() |
0 | 118 |
if contenttype.startswith('image/'): |
3460
e4843535db25
[api] some more _cw / __regid__, automatic tests now pass again
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3451
diff
changeset
|
119 |
self.wview('image', entity.cw_rset, row=entity.cw_row) |
0 | 120 |
else: |
3460
e4843535db25
[api] some more _cw / __regid__, automatic tests now pass again
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3451
diff
changeset
|
121 |
self.wview('downloadlink', entity.cw_rset, title=self._cw._('download'), row=entity.cw_row) |
5714
04a8e48f10bc
[idownloadable] refactor IDownloadable primary view to make overriding easier
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5556
diff
changeset
|
122 |
self.render_data(entity, contenttype, 'text/html') |
0 | 123 |
self.w(u'</div>') |
1498
2c6eec0b46b9
fix imports, cleanup, repair some ajax calls
sylvain.thenault@logilab.fr
parents:
987
diff
changeset
|
124 |
|
5714
04a8e48f10bc
[idownloadable] refactor IDownloadable primary view to make overriding easier
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5556
diff
changeset
|
125 |
def render_data(self, entity, sourcemt, targetmt): |
04a8e48f10bc
[idownloadable] refactor IDownloadable primary view to make overriding easier
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5556
diff
changeset
|
126 |
adapter = entity.cw_adapt_to('IDownloadable') |
04a8e48f10bc
[idownloadable] refactor IDownloadable primary view to make overriding easier
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5556
diff
changeset
|
127 |
if ENGINE.find_path(sourcemt, targetmt): |
04a8e48f10bc
[idownloadable] refactor IDownloadable primary view to make overriding easier
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5556
diff
changeset
|
128 |
try: |
04a8e48f10bc
[idownloadable] refactor IDownloadable primary view to make overriding easier
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5556
diff
changeset
|
129 |
self.w(entity._cw_mtc_transform(adapter.download_data(), sourcemt, |
04a8e48f10bc
[idownloadable] refactor IDownloadable primary view to make overriding easier
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5556
diff
changeset
|
130 |
targetmt, adapter.download_encoding())) |
04a8e48f10bc
[idownloadable] refactor IDownloadable primary view to make overriding easier
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5556
diff
changeset
|
131 |
except Exception, ex: |
04a8e48f10bc
[idownloadable] refactor IDownloadable primary view to make overriding easier
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5556
diff
changeset
|
132 |
self.exception('while rendering data for %s', entity) |
04a8e48f10bc
[idownloadable] refactor IDownloadable primary view to make overriding easier
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5556
diff
changeset
|
133 |
msg = self._cw._("can't display data, unexpected error: %s") \ |
04a8e48f10bc
[idownloadable] refactor IDownloadable primary view to make overriding easier
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5556
diff
changeset
|
134 |
% xml_escape(unicode(ex)) |
04a8e48f10bc
[idownloadable] refactor IDownloadable primary view to make overriding easier
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5556
diff
changeset
|
135 |
self.w('<div class="error">%s</div>' % msg) |
04a8e48f10bc
[idownloadable] refactor IDownloadable primary view to make overriding easier
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5556
diff
changeset
|
136 |
return True |
04a8e48f10bc
[idownloadable] refactor IDownloadable primary view to make overriding easier
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5556
diff
changeset
|
137 |
return False |
0 | 138 |
|
139 |
class IDownloadableLineView(baseviews.OneLineView): |
|
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
140 |
__select__ = adaptable('IDownloadable') |
0 | 141 |
|
142 |
def cell_call(self, row, col, title=None, **kwargs): |
|
2530 | 143 |
"""the oneline view is a link to download the file""" |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
144 |
entity = self.cw_rset.get_entity(row, col) |
2312
af4d8f75c5db
use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2136
diff
changeset
|
145 |
url = xml_escape(entity.absolute_url()) |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
146 |
adapter = entity.cw_adapt_to('IDownloadable') |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
147 |
name = xml_escape(title or adapter.download_file_name()) |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
148 |
durl = xml_escape(adapter.download_url()) |
0 | 149 |
self.w(u'<a href="%s">%s</a> [<a href="%s">%s</a>]' % |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
150 |
(url, name, durl, self._cw._('download'))) |
0 | 151 |
|
152 |
||
1639 | 153 |
class ImageView(EntityView): |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3072
diff
changeset
|
154 |
__regid__ = 'image' |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
155 |
__select__ = has_mimetype('image/') |
1498
2c6eec0b46b9
fix imports, cleanup, repair some ajax calls
sylvain.thenault@logilab.fr
parents:
987
diff
changeset
|
156 |
|
0 | 157 |
title = _('image') |
1498
2c6eec0b46b9
fix imports, cleanup, repair some ajax calls
sylvain.thenault@logilab.fr
parents:
987
diff
changeset
|
158 |
|
0 | 159 |
def call(self): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
160 |
rset = self.cw_rset |
0 | 161 |
for i in xrange(len(rset)): |
162 |
self.w(u'<div class="efile">') |
|
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
163 |
self.wview(self.__regid__, rset, row=i, col=0) |
0 | 164 |
self.w(u'</div>') |
1498
2c6eec0b46b9
fix imports, cleanup, repair some ajax calls
sylvain.thenault@logilab.fr
parents:
987
diff
changeset
|
165 |
|
2524
2d0c04c8cbe4
#344787: add options to idownloadable
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2470
diff
changeset
|
166 |
def cell_call(self, row, col, width=None, height=None, link=False): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
167 |
entity = self.cw_rset.get_entity(row, col) |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
168 |
adapter = entity.cw_adapt_to('IDownloadable') |
0 | 169 |
#if entity.data_format.startswith('image/'): |
3065
694c03f7d72f
<a> doesn't have alt attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2530
diff
changeset
|
170 |
imgtag = u'<img src="%s" alt="%s" ' % ( |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
171 |
xml_escape(adapter.download_url()), |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5467
diff
changeset
|
172 |
(self._cw._('download %s') % xml_escape(adapter.download_file_name()))) |
2524
2d0c04c8cbe4
#344787: add options to idownloadable
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2470
diff
changeset
|
173 |
if width: |
2d0c04c8cbe4
#344787: add options to idownloadable
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2470
diff
changeset
|
174 |
imgtag += u'width="%i" ' % width |
2d0c04c8cbe4
#344787: add options to idownloadable
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2470
diff
changeset
|
175 |
if height: |
2d0c04c8cbe4
#344787: add options to idownloadable
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2470
diff
changeset
|
176 |
imgtag += u'height="%i" ' % height |
2d0c04c8cbe4
#344787: add options to idownloadable
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2470
diff
changeset
|
177 |
imgtag += u'/>' |
2d0c04c8cbe4
#344787: add options to idownloadable
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2470
diff
changeset
|
178 |
if link: |
3065
694c03f7d72f
<a> doesn't have alt attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2530
diff
changeset
|
179 |
self.w(u'<a href="%s">%s</a>' % (entity.absolute_url(vid='download'), |
694c03f7d72f
<a> doesn't have alt attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2530
diff
changeset
|
180 |
imgtag)) |
2524
2d0c04c8cbe4
#344787: add options to idownloadable
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2470
diff
changeset
|
181 |
else: |
2d0c04c8cbe4
#344787: add options to idownloadable
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2470
diff
changeset
|
182 |
self.w(imgtag) |
0 | 183 |
|
2524
2d0c04c8cbe4
#344787: add options to idownloadable
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2470
diff
changeset
|
184 |