diff --git a/addons/http_routing/models/ir_http.py b/addons/http_routing/models/ir_http.py index 1196d12d44f934f3ccaddb215a84cd7a1692e01e..c95d86509fdd97066021983fef7dad3fbf4ec68e 100644 --- a/addons/http_routing/models/ir_http.py +++ b/addons/http_routing/models/ir_http.py @@ -29,6 +29,18 @@ odoo._geoip_resolver = None # Slug API # ------------------------------------------------------------ +def _guess_mimetype(ext=False, default='text/html'): + exts = { + '.css': 'text/css', + '.less': 'text/less', + '.js': 'text/javascript', + '.xml': 'text/xml', + '.csv': 'text/csv', + '.html': 'text/html', + } + return ext is not False and exts.get(ext, default) or exts + + def slugify_one(s, max_length=None): """ Transform a string to a slug that can be used in a url path. This method will first try to do the job with python-slugify if present. diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index c538fde2f855dedc3993a707ee48ee8202f5de2c..c8c80c433c1d4b1bc2e2fc27d6acbe526d765c96 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -17,8 +17,7 @@ import odoo from odoo import http, models, fields, _ from odoo.http import request from odoo.tools import pycompat, OrderedSet -from odoo.addons.http_routing.models.ir_http import slug -from odoo.addons.website.models.ir_http import _guess_mimetype +from odoo.addons.http_routing.models.ir_http import slug, _guess_mimetype from odoo.addons.web.controllers.main import WebClient, Binary, Home from odoo.addons.portal.controllers.portal import pager as portal_pager @@ -249,9 +248,13 @@ class Website(Home): def pagenew(self, path="", noredirect=False, add_menu=False, template=False): # for supported mimetype, get correct default template _, ext = os.path.splitext(path) - mimetype_template = _guess_mimetype(ext)[1] - if not template: - template = mimetype_template + View = request.env['ir.ui.view'] + ext_special_case = ext and ext in _guess_mimetype() and ext != '.html' + + if not template and ext_special_case: + default_templ = 'website.default_%s' % ext.lstrip('.') + if request.env.ref(default_templ, False): + template = default_templ template = template and dict(template=template) or {} page = request.env['website'].new_page(path, add_menu=add_menu, **template) @@ -259,7 +262,7 @@ class Website(Home): if noredirect: return werkzeug.wrappers.Response(url, mimetype='text/plain') - if ext and ext != '.html': # redirect non html pages to backend to edit + if ext_special_case: # redirect non html pages to backend to edit return werkzeug.utils.redirect('/web#id=' + str(page.get('view_id')) + '&view_type=form&model=ir.ui.view') return werkzeug.utils.redirect(url + "?enable_editor=1") diff --git a/addons/website/models/ir_http.py b/addons/website/models/ir_http.py index 8fbdfd18eae030e2697515081d66ab6e6ba66d39..433fc5e297ae7957acbdf87913db531b90187155 100644 --- a/addons/website/models/ir_http.py +++ b/addons/website/models/ir_http.py @@ -19,7 +19,7 @@ from odoo.exceptions import QWebException from odoo.tools.safe_eval import safe_eval from odoo.osv.expression import FALSE_DOMAIN -from odoo.addons.http_routing.models.ir_http import ModelConverter +from odoo.addons.http_routing.models.ir_http import ModelConverter, _guess_mimetype logger = logging.getLogger(__name__) @@ -39,20 +39,6 @@ def sitemap_qs2dom(qs, route, field='name'): return dom -def _guess_mimetype(ext=False, default=False): - exts = { - '.css': ['text/css', 'website.default_css'], - '.less': ['text/less', 'website.default_less'], - '.js': ['text/javascript', 'website.default_javascript'], - '.xml': ['text/xml', 'website.default_xml'], - '.csv': ['text/csv', 'website.default_csv'], - '.html': ['text/html', False], - } - if not default: - default = exts['.html'] - return ext is not False and exts.get(ext, default) or exts - - class Http(models.AbstractModel): _inherit = 'ir.http' @@ -130,7 +116,7 @@ class Http(models.AbstractModel): # 'path': req_page[1:], 'deletable': True, 'main_object': mypage, - }, mimetype=_guess_mimetype(ext)[0]) + }, mimetype=_guess_mimetype(ext)) return False @classmethod diff --git a/addons/website/views/website_templates.xml b/addons/website/views/website_templates.xml index 70581a3524e499889a6eedeecee8ee417765aed9..b1c2227d8d3a654d38b6850f3981b2ef891ea453 100644 --- a/addons/website/views/website_templates.xml +++ b/addons/website/views/website_templates.xml @@ -534,7 +534,7 @@ </t> </template> -<template id="default_javascript"> +<template id="default_js"> <script type="text/javascript"> if (0 > 1) { let it_cant_be = false;