8.2.5.3 Declaring resources 2.4.4

See the light - agile, industrial strength, rapid web application development made easy

(Quick Reference) # 8.2.5.3 Declaring resources - Reference Documentation Authors: Graeme Rocher, Peter Ledbrook, Marc Palmer, Jeff Brown, Luke Daley, Burt Beckwith, Lari Hotari Version: 2.4.4 ## 8.2.5.3 Declaring resources A DSL is provided for declaring resources and modules. This can go either in your `Config.groovy` in the case of application-specific resources, or more commonly in a resources artefact in `grails-app/conf`. Note that you do not need to declare all your static resources, especially images. However you must to establish dependencies or other resources-specific attributes. Any resource that is not declared is called "ad-hoc" and will still be processed using defaults for that resource type. Consider this example resource configuration file, `grails-app/conf/MyAppResources.groovy`:

    modules = {
        core {
            dependsOn 'jquery, utils'        resource url: '/js/core.js', disposition: 'head'
            resource url: '/js/ui.js'
            resource url: '/css/main.css',
            resource url: '/css/branding.css'
            resource url: '/css/print.css', attrs: [media: 'print']
        }    utils {
            dependsOn 'jquery'        resource url: '/js/utils.js'
        }    forms {
            dependsOn 'core,utils'        resource url: '/css/forms.css'
            resource url: '/js/forms.js'
        }
    }
This defines three resource modules; 'core', 'utils' and 'forms'. The resources in these modules will be automatically bundled out of the box according to the module name, resulting in fewer files. You can override this with `bundle:'someOtherName'` on each resource, or call `defaultBundle` on the module (see resources plugin documentation). It declares dependencies between them using `dependsOn`, which controls the load order of the resources. When you include an `<r:require module="forms"/>` in your GSP, it will pull in all the resources from 'core' and 'utils' as well as 'jquery', all in the correct order. You'll also notice the `disposition:'head'` on the `core.js` file. This tells Resources that while it can defer all the other JS files to the end of the body, this one must go into the `<head>`. The CSS file for print styling adds custom attributes using the `attrs` map option, and these are passed through to the `r:external` tag when the engine renders the link to the resource, so you can customize the HTML attributes of the generated link. There is no limit to the number of modules or xxxResources.groovy artefacts you can provide, and plugins can supply them to expose modules to applications, which is exactly how the jQuery plugin works. To define modules like this in your application's Config.groovy, you simply assign the DSL closure to the `grails.resources.modules` Config variable. For full details of the resource DSL please see the resources plugin documentation. | Quick Reference (hide)