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.
|
|
/** * Module dependencies. */
var Base = require('./compiler'); var inherits = require('inherits');
/** * Expose compiler. */
module.exports = Compiler;
/** * Initialize a new `Compiler`. */
function Compiler(options) { Base.call(this, options); }
/** * Inherit from `Base.prototype`. */
inherits(Compiler, Base);
/** * Compile `node`. */
Compiler.prototype.compile = function(node){ return node.stylesheet .rules.map(this.visit, this) .join(''); };
/** * Visit comment node. */
Compiler.prototype.comment = function(node){ return this.emit('', node.position); };
/** * Visit import node. */
Compiler.prototype.import = function(node){ return this.emit('@import ' + node.import + ';', node.position); };
/** * Visit media node. */
Compiler.prototype.media = function(node){ return this.emit('@media ' + node.media, node.position) + this.emit('{') + this.mapVisit(node.rules) + this.emit('}'); };
/** * Visit document node. */
Compiler.prototype.document = function(node){ var doc = '@' + (node.vendor || '') + 'document ' + node.document;
return this.emit(doc, node.position) + this.emit('{') + this.mapVisit(node.rules) + this.emit('}'); };
/** * Visit charset node. */
Compiler.prototype.charset = function(node){ return this.emit('@charset ' + node.charset + ';', node.position); };
/** * Visit namespace node. */
Compiler.prototype.namespace = function(node){ return this.emit('@namespace ' + node.namespace + ';', node.position); };
/** * Visit supports node. */
Compiler.prototype.supports = function(node){ return this.emit('@supports ' + node.supports, node.position) + this.emit('{') + this.mapVisit(node.rules) + this.emit('}'); };
/** * Visit keyframes node. */
Compiler.prototype.keyframes = function(node){ return this.emit('@' + (node.vendor || '') + 'keyframes ' + node.name, node.position) + this.emit('{') + this.mapVisit(node.keyframes) + this.emit('}'); };
/** * Visit keyframe node. */
Compiler.prototype.keyframe = function(node){ var decls = node.declarations;
return this.emit(node.values.join(','), node.position) + this.emit('{') + this.mapVisit(decls) + this.emit('}'); };
/** * Visit page node. */
Compiler.prototype.page = function(node){ var sel = node.selectors.length ? node.selectors.join(', ') : '';
return this.emit('@page ' + sel, node.position) + this.emit('{') + this.mapVisit(node.declarations) + this.emit('}'); };
/** * Visit font-face node. */
Compiler.prototype['font-face'] = function(node){ return this.emit('@font-face', node.position) + this.emit('{') + this.mapVisit(node.declarations) + this.emit('}'); };
/** * Visit host node. */
Compiler.prototype.host = function(node){ return this.emit('@host', node.position) + this.emit('{') + this.mapVisit(node.rules) + this.emit('}'); };
/** * Visit custom-media node. */
Compiler.prototype['custom-media'] = function(node){ return this.emit('@custom-media ' + node.name + ' ' + node.media + ';', node.position); };
/** * Visit rule node. */
Compiler.prototype.rule = function(node){ var decls = node.declarations; if (!decls.length) return '';
return this.emit(node.selectors.join(','), node.position) + this.emit('{') + this.mapVisit(decls) + this.emit('}'); };
/** * Visit declaration node. */
Compiler.prototype.declaration = function(node){ return this.emit(node.property + ':' + node.value, node.position) + this.emit(';'); };
|