44 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			44 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								var nodes = require('../nodes')
							 | 
						||
| 
								 | 
							
								  , Parser = require('../selector-parser');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Return a list with raw selectors parts
							 | 
						||
| 
								 | 
							
								 * of the current group.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * For example:
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *    .a, .b
							 | 
						||
| 
								 | 
							
								 *      .c
							 | 
						||
| 
								 | 
							
								 *        .d
							 | 
						||
| 
								 | 
							
								 *          test: selectors() // => '.a,.b', '& .c', '& .d'
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @return {Expression}
							 | 
						||
| 
								 | 
							
								 * @api public
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = function selectors(){
							 | 
						||
| 
								 | 
							
								  var stack = this.selectorStack
							 | 
						||
| 
								 | 
							
								    , expr = new nodes.Expression(true);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (stack.length) {
							 | 
						||
| 
								 | 
							
								    for (var i = 0; i < stack.length; i++) {
							 | 
						||
| 
								 | 
							
								      var group = stack[i]
							 | 
						||
| 
								 | 
							
								        , nested;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      if (group.length > 1) {
							 | 
						||
| 
								 | 
							
								        expr.push(new nodes.String(group.map(function(selector) {
							 | 
						||
| 
								 | 
							
								          nested = new Parser(selector.val).parse().nested;
							 | 
						||
| 
								 | 
							
								          return (nested && i ? '& ' : '') + selector.val;
							 | 
						||
| 
								 | 
							
								        }).join(',')))
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        var selector = group[0].val
							 | 
						||
| 
								 | 
							
								        nested = new Parser(selector).parse().nested;
							 | 
						||
| 
								 | 
							
								        expr.push(new nodes.String((nested && i ? '& ' : '') + selector));
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  } else {
							 | 
						||
| 
								 | 
							
								    expr.push(new nodes.String('&'));
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  return expr;
							 | 
						||
| 
								 | 
							
								};
							 |