internal CssSelectorCombination(CssCombinator combinator, ICssSelectorChain leftOperand, ICssSelectorSequence rightOperand) : base(CalculateSpecificity(leftOperand, rightOperand)) { ArgChecker.AssertIsTrue <ArgumentException>(leftOperand.Subject.PseudoElement == null, "Pseudo-elements are only allowed in the right operand of a combinator"); _combinator = combinator; _leftOperand = leftOperand; _rightOperand = rightOperand; }
/// <summary> /// Creates a selector consisting of two selector sequences and a <see cref="CssCombinator"/>. /// </summary> /// <param name="leftSelector">The left operand of the combination operator.</param> /// <param name="combinator">The combination operator.</param> /// <param name="rightSelector">The right operand of the combination operator.</param> /// <returns>The newly created combined selector.</returns> public static ICssSelectorChain Combine(this ICssSelectorChain leftSelector, CssCombinator combinator, ICssSelectorSequence rightSelector) { return(new CssSelectorCombination(combinator, leftSelector, rightSelector)); }
private static CssSpecificity CalculateSpecificity(ICssSelectorChain leftOperand, ICssSelectorSequence rightOperand) { ArgChecker.AssertArgNotNull(leftOperand, nameof(leftOperand)); ArgChecker.AssertArgNotNull(rightOperand, nameof(rightOperand)); return(leftOperand.Specificity + rightOperand.Specificity); }