@@ -159,19 +159,21 @@ def elementInScope(self, target, variant=None):
159
159
160
160
listElementsMap = {
161
161
None :scopingElements ,
162
- "button" :scopingElements | set ([(namespaces ["html" ], "button" )]),
163
- "list" :scopingElements | set ([(namespaces ["html" ], "ol" ),
164
- (namespaces ["html" ], "ul" )]),
165
- "table" :set ([(namespaces ["html" ], "html" ),
166
- (namespaces ["html" ], "table" )])
162
+ "button" :(scopingElements | set ([(namespaces ["html" ], "button" )]), False ),
163
+ "list" :(scopingElements | set ([(namespaces ["html" ], "ol" ),
164
+ (namespaces ["html" ], "ul" )]), False ),
165
+ "table" :(set ([(namespaces ["html" ], "html" ),
166
+ (namespaces ["html" ], "table" )]), False ),
167
+ "select" :(set (["optgroup" , "option" ]), True )
167
168
}
168
- listElements = listElementsMap [variant ]
169
+ listElements , invert = listElementsMap [variant ]
169
170
170
171
for node in reversed (self .openElements ):
171
172
if (node .name == target and not exactNode or
172
173
node == target and exactNode ):
173
174
return True
174
- elif node .nameTuple in listElements :
175
+ elif ((not invert and node .nameTuple in listElements ) or
176
+ (invert and node .nameTuple not in listElements )):
175
177
return False
176
178
177
179
assert False # We should never reach this point
0 commit comments