Changeset 2827:3f9361b5d6b1 in livinglogic.python.xist

Show
Ignore:
Timestamp:
07/30/07 21:12:47 (12 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Implement real selectors for :hover and other pseudo classes.

All those selectors (:active, :hover, :visited) never match a node.
:link matches all <a> nodes that have a href attribute.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/ll/xist/xfind.py

    r2826 r2827  
    14151415 
    14161416 
     1417class CSSLinkSelector(Selector): 
     1418    def match(self, path): 
     1419        if path: 
     1420            node = path[-1] 
     1421            return isinstance(node, xsc.Element) and node.xmlns=="http://www.w3.org/1999/xhtml" and node.xmlname=="a" and "href" in node.attrs 
     1422        return False 
     1423 
     1424    def __str__(self): 
     1425        return "%s()" % self.__class__.__name__ 
     1426 
     1427 
     1428class CSSInvalidPseudoSelector(Selector): 
     1429    def match(self, path): 
     1430        return False 
     1431 
     1432    def __str__(self): 
     1433        return "%s()" % self.__class__.__name__ 
     1434 
     1435 
     1436class CSSHoverSelector(CSSInvalidPseudoSelector): 
     1437    pass 
     1438 
     1439 
     1440class CSSActiveSelector(CSSInvalidPseudoSelector): 
     1441    pass 
     1442 
     1443 
     1444class CSSVisitedSelector(CSSInvalidPseudoSelector): 
     1445    pass 
     1446 
     1447 
    14171448class CSSFunctionSelector(Selector): 
    14181449    def __init__(self, value=None): 
     
    15621593    "empty": CSSEmptySelector, 
    15631594    "root": CSSRootSelector, 
    1564     "hover": None, # ignore 
    1565     "link": None, # ignore 
    1566     "visited": None, # ignore 
    1567     "active": None, # ignore 
     1595    "hover": CSSHoverSelector, 
     1596    "link": CSSLinkSelector, 
     1597    "visited": CSSVisitedSelector, 
     1598    "active": CSSActiveSelector, 
    15681599} 
    15691600 
     
    16271658            elif type == "pseudoname": 
    16281659                try: 
    1629                     cls = _pseudoname2class[value] 
     1660                    rule.selectors.append(_pseudoname2class[value]()) 
    16301661                except KeyError: 
    16311662                    raise ValueError("unknown pseudoname %s" % value) 
    1632                 else: 
    1633                     if cls is not None: 
    1634                         rule.selectors.append(cls()) 
    16351663            elif type == "function": 
    16361664                try: