javascript
Purpose
Allows inclusion of javascript libraries and scripts as well a shorthand for inline JavascriptExamples
// actually imports '/app/js/myscript.js'
<g:javascript src="myscript.js" />// imports all the necessary js for the scriptaculous library
<g:javascript library="scriptaculous" /><g:javascript>alert('hello')</g:javascript>
Description
Attributes
contextPath
(optional) - the context path to use (relative to the application context path). Defaults to "" or path to the plugin for a plugin view or template.
-
library
(optional) - The name of the library to include. Either "prototype", "scriptaculous", "yahoo" or "dojo"
-
src
(optional) - The name of the javascript file to import. Will look in /app/js dir
-
base
(optional - Since 0.6) - specifies the full base url to prepend to the library name
plugin
(optional) - The plugin to look for the javascript in
Source
Show Source
def javascript = { attrs, body ->
setUpRequestAttributes();
if(attrs.src) {
javascriptInclude(attrs)
}
else if(attrs.library) { if(LIBRARY_MAPPINGS.containsKey(attrs.library)) { LIBRARY_MAPPINGS[attrs.library].each {
if(!request[INCLUDED_JS].contains(it)) {
request[INCLUDED_JS] << it
def newattrs = [:] + attrs
newattrs.src = it+'.js'
javascriptInclude(newattrs)
}
}
if(!request[INCLUDED_LIBRARIES].contains(attrs.library)) {
request[INCLUDED_LIBRARIES] << attrs.library
}
}
else {
if(!request[INCLUDED_LIBRARIES].contains(attrs.library)) {
def newattrs = [:] + attrs
newattrs.src = newattrs.remove('library')+'.js'
javascriptInclude(newattrs)
request[INCLUDED_LIBRARIES] << attrs.library
request[INCLUDED_JS] << attrs.library
}
}
}
else {
out.println '<script type="text/javascript">'
out.println body()
out.println '</script>'
}
} private javascriptInclude(attrs) {
def requestPluginContext
if(attrs.plugin) {
requestPluginContext = pluginManager.getPluginPath(attrs.remove('plugin')) ?: ''
}
else {
if(attrs.contextPath != null) {
requestPluginContext = attrs.remove('contextPath').toString()
}
else {
requestPluginContext = pageScope.pluginContextPath ?: ''
}
} def writer = out
writer << '<script type="text/javascript" src="'
if (!attrs.base) {
def baseUri = grailsAttributes.getApplicationUri(request)
writer << baseUri << (baseUri.endsWith('/') ? '' : '/')
if (requestPluginContext) {
writer << (requestPluginContext.startsWith("/") ? requestPluginContext.substring(1) : requestPluginContext)
writer << "/"
}
writer << 'js/'
} else {
writer << attrs.base
} writer << attrs.src
writer << '"'
def otherAttrs = [:] + attrs
otherAttrs.remove('base')
otherAttrs.remove('src')
otherAttrs.remove('library')
otherAttrs.each {k, v -> writer << " $k=\"${v.encodeAsHTML()}\"" }
writer.println '></script>'
}