[IMP] pretty urls for /website/image
This commit is contained in:
parent
6b38b26f65
commit
5e6e1303e3
|
@ -398,7 +398,8 @@ class Website(openerp.addons.web.controllers.main.Home):
|
|||
|
||||
@http.route([
|
||||
'/website/image',
|
||||
'/website/image/<model>/<id>/<field>'
|
||||
'/website/image/<model>/<id>/<field>',
|
||||
'/website/image/<model>/<id>/<field>/<int:max_width>x<int:max_height>'
|
||||
], auth="public", website=True)
|
||||
def website_image(self, model, id, field, max_width=None, max_height=None):
|
||||
""" Fetches the requested field and ensures it does not go above
|
||||
|
|
|
@ -288,19 +288,19 @@ class Image(orm.AbstractModel):
|
|||
if options is None: options = {}
|
||||
classes = ['img', 'img-responsive'] + options.get('class', '').split()
|
||||
|
||||
url_params = {
|
||||
url_frags = {
|
||||
'classes': ' '.join(itertools.imap(escape, classes)),
|
||||
'model': record._model._name,
|
||||
'field': field_name,
|
||||
'id': record.id,
|
||||
'field': field_name,
|
||||
'max_size': '',
|
||||
}
|
||||
for options_key in ['max_width', 'max_height']:
|
||||
if options.get(options_key):
|
||||
url_params[options_key] = options[options_key]
|
||||
max_width, max_height = options.get('max_width', 0), options.get('max_height', 0)
|
||||
if max_width or max_height:
|
||||
url_frags['max_size'] = '/%sx%s' % (max_width, max_height)
|
||||
|
||||
return ir_qweb.HTMLSafe('<img class="%s" src="/website/image?%s"/>' % (
|
||||
' '.join(itertools.imap(escape, classes)),
|
||||
werkzeug.urls.url_encode(url_params)
|
||||
))
|
||||
img = '<img class="%(classes)s" src="/website/image/%(model)s/%(id)s/%(field)s%(max_size)s"/>'
|
||||
return ir_qweb.HTMLSafe(img % url_frags)
|
||||
|
||||
local_url_re = re.compile(r'^/(?P<module>[^]]+)/static/(?P<rest>.+)$')
|
||||
def from_html(self, cr, uid, model, column, element, context=None):
|
||||
|
|
|
@ -123,7 +123,7 @@
|
|||
<div t-foreach="blog_posts" t-as="blog_post" class="mb32">
|
||||
|
||||
<img class="img-circle pull-right mt16"
|
||||
t-att-src="'/website/image?model=res.partner&field=image_small&id='+str(blog_post.author_id.id)"
|
||||
t-attf-src="/website/image/res.partner/{{ blog_post.author_id.id }}/image_small"
|
||||
style="width: 50px;"/>
|
||||
|
||||
<a t-attf-href="/blog/#{ slug(blog_post.blog_id) }/post/#{ slug(blog_post) }">
|
||||
|
@ -205,7 +205,7 @@
|
|||
<h2 t-field="blog_post.subtitle"/>
|
||||
<p class="post-meta text-muted text-center" name="blog_post_data"/>
|
||||
<div>
|
||||
<img class="img-circle" t-att-src="'/website/image?model=res.partner&field=image_small&id='+str(blog_post.author_id.id)" style="width: 30px; margin-right: 10px;"/>
|
||||
<img class="img-circle" t-attf-src="/website/image/res.partner/{{ blog_post.author_id.id }}/image_small" style="width: 30px; margin-right: 10px;"/>
|
||||
<span t-field="blog_post.author_id" style="display: inline-block;" t-field-options='{
|
||||
"widget": "contact",
|
||||
"fields": ["name"]
|
||||
|
@ -224,7 +224,7 @@
|
|||
<ul class="media-list" id="comments-list">
|
||||
<li t-foreach="comments" t-as="message" class="media">
|
||||
<span class="pull-left">
|
||||
<img class="media-object img img-circle" t-att-src="'/website/image?model=mail.message&field=author_avatar&id='+str(message.id)" style="width: 30px"/>
|
||||
<img class="media-object img img-circle" t-attf-src="/website/image/mail.message/{{ message.id }}/author_avatar" style="width: 30px"/>
|
||||
</span>
|
||||
<div class="media-body">
|
||||
<t t-call="website.publish_short">
|
||||
|
@ -249,7 +249,7 @@
|
|||
<h1 t-field="next_post.name"/>
|
||||
<h2 t-field="next_post.subtitle"/>
|
||||
<div>
|
||||
<img class="img-circle" t-att-src="'/website/image?model=res.partner&field=image_small&id='+str(next_post.author_id.id)" style="width: 30px; margin-right: 10px;"/>
|
||||
<img class="img-circle" t-attf-src="'/website/image/res.partner/{{ next_post.author_id.id }}/image_small" style="width: 30px; margin-right: 10px;"/>
|
||||
<span t-field="next_post.author_id" style="display: inline-block;" t-field-options='{
|
||||
"widget": "contact",
|
||||
"fields": ["name"]
|
||||
|
@ -292,7 +292,7 @@
|
|||
<form id="comment" t-attf-action="/blogpost/comment" method="POST">
|
||||
<div class="media">
|
||||
<span class="pull-left">
|
||||
<img class="img img-circle media-object" t-att-src="'/website/image?model=res.partner&field=image_small&id='+str(user_id.partner_id.id)" style="width: 30px"/>
|
||||
<img class="img img-circle media-object" t-attf-src="/website/image/res.partner/{{ user_id.partner_id.id }}/image_small" style="width: 30px"/>
|
||||
</span>
|
||||
<div class="media-body">
|
||||
<input name="blog_post_id" t-att-value="blog_post.id" type="hidden"/>
|
||||
|
|
|
@ -404,7 +404,7 @@
|
|||
<div class="country_events_list">
|
||||
<div>
|
||||
<t t-if="country">
|
||||
<img class="img-rounded img-responsive" t-att-src="'/website/image?model=res.country&field=image&id='+str(country.id)"></img>
|
||||
<img class="img-rounded img-responsive" t-attf-src="/website/image/res.country/{{ country.id }}/image"></img>
|
||||
<h4><b>Events: <span t-esc="country.name"></span></b></h4>
|
||||
</t>
|
||||
<t t-if="not country">
|
||||
|
|
|
@ -14,4 +14,4 @@ class hr(osv.osv):
|
|||
}
|
||||
|
||||
def img(self, cr, uid, ids, field='image_small', context=None):
|
||||
return "/website/image?model=%s&field=%s&id=%s" % (self._name, field, ids[0])
|
||||
return "/website/image/%s/%s/%s" % (self._name, ids[0], field)
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
</div>
|
||||
<div class="row mt8" t-foreach="groups" t-as="group">
|
||||
<div class="col-md-3">
|
||||
<img t-att-src="'/website/image?model=mail.group&field=image_small&id='+str(group['id'])" class="pull-left"/>
|
||||
<img t-attf-src="/website/image/mail.group/{{ group['id'] }}/image_small" class="pull-left"/>
|
||||
<strong><a t-attf-href="/groups/#{ slug(group) }" t-esc="group.name"/></strong><br />
|
||||
<t t-if="group.alias_id and group.alias_id.alias_name and group.alias_id.alias_domain">
|
||||
<i class='fa fa-envelope-o'/>
|
||||
|
@ -182,7 +182,7 @@
|
|||
</div>
|
||||
<div class="media">
|
||||
<img class="img-rounded pull-left mt0 media-object o_mg_avatar"
|
||||
t-att-src="'/website/image?model=mail.message&field=author_avatar&id='+str(message.id)"/>
|
||||
t-attf-src="/website/image/mail.message/{{ message.id }}/author_avatar"/>
|
||||
<div class="media-body">
|
||||
<h4 class="media-heading" t-esc="message.description"/>
|
||||
<small>
|
||||
|
@ -252,7 +252,7 @@
|
|||
<ul class="media-list">
|
||||
<li t-foreach="messages" t-as="thread" class="media">
|
||||
<img class="img-rounded pull-left mt0 media-object o_mg_avatar"
|
||||
t-att-src="'/website/image?model=mail.message&field=author_avatar&id='+str(thread.id)"/>
|
||||
t-attf-src="/website/image/mail.message/{{ thread.id }}/author_avatar"/>
|
||||
<div class="media-body">
|
||||
<h4 class="media-heading">
|
||||
<a t-attf-href="/groups/#{slug(group)}/#{slug(thread)}?mode=#{mode}&date_begin=#{date_begin}&date_end=#{date_end}" t-esc="thread.description"/>
|
||||
|
|
|
@ -116,7 +116,7 @@
|
|||
<t t-foreach="quotation.message_ids" t-as="message">
|
||||
<li class="media" t-if="message.type <> 'comment' or message.subtype_id">
|
||||
<div class="media-body">
|
||||
<img class="media-object pull-left" t-att-src="'/website/image?model=res.partner&field=image_small&id='+str(message.author_id.id)" style="width: 50px; margin-right: 10px;"/>
|
||||
<img class="media-object pull-left" t-attf-src="/website/image/res.partner/{{ message.author_id.id }}/image_small" style="width: 50px; margin-right: 10px;"/>
|
||||
<div class="media-body">
|
||||
<h5 class="media-heading">
|
||||
<span t-field="message.author_id"/> <small>on <span t-field="message.date"/></small>
|
||||
|
@ -134,7 +134,7 @@
|
|||
<xpath expr="//h1" position="after">
|
||||
<section class="mb32 css_editable_mode_hidden hidden-print">
|
||||
<form id="comment" t-attf-action="/quote/#{quotation.id}/#{quotation.access_token}/post" method="POST">
|
||||
<img class="img pull-left img-rounded" t-att-src="'/website/image?model=res.partner&field=image_small&id='+str(user_id.partner_id.id)" style="width: 50px; margin-right: 10px;"/>
|
||||
<img class="img pull-left img-rounded" t-attf-src="/website/image/res.partner/{{ user_id.partner_id.id }}/image_small" style="width: 50px; margin-right: 10px;"/>
|
||||
<div class="pull-left mb32" style="width: 75%%">
|
||||
<textarea rows="4" name="comment" class="form-control" placeholder="Send us a note..."></textarea>
|
||||
<button type="submit" class="btn btn-primary mt8">Send</button>
|
||||
|
|
|
@ -179,7 +179,7 @@ class product_template(osv.Model):
|
|||
return self.set_sequence_bottom(cr, uid, ids, context=context)
|
||||
|
||||
def img(self, cr, uid, ids, field='image_small', context=None):
|
||||
return "/website/image?model=%s&field=%s&id=%s" % (self._name, field, ids[0])
|
||||
return "/website/image/%s/%s/%s" % (self._name, ids[0], field)
|
||||
|
||||
class product_product(osv.Model):
|
||||
_inherit = "product.product"
|
||||
|
@ -196,7 +196,7 @@ class product_product(osv.Model):
|
|||
|
||||
def img(self, cr, uid, ids, field='image_small', context=None):
|
||||
temp_id = self.browse(cr, uid, ids[0], context=context).product_tmpl_id.id
|
||||
return "/website/image?model=product.template&field=%s&id=%s" % (field, temp_id)
|
||||
return "/website/image/product.template/%s/%s" % (temp_id, field)
|
||||
|
||||
class product_attribute(osv.Model):
|
||||
_inherit = "product.attribute"
|
||||
|
|
|
@ -121,7 +121,7 @@ $('.oe_website_sale').each(function () {
|
|||
|
||||
if (product_id) {
|
||||
var $img = $(this).closest('tr.js_product, .oe_website_sale').find('span[data-oe-model^="product."][data-oe-type="image"] img');
|
||||
$img.attr("src", "/website/image?field=image&model=product.product&id="+product_id);
|
||||
$img.attr("src", "/website/image/product.product/" + product_id + "/image");
|
||||
$img.parent().attr('data-oe-model', 'product.product').attr('data-oe-id', product_id)
|
||||
.data('oe-model', 'product.product').data('oe-id', product_id);
|
||||
}
|
||||
|
|
|
@ -73,7 +73,7 @@
|
|||
</div>
|
||||
<div class="oe_product_image">
|
||||
<a itemprop="url" t-att-href="keep('/shop/product/%s' % slug(product), page=(pager['page']['num'] if pager['page']['num']>1 else None))">
|
||||
<img itemprop="image" class="img img-responsive" t-attf-src="/website/image/product.template/#{product.id}/image#{'' if product_image_big else '?max_width=300&max_height=300'}"/>
|
||||
<img itemprop="image" class="img img-responsive" t-attf-src="/website/image/product.template/#{product.id}/image{{'' if product_image_big else '/300x300' }}"/>
|
||||
</a>
|
||||
</div>
|
||||
<section>
|
||||
|
@ -604,7 +604,7 @@
|
|||
<ul class="media-list" id="comments-list" t-if="product.website_message_ids">
|
||||
<li t-foreach="product.website_message_ids" t-as="message" class="media">
|
||||
<div class="media-body oe_msg">
|
||||
<img class="media-object pull-left oe_msg_avatar" t-att-src="'/website/image?model=res.partner&field=image_small&id='+str(message.author_id.id)" style="width: 50px; margin-right: 10px;"/>
|
||||
<img class="media-object pull-left oe_msg_avatar" t-attf-src="/website/image/res.partner/{{ message.author_id.id }}/image_small" style="width: 50px; margin-right: 10px;"/>
|
||||
<div class="media-body oe_msg_content">
|
||||
<t t-call="website.publish_short">
|
||||
<t t-set="object" t-value="message"/>
|
||||
|
@ -634,7 +634,7 @@
|
|||
</ul>
|
||||
<div class="css_editable_mode_hidden">
|
||||
<form id="comment" t-attf-action="/shop/product/comment/#{product.id}" method="POST">
|
||||
<img class="img pull-left img-rounded" t-att-src="'/website/image?model=res.partner&field=image_small&id='+str(user_id.partner_id.id)" style="width: 50px; margin-right: 10px;"/>
|
||||
<img class="img pull-left img-rounded" t-attf-src="/website/image/res.partner/{{ user_id.partner_id.id }}/image_small" style="width: 50px; margin-right: 10px;"/>
|
||||
<div class="pull-left mb32" style="width: 75%%">
|
||||
<textarea rows="3" name="comment" class="form-control" placeholder="Write a comment..."></textarea>
|
||||
<a class="btn btn-primary mt8 a-submit">Post</a>
|
||||
|
|
Loading…
Reference in New Issue