Change "lt", "gt" & "eq"-selectors to accept an unsigned integer index

This commit is contained in:
iska
2015-12-22 02:35:00 +01:00
parent 4bb681eb78
commit f57e265cba
3 changed files with 23 additions and 10 deletions
+2 -2
View File
@@ -346,9 +346,9 @@
NSDecimalNumber *number = [[NSDecimalNumber alloc] initWithDecimal:decimal];
if ([pseudoClass isEqualToString:@"lt"]) {
return ltSelector(number.unsignedIntegerValue);
return ltSelector(number.integerValue);
} else if ([pseudoClass isEqualToString:@"gt"]) {
return gtSelector(number.unsignedIntegerValue);
return gtSelector(number.integerValue);
} else if ([pseudoClass isEqualToString:@"eq"]) {
return eqSelector(number.integerValue);
}
+5 -4
View File
@@ -113,22 +113,23 @@ extern CSSSelector * requiredSelector();
/**
Less-than selector, e.g. 'lt(2)'
Selects all elements at an index less than the specified index.
Selects all elements at an index less than the specified index. A negative index counts backwards from the last element.
@param index The zero-based index of the element to match.
@returns A Less-Than selector.
*/
extern CSSSelector * ltSelector(NSUInteger index);
extern CSSSelector * ltSelector(NSInteger index);
/**
Greater-than selector, e.g. 'gt(2)'
Selects all elements at an index greater than the specified index.
Selects all elements at an index greater than the specified index. A negative index counts backwards from the
last element.
@param index The zero-based index of the element to match.
@returns A Greater-Than selector.
*/
extern CSSSelector * gtSelector(NSUInteger index);
extern CSSSelector * gtSelector(NSInteger index);
/**
Equal selector, e.g. 'eq(3)'
+16 -4
View File
@@ -270,19 +270,31 @@ CSSSelector * requiredSelector()
#pragma mark - Positional
CSSSelector * ltSelector(NSUInteger index)
CSSSelector * ltSelector(NSInteger index)
{
NSString *name = [NSString stringWithFormat:@":lt(%lu)", (unsigned long)index];
return namedBlockSelector(name, ^BOOL(HTMLElement * _Nonnull element) {
return [element.parentElement indexOfChildNode:element] < index;
NSUInteger elementIndex = [element.parentElement indexOfChildNode:element];
if (index > 0) {
return elementIndex < index;
} else {
return elementIndex < element.parentElement.childNodesCount - index - 1;
}
});
}
CSSSelector * gtSelector(NSUInteger index)
CSSSelector * gtSelector(NSInteger index)
{
NSString *name = [NSString stringWithFormat:@":gt(%lu)", (unsigned long)index];
return namedBlockSelector(name, ^BOOL(HTMLElement * _Nonnull element) {
return [element.parentElement indexOfChildNode:element] > index;
NSUInteger elementIndex = [element.parentElement indexOfChildNode:element];
if (index > 0) {
return elementIndex > index;
} else {
return elementIndex > element.parentElement.childNodesCount - index - 1;
}
});
}