You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							121 lines
						
					
					
						
							2.9 KiB
						
					
					
				
			
		
		
	
	
							121 lines
						
					
					
						
							2.9 KiB
						
					
					
				/*! | 
						|
 * node-sass: lib/render.js | 
						|
 */ | 
						|
 | 
						|
var chalk = require('chalk'), | 
						|
  fs = require('fs'), | 
						|
  mkdirp = require('mkdirp'), | 
						|
  path = require('path'), | 
						|
  sass = require('./'); | 
						|
 | 
						|
/** | 
						|
 * Render | 
						|
 * | 
						|
 * @param {Object} options | 
						|
 * @param {Object} emitter | 
						|
 * @api public | 
						|
 */ | 
						|
 | 
						|
module.exports = function(options, emitter) { | 
						|
  var renderOptions = { | 
						|
    includePaths: options.includePath, | 
						|
    omitSourceMapUrl: options.omitSourceMapUrl, | 
						|
    indentedSyntax: options.indentedSyntax, | 
						|
    outFile: options.dest, | 
						|
    outputStyle: options.outputStyle, | 
						|
    precision: options.precision, | 
						|
    sourceComments: options.sourceComments, | 
						|
    sourceMapEmbed: options.sourceMapEmbed, | 
						|
    sourceMapContents: options.sourceMapContents, | 
						|
    sourceMap: options.sourceMap, | 
						|
    sourceMapRoot: options.sourceMapRoot, | 
						|
    importer: options.importer, | 
						|
    functions: options.functions, | 
						|
    indentWidth: options.indentWidth, | 
						|
    indentType: options.indentType, | 
						|
    linefeed: options.linefeed | 
						|
  }; | 
						|
 | 
						|
  if (options.data) { | 
						|
    renderOptions.data = options.data; | 
						|
  } else if (options.src) { | 
						|
    renderOptions.file = options.src; | 
						|
  } | 
						|
 | 
						|
  var sourceMap = options.sourceMap; | 
						|
  var destination = options.dest; | 
						|
  var stdin = options.stdin; | 
						|
 | 
						|
  var success = function(result) { | 
						|
    var todo = 1; | 
						|
    var done = function() { | 
						|
      if (--todo <= 0) { | 
						|
        emitter.emit('done'); | 
						|
      } | 
						|
    }; | 
						|
 | 
						|
    if (!destination || stdin) { | 
						|
      emitter.emit('log', result.css.toString()); | 
						|
 | 
						|
      if (sourceMap && !options.sourceMapEmbed) { | 
						|
        emitter.emit('log', result.map.toString()); | 
						|
      } | 
						|
 | 
						|
      return done(); | 
						|
    } | 
						|
 | 
						|
    emitter.emit('info', chalk.green('Rendering Complete, saving .css file...')); | 
						|
 | 
						|
    mkdirp(path.dirname(destination), function(err) { | 
						|
      if (err) { | 
						|
        return emitter.emit('error', chalk.red(err)); | 
						|
      } | 
						|
 | 
						|
      fs.writeFile(destination, result.css.toString(), function(err) { | 
						|
        if (err) { | 
						|
          return emitter.emit('error', chalk.red(err)); | 
						|
        } | 
						|
 | 
						|
        emitter.emit('info', chalk.green('Wrote CSS to ' + destination)); | 
						|
        emitter.emit('write', err, destination, result.css.toString()); | 
						|
        done(); | 
						|
      }); | 
						|
    }); | 
						|
 | 
						|
    if (sourceMap) { | 
						|
      todo++; | 
						|
 | 
						|
      mkdirp(path.dirname(sourceMap), function(err) { | 
						|
        if (err) { | 
						|
          return emitter.emit('error', chalk.red(err)); | 
						|
        } | 
						|
        fs.writeFile(sourceMap, result.map, function(err) { | 
						|
          if (err) { | 
						|
            return emitter.emit('error', chalk.red('Error' + err)); | 
						|
          } | 
						|
 | 
						|
          emitter.emit('info', chalk.green('Wrote Source Map to ' + sourceMap)); | 
						|
          emitter.emit('write-source-map', err, sourceMap, result.map); | 
						|
          done(); | 
						|
        }); | 
						|
      }); | 
						|
    } | 
						|
 | 
						|
    emitter.emit('render', result.css.toString()); | 
						|
  }; | 
						|
 | 
						|
  var error = function(error) { | 
						|
    emitter.emit('error', chalk.red(JSON.stringify(error, null, 2))); | 
						|
  }; | 
						|
 | 
						|
  var renderCallback = function(err, result) { | 
						|
    if (err) { | 
						|
      error(err); | 
						|
    } | 
						|
    else { | 
						|
      success(result); | 
						|
    } | 
						|
  }; | 
						|
 | 
						|
  sass.render(renderOptions, renderCallback); | 
						|
};
 | 
						|
 |