mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-11-03 19:07:00 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			200 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			200 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
 | 
						|
/**
 | 
						|
 * 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(';');
 | 
						|
};
 | 
						|
 |