Permalink
Cannot retrieve contributors at this time
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
141 lines (114 sloc)
3.83 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /******************************* | |
| Set-up | |
| *******************************/ | |
| var | |
| extend = require('extend'), | |
| fs = require('fs'), | |
| path = require('path'), | |
| defaults = require('../defaults') | |
| ; | |
| /******************************* | |
| Exports | |
| *******************************/ | |
| module.exports = { | |
| getPath: function(file, directory) { | |
| var | |
| configPath, | |
| walk = function(directory) { | |
| var | |
| nextDirectory = path.resolve( path.join(directory, path.sep, '..') ), | |
| currentPath = path.normalize( path.join(directory, file) ) | |
| ; | |
| if( fs.existsSync(currentPath) ) { | |
| // found file | |
| configPath = path.normalize(directory); | |
| return; | |
| } | |
| else { | |
| // reached file system root, let's stop | |
| if(nextDirectory == directory) { | |
| return; | |
| } | |
| // otherwise recurse | |
| walk(nextDirectory, file); | |
| } | |
| } | |
| ; | |
| // start walk from outside require-dot-files directory | |
| file = file || defaults.files.config; | |
| directory = directory || path.join(__dirname, path.sep, '..'); | |
| walk(directory); | |
| return configPath || ''; | |
| }, | |
| // adds additional derived values to a config object | |
| addDerivedValues: function(config) { | |
| config = config || extend(false, {}, defaults); | |
| /*-------------- | |
| File Paths | |
| ---------------*/ | |
| var | |
| configPath = this.getPath(), | |
| sourcePaths = {}, | |
| outputPaths = {}, | |
| folder | |
| ; | |
| // resolve paths (config location + base + path) | |
| for(folder in config.paths.source) { | |
| if(config.paths.source.hasOwnProperty(folder)) { | |
| sourcePaths[folder] = path.resolve(path.join(configPath, config.base, config.paths.source[folder])); | |
| } | |
| } | |
| for(folder in config.paths.output) { | |
| if(config.paths.output.hasOwnProperty(folder)) { | |
| outputPaths[folder] = path.resolve(path.join(configPath, config.base, config.paths.output[folder])); | |
| } | |
| } | |
| // set config paths to full paths | |
| config.paths.source = sourcePaths; | |
| config.paths.output = outputPaths; | |
| // resolve "clean" command path | |
| config.paths.clean = path.resolve( path.join(configPath, config.base, config.paths.clean) ); | |
| /*-------------- | |
| CSS URLs | |
| ---------------*/ | |
| // determine asset paths in css by finding relative path between themes and output | |
| // force forward slashes | |
| config.paths.assets = { | |
| source : '../../themes', // source asset path is always the same | |
| uncompressed : './' + path.relative(config.paths.output.uncompressed, config.paths.output.themes).replace(/\\/g, '/'), | |
| compressed : './' + path.relative(config.paths.output.compressed, config.paths.output.themes).replace(/\\/g, '/'), | |
| packaged : './' + path.relative(config.paths.output.packaged, config.paths.output.themes).replace(/\\/g, '/') | |
| }; | |
| /*-------------- | |
| Permission | |
| ---------------*/ | |
| if(config.permission) { | |
| config.hasPermissions = true; | |
| } | |
| else { | |
| // pass blank object to avoid causing errors | |
| config.permission = {}; | |
| config.hasPermissions = false; | |
| } | |
| /*-------------- | |
| Globs | |
| ---------------*/ | |
| if(!config.globs) { | |
| config.globs = {}; | |
| } | |
| // remove duplicates from component array | |
| if(config.components instanceof Array) { | |
| config.components = config.components.filter(function(component, index) { | |
| return config.components.indexOf(component) == index; | |
| }); | |
| } | |
| // takes component object and creates file glob matching selected components | |
| config.globs.components = (typeof config.components == 'object') | |
| ? (config.components.length > 1) | |
| ? '{' + config.components.join(',') + '}' | |
| : config.components[0] | |
| : '{' + defaults.components.join(',') + '}' | |
| ; | |
| return config; | |
| } | |
| }; |