selectors.js 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. var nodes = require('../nodes')
  2. , Parser = require('../selector-parser');
  3. /**
  4. * Return a list with raw selectors parts
  5. * of the current group.
  6. *
  7. * For example:
  8. *
  9. * .a, .b
  10. * .c
  11. * .d
  12. * test: selectors() // => '.a,.b', '& .c', '& .d'
  13. *
  14. * @return {Expression}
  15. * @api public
  16. */
  17. module.exports = function selectors(){
  18. var stack = this.selectorStack
  19. , expr = new nodes.Expression(true);
  20. if (stack.length) {
  21. for (var i = 0; i < stack.length; i++) {
  22. var group = stack[i]
  23. , nested;
  24. if (group.length > 1) {
  25. expr.push(new nodes.String(group.map(function(selector) {
  26. nested = new Parser(selector.val).parse().nested;
  27. return (nested && i ? '& ' : '') + selector.val;
  28. }).join(',')))
  29. } else {
  30. var selector = group[0].val
  31. nested = new Parser(selector).parse().nested;
  32. expr.push(new nodes.String((nested && i ? '& ' : '') + selector));
  33. }
  34. }
  35. } else {
  36. expr.push(new nodes.String('&'));
  37. }
  38. return expr;
  39. };