Вход Регистрация
Файл: error-kitty/node_modules/cheerio/node_modules/CSSselect/lib/attributes.js
Строк: 209
<?php
var DomUtils  = require("domutils"),
    
hasAttrib DomUtils.hasAttrib,
    
getAttributeValue DomUtils.getAttributeValue,
    
falseFunc = require("./basefunctions.js").falseFunc;

//https://github.com/slevithan/XRegExp/blob/master/src/xregexp.js#L469
var reChars = /[-[]{}()*+?.,\^$|#s]/g;

/*
    attribute selectors
*/

var attributeRules = {
    
__proto__null,
    
equals: function(nextdata){
        var 
name  data.name,
            
value data.value;

        if(
data.ignoreCase){
            
value value.toLowerCase();

            return function 
equalsIC(elem){
                var 
attr getAttributeValue(elemname);
                return 
attr != null && attr.toLowerCase() === value && next(elem);
            };
        }

        return function 
equals(elem){
            return 
getAttributeValue(elemname) === value && next(elem);
        };
    },
    
hyphen: function(nextdata){
        var 
name  data.name,
            
value data.value,
            
len value.length;

        if(
data.ignoreCase){
            
value value.toLowerCase();

            return function 
hyphenIC(elem){
                var 
attr getAttributeValue(elemname);
                return 
attr != null &&
                        (
attr.length === len || attr.charAt(len) === "-") &&
                        
attr.substr(0len).toLowerCase() === value &&
                        
next(elem);
            };
        }

        return function 
hyphen(elem){
            var 
attr getAttributeValue(elemname);
            return 
attr != null &&
                    
attr.substr(0len) === value &&
                    (
attr.length === len || attr.charAt(len) === "-") &&
                    
next(elem);
        };
    },
    
element: function(nextdata){
        var 
name data.name,
            
value data.value;

        if(/
s/.test(value)){
            return 
falseFunc;
        }

        
value value.replace(reChars"\$&");

        var 
pattern "(?:^|\s)" value "(?:$|\s)",
            
flags data.ignoreCase "i" "",
            
regex = new RegExp(patternflags);

        return function 
element(elem){
            var 
attr getAttributeValue(elemname);
            return 
attr != null && regex.test(attr) && next(elem);
        };
    },
    
exists: function(nextdata){
        var 
name data.name;
        return function 
exists(elem){
            return 
hasAttrib(elemname) && next(elem);
        };
    },
    
start: function(nextdata){
        var 
name  data.name,
            
value data.value,
            
len value.length;

        if(
len === 0){
            return 
falseFunc;
        }
        
        if(
data.ignoreCase){
            
value value.toLowerCase();

            return function 
startIC(elem){
                var 
attr getAttributeValue(elemname);
                return 
attr != null && attr.substr(0len).toLowerCase() === value && next(elem);
            };
        }

        return function 
start(elem){
            var 
attr getAttributeValue(elemname);
            return 
attr != null && attr.substr(0len) === value && next(elem);
        };
    },
    
end: function(nextdata){
        var 
name  data.name,
            
value data.value,
            
len   = -value.length;

        if(
len === 0){
            return 
falseFunc;
        }

        if(
data.ignoreCase){
            
value value.toLowerCase();

            return function 
endIC(elem){
                var 
attr getAttributeValue(elemname);
                return 
attr != null && attr.substr(len).toLowerCase() === value && next(elem);
            };
        }

        return function 
end(elem){
            var 
attr getAttributeValue(elemname);
            return 
attr != null && attr.substr(len) === value && next(elem);
        };
    },
    
any: function(nextdata){
        var 
name  data.name,
            
value data.value;

        if(
value === ""){
            return 
falseFunc;
        }

        if(
data.ignoreCase){
            var 
regex = new RegExp(value.replace(reChars"\$&"), "i");

            return function 
anyIC(elem){
                var 
attr getAttributeValue(elemname);
                return 
attr != null && regex.test(attr) && next(elem);
            };
        }

        return function 
any(elem){
            var 
attr getAttributeValue(elemname);
            return 
attr != null && attr.indexOf(value) >= && next(elem);
        };
    },
    
not: function(nextdata){
        var 
name  data.name,
            
value data.value;

        if(
value === ""){
            return function 
notEmpty(elem){
                return !!
getAttributeValue(elemname) && next(elem);
            };
        } else if(
data.ignoreCase){
            
value value.toLowerCase();

            return function 
notIC(elem){
                var 
attr getAttributeValue(elemname);
                return 
attr != null && attr.toLowerCase() !== value && next(elem);
            };
        }

        return function 
not(elem){
            return 
getAttributeValue(elemname) !== value && next(elem);
        };
    }
};

module.exports = {
    
compile: function(nextdata){
        return 
attributeRules[data.action](nextdata);
    },
    
rulesattributeRules
};
?>
Онлайн: 1
Реклама