[WIP] AssetsBundle
bzr revid: fme@openerp.com-20140409161648-sx87vc0saj30f68x
This commit is contained in:
parent
055cae2151
commit
8e14e7a870
|
@ -31,6 +31,7 @@ except ImportError:
|
|||
|
||||
import openerp
|
||||
import openerp.modules.registry
|
||||
from openerp.addons.base.ir.ir_qweb import AssetsBundle
|
||||
from openerp.tools.translate import _
|
||||
from openerp import http
|
||||
|
||||
|
@ -364,30 +365,17 @@ def manifest_glob(extension, addons=None, db=None, include_remotes=False):
|
|||
r.append((None, pattern))
|
||||
else:
|
||||
for path in glob.glob(os.path.normpath(os.path.join(addons_path, addon, pattern))):
|
||||
# Hack for IE, who limit 288Ko, 4095 rules, 31 sheets
|
||||
# http://support.microsoft.com/kb/262161/en
|
||||
if pattern == "static/lib/bootstrap/css/bootstrap.css":
|
||||
if include_remotes:
|
||||
r.insert(0, (None, fs2web(path[len(addons_path):])))
|
||||
else:
|
||||
r.append((path, fs2web(path[len(addons_path):])))
|
||||
r.append((path, fs2web(path[len(addons_path):])))
|
||||
return r
|
||||
|
||||
def manifest_list(extension, mods=None, db=None, debug=False):
|
||||
def manifest_list(extension, mods=None, db=None, debug=None):
|
||||
""" list ressources to load specifying either:
|
||||
mods: a comma separated string listing modules
|
||||
db: a database name (return all installed modules in that database)
|
||||
"""
|
||||
if debug is not None:
|
||||
_logger.warning("openerp.addons.web.main.manifest_list(): debug parameter is deprecated")
|
||||
files = manifest_glob(extension, addons=mods, db=db, include_remotes=True)
|
||||
if not debug:
|
||||
path = '/web/webclient/' + extension
|
||||
if mods is not None:
|
||||
path += '?' + werkzeug.url_encode({'mods': mods})
|
||||
elif db:
|
||||
path += '?' + werkzeug.url_encode({'db': db})
|
||||
|
||||
remotes = [wp for fp, wp in files if fp is None]
|
||||
return [path] + remotes
|
||||
return [wp for _fp, wp in files]
|
||||
|
||||
def get_last_modified(files):
|
||||
|
@ -614,26 +602,16 @@ html_template = """<!DOCTYPE html>
|
|||
</html>
|
||||
"""
|
||||
|
||||
def render_bootstrap_template(template, values=None, debug=False, db=None, **kw):
|
||||
if not db:
|
||||
db = request.db
|
||||
if request.debug:
|
||||
debug = True
|
||||
def render_bootstrap_template(template, values=None, **kw):
|
||||
if values is None:
|
||||
values = {}
|
||||
values['debug'] = debug
|
||||
values['current_db'] = db
|
||||
values = dict()
|
||||
try:
|
||||
values['databases'] = http.db_list()
|
||||
except openerp.exceptions.AccessDenied:
|
||||
values['databases'] = None
|
||||
|
||||
for res in ['js', 'css']:
|
||||
if res not in values:
|
||||
values[res] = manifest_list(res, db=db, debug=debug)
|
||||
|
||||
if 'modules' not in values:
|
||||
values['modules'] = module_boot(db=db)
|
||||
values['modules'] = module_boot()
|
||||
values['modules'] = simplejson.dumps(values['modules'])
|
||||
|
||||
return request.render(template, values, **kw)
|
||||
|
@ -679,6 +657,20 @@ class Home(http.Controller):
|
|||
def login(self, db, login, key, redirect="/web", **kw):
|
||||
return login_and_redirect(db, login, key, redirect_url=redirect)
|
||||
|
||||
@http.route('/web/js/<xmlid>', type='http', auth="none")
|
||||
def js_bundle(self, xmlid, **kw):
|
||||
values = dict(manifest_list=manifest_list)
|
||||
html = request.render(xmlid, lazy=False, qcontext=values)
|
||||
bundle = AssetsBundle(xmlid, html)
|
||||
return bundle.js()
|
||||
|
||||
@http.route('/web/css/<xmlid>', type='http', auth='none')
|
||||
def css_bundle(self, xmlid, **kw):
|
||||
values = dict(manifest_list=manifest_list)
|
||||
html = request.render(xmlid, lazy=False, qcontext=values)
|
||||
bundle = AssetsBundle(xmlid, html)
|
||||
return bundle.css()
|
||||
|
||||
class WebClient(http.Controller):
|
||||
|
||||
@http.route('/web/webclient/csslist', type='json', auth="none")
|
||||
|
|
|
@ -1478,7 +1478,7 @@ instance.web.embed = function (origin, dbname, login, key, action, options) {
|
|||
$('head').append($('<link>', {
|
||||
'rel': 'stylesheet',
|
||||
'type': 'text/css',
|
||||
'href': origin +'/web/webclient/css'
|
||||
'href': origin +'/web/css/web.assets_webclient'
|
||||
}));
|
||||
var currentScript = document.currentScript;
|
||||
if (!currentScript) {
|
||||
|
|
|
@ -3,6 +3,19 @@
|
|||
-->
|
||||
<openerp>
|
||||
<data>
|
||||
<template id="web.assets_common">
|
||||
<script type="text/javascript" src="/web/static/lib/es5-shim/es5-shim.min.js"></script>
|
||||
<script type="text/javascript" src="/web/static/src/js/openerpframework.js"></script>
|
||||
</template>
|
||||
|
||||
<template id="web.assets_webclient_manifest">
|
||||
<t t-foreach="manifest_list('css')" t-as="css_file">
|
||||
<link rel="stylesheet" t-att-href="css_file"/>
|
||||
</t>
|
||||
<t t-foreach="manifest_list('js')" t-as="js_file">
|
||||
<script type="text/javascript" t-att-src="js_file"></script>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
<template id="web.layout" name="Web layout"><!DOCTYPE html>
|
||||
<html style="height: 100%">
|
||||
|
@ -23,12 +36,7 @@
|
|||
<template id="web.webclient_bootstrap" name="Webclient Bootstrap">
|
||||
<t t-call="web.layout">
|
||||
<t t-set="head">
|
||||
<t t-foreach="css" t-as="css_file">
|
||||
<link rel="stylesheet" t-att-href="css_file"/>
|
||||
</t>
|
||||
<t t-foreach="js" t-as="js_file">
|
||||
<script type="text/javascript" t-att-src="js_file"></script>
|
||||
</t>
|
||||
<t t-call-assets="web.assets_webclient_manifest"/>
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
var s = new openerp.init(<t t-raw="modules"/>);
|
||||
|
@ -78,10 +86,10 @@
|
|||
</script>
|
||||
<div class="form-group field-db" t-if="databases and len(databases) > 1">
|
||||
<label for="db" class="control-label">Database</label>
|
||||
<select name="db" id="db" class="form-control" required="required" t-att-autofocus="'autofocus' if current_db not in databases else None" onchange="dbchanged(this.value)">
|
||||
<select name="db" id="db" class="form-control" required="required" t-att-autofocus="'autofocus' if request.db not in databases else None" onchange="dbchanged(this.value)">
|
||||
<option></option>
|
||||
<t t-foreach="databases" t-as="db">
|
||||
<option t-att-selected="'selected' if db == current_db else None">
|
||||
<option t-att-selected="'selected' if db == request.db else None">
|
||||
<t t-esc="db"/>
|
||||
</option>
|
||||
</t>
|
||||
|
|
Loading…
Reference in New Issue