Source

grails-page-resources / grails-app / conf / ZZZPageResources.groovy

/*
 * Copyright 2012 David M. Carr
 *
 * 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 org.codehaus.groovy.grails.commons.ApplicationHolder
import org.slf4j.LoggerFactory

def log = LoggerFactory.getLogger('org.grails.plugin.resource.page.PageResources')
def application = ApplicationHolder.application

modules = {
    // This file should be named such that it comes alphabetically after any *Resources files that contain explicit
    // page module definitions.  Otherwise, it will overrride the other definition.

    def rootDir = application.parentContext.getResource("/").getFile()
    def pagesDir = new File(rootDir, 'pages')
    int prefixLen = rootDir.path.length()
    def dependModuleName = 'defaultPageDependencies'
    def dependModule = delegate._modules.find { it.name == dependModuleName }
    if (pagesDir.isDirectory()) {
        pagesDir.eachDirRecurse { File moduleDir ->
            String moduleName = moduleDir.path.substring(prefixLen + 1).replaceAll(/[\/\\]/, '_')
            def module = delegate._modules.find { it.name == moduleName }
            if (module) {
                if (log.isDebugEnabled()) {
                    log.debug("Page module ${moduleName} already defined; using pre-existing definition")
                }
            } else {
                File[] files = moduleDir.listFiles(
                    [accept: { File f -> f.isFile() && f.name ==~ /.*\.(js|less|css)/}] as FileFilter
                ).sort()
                if (files.length > 0) {
                    if (log.isInfoEnabled()) {
                        log.info("Defining page module: ${moduleName}")
                    }
                    delegate.invokeMethod(moduleName, {
                        if (dependModule) {
                            dependsOn(dependModuleName)
                        }
                        defaultBundle(false)
                        files.each { file ->
                            def url = file.path.substring(prefixLen)
                            resource(url: url)
                        }
                    })
                }
            }
        }
    }
}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.