Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

147 lines (125 sloc) 6.339 kb
/*
* Copyright 2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import grails.util.Environment
import grails.plugin.webxml.FilterManager
import org.codehaus.groovy.grails.plugins.GrailsPluginUtils
import asset.pipeline.grails.LinkGenerator
import asset.pipeline.grails.CachingLinkGenerator
import asset.pipeline.grails.AssetResourceLocator
import asset.pipeline.grails.fs.*
import asset.pipeline.fs.*
import asset.pipeline.*
class AssetPipelineGrailsPlugin {
def version = "2.1.3"
def grailsVersion = "2.2 > *"
def title = "Asset Pipeline Plugin"
def author = "David Estes"
def authorEmail = "destes@bcap.com"
def description = 'The Asset-Pipeline is a plugin used for managing and processing static assets in Grails applications. Asset-Pipeline functions include processing and minification of both CSS and JavaScript files. It is also capable of being extended to compile custom static assets, such as CoffeeScript.'
def documentation = "http://bertramdev.github.io/asset-pipeline"
def license = "APACHE"
def organization = [ name: "Bertram Capital", url: "http://www.bertramcapital.com/" ]
def issueManagement = [ system: "GITHUB", url: "http://github.com/bertramdev/asset-pipeline/issues" ]
def scm = [ url: "http://github.com/bertramdev/asset-pipeline" ]
def pluginExcludes = [
"grails-app/assets/**",
"test/dummy/**"
]
def developers = [ [name: 'Brian Wheeler'] ]
def loadAfter = ['url-mappings']
def doWithApplicationContext = { ctx ->
//Register Plugin Paths
AssetPipelineConfigHolder.registerResolver(new FileSystemAssetResolver('application','grails-app/assets'))
def pluginManager = ctx.pluginManager
if(!application.warDeployed) {
// for(plugin in pluginManager.getAllPlugins()) {
// if(plugin instanceof org.codehaus.groovy.grails.plugins.BinaryGrailsPlugin) {
// def descriptorURI = plugin.binaryDescriptor.resource.URI
// descriptorURI = new java.net.URI( new java.net.URI(descriptorURI.getSchemeSpecificPart()).getSchemeSpecificPart()).toString().split("!")[0]
// AssetPipelineConfigHolder.registerResolver(new JarAssetResolver(plugin.name,descriptorURI,'META-INF/assets'))
// AssetPipelineConfigHolder.registerResolver(new JarAssetResolver(plugin.name,descriptorURI,'META-INF/static'))
// }
// }
AssetPipelineConfigHolder.registerResolver(new SpringResourceAssetResolver('classpath',ctx, 'META-INF/assets'))
AssetPipelineConfigHolder.registerResolver(new SpringResourceAssetResolver('classpath',ctx, 'META-INF/static'))
AssetPipelineConfigHolder.registerResolver(new SpringResourceAssetResolver('classpath',ctx, 'META-INF/resources'))
for(plugin in GrailsPluginUtils.pluginInfos) {
def assetPath = [plugin.pluginDir.getPath(), "grails-app", "assets"].join(File.separator)
def fallbackPath = [plugin.pluginDir.getPath(), "web-app"].join(File.separator)
AssetPipelineConfigHolder.registerResolver(new FileSystemAssetResolver(plugin.name,assetPath))
AssetPipelineConfigHolder.registerResolver(new FileSystemAssetResolver(plugin.name,fallbackPath,true))
}
}
}
def doWithSpring = {
def manifestProps = new Properties()
def manifestFile
try {
manifestFile = application.getParentContext().getResource("assets/manifest.properties")
} catch(e) {
if(application.warDeployed) {
log.warn "Unable to find asset-pipeline manifest, etags will not be properly generated"
}
}
if(manifestFile?.exists()) {
try {
manifestProps.load(manifestFile.inputStream)
application.config.grails.assets.manifest = manifestProps
AssetPipelineConfigHolder.manifest = manifestProps
} catch(e) {
log.warn "Failed to load Manifest"
}
}
if(!application.config.grails.assets.containsKey("precompiled")) {
application.config.grails.assets.precompiled = application.warDeployed
}
AssetPipelineConfigHolder.config = application.config.grails.assets
// Register Link Generator
String serverURL = application.config?.grails?.serverURL ?: null
def cacheUrls = application.config?.grails.web?.linkGenerator?.useCache
if(!(cacheUrls instanceof Boolean)) {
cacheUrls = true
}
grailsLinkGenerator(cacheUrls ? CachingLinkGenerator : LinkGenerator, serverURL) { bean ->
bean.autowire = true
}
assetResourceLocator(AssetResourceLocator) { bean ->
bean.parent = "abstractGrailsResourceLocator"
}
}
def getWebXmlFilterOrder() {
["AssetPipelineFilter": FilterManager.GRAILS_WEB_REQUEST_POSITION - 120]
}
def doWithWebDescriptor = { xml ->
def mapping = application.config?.grails?.assets?.mapping ?: "assets"
def filterClassName = 'asset.pipeline.grails.AssetPipelineFilter'
def filters = xml.filter[0]
filters + {
'filter' {
'filter-name'('AssetPipelineFilter')
'filter-class'(filterClassName)
}
}
def mappings = xml.'filter-mapping'[0]
mappings + {
'filter-mapping' {
'filter-name'('AssetPipelineFilter')
'url-pattern'("/${mapping}/*")
dispatcher('REQUEST')
}
}
}
}
Jump to Line
Something went wrong with that request. Please try again.