template: boolean attribute can now be specified when importing a script, and default to "defer"
This commit is contained in:
parent
f2b942371a
commit
f2b0051004
1 changed files with 11 additions and 5 deletions
|
|
@ -155,17 +155,20 @@ class ScriptsHandler(object):
|
||||||
self.scripts = [] # we don't use a set because order may be important
|
self.scripts = [] # we don't use a set because order may be important
|
||||||
dummy, self.theme, self.is_default_theme = renderer.getThemeData(template_path)
|
dummy, self.theme, self.is_default_theme = renderer.getThemeData(template_path)
|
||||||
|
|
||||||
def include(self, library_name):
|
def include(self, library_name, attribute='defer'):
|
||||||
"""Mark that a script need to be imported.
|
"""Mark that a script need to be imported.
|
||||||
|
|
||||||
Must be used before base.html is extended, as <script> are generated there.
|
Must be used before base.html is extended, as <script> are generated there.
|
||||||
If called several time with the same library, it will be imported once.
|
If called several time with the same library, it will be imported once.
|
||||||
@param library_name(unicode): name of the library to import
|
@param library_name(unicode): name of the library to import
|
||||||
|
@param loading:
|
||||||
"""
|
"""
|
||||||
|
if attribute not in ('defer', 'async', ''):
|
||||||
|
raise exceptions.DataError(_(u'Invalid attribute, please use one of "defer", "async" or ""'))
|
||||||
if library_name.endswith('.js'):
|
if library_name.endswith('.js'):
|
||||||
library_name = library_name[:-3]
|
library_name = library_name[:-3]
|
||||||
if library_name not in self.scripts:
|
if library_name not in self.scripts:
|
||||||
self.scripts.append(library_name)
|
self.scripts.append((library_name, attribute))
|
||||||
return u''
|
return u''
|
||||||
|
|
||||||
def generate_scripts(self):
|
def generate_scripts(self):
|
||||||
|
|
@ -174,14 +177,17 @@ class ScriptsHandler(object):
|
||||||
@return (unicode): <scripts> HTML tags
|
@return (unicode): <scripts> HTML tags
|
||||||
"""
|
"""
|
||||||
scripts = []
|
scripts = []
|
||||||
tpl = u'<script src={src}></script>'
|
tpl = u'<script src={src} {attribute}></script>'
|
||||||
for library in self.scripts:
|
for library, attribute in self.scripts:
|
||||||
path = self.renderer.getStaticPath(library, self.template_root_dir, self.theme, self.is_default_theme, '.js')
|
path = self.renderer.getStaticPath(library, self.template_root_dir, self.theme, self.is_default_theme, '.js')
|
||||||
if path is None:
|
if path is None:
|
||||||
log.warning(_(u"Can't find {}.js javascript library").format(library))
|
log.warning(_(u"Can't find {}.js javascript library").format(library))
|
||||||
continue
|
continue
|
||||||
path = os.path.join(self.root_path, path)
|
path = os.path.join(self.root_path, path)
|
||||||
scripts.append(tpl.format(src=quoteattr(path)))
|
scripts.append(tpl.format(
|
||||||
|
src = quoteattr(path),
|
||||||
|
attribute = attribute,
|
||||||
|
))
|
||||||
return safe(u'\n'.join(scripts))
|
return safe(u'\n'.join(scripts))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue