Comments (2)
here is a working code for computing specificity. It supports everything but the negation pseudo-class:
// in class CSSParser
const
NON_ID_ATTRIBUTES_AND_PSEUDO_CLASSES_RX = '/
(\.[\w]+) # classes
|
\[(\w+) # attributes
|
(\:( # pseudo classes
link|visited|active
|hover|focus
|lang
|target
|enabled|disabled|checked|indeterminate
|root
|nth-child|nth-last-child|nth-of-type|nth-last-of-type
|first-child|last-child|first-of-type|last-of-type
|only-child|only-of-type
|empty|contains
))
/ix',
ELEMENTS_AND_PSEUDO_ELEMENTS_RX = '/
((^|[\s\+\>\~]+)[\w]+ # elements
|
\:{1,2}( # pseudo-elements
after|before
|first-letter|first-line
|selection
)
)/ix';
public static function computeSpecificity($selector)
{
$a = 0;
$b = substr_count($selector, '#');
$c = preg_match_all(self::NON_ID_ATTRIBUTES_AND_PSEUDO_CLASSES_RX, $selector, $matches);
$d = preg_match_all(self::ELEMENTS_AND_PSEUDO_ELEMENTS_RX, $selector, $matches);
return ($a*1000) + ($b*100) + ($c*10) + $d;
}
from php-css-parser.
I’m closing this as I dont’t think there will ever be a merge method.
from php-css-parser.
Related Issues (20)
- Strict parsing mode exception with whitespace-only CSS
- @media block gives syntax error HOT 2
- issue with var on multiline HOT 1
- Selectors inside :not() not correctly parsed HOT 2
- Add a Dependabot configuration HOT 1
- @layer support
- GitHub releases page not up to date with tags (missing 8.4.0) HOT 1
- Update the GitHub runners to the latest Ubuntu LTS version HOT 1
- Add tests with SimonSapin/css-parsing-tests HOT 1
- Expressions are not being parsed HOT 3
- How to get comment HOT 1
- Fix undefined `$oRule` in `DeclarationBlock`
- Fix undefined `$oVal` in `CalcFunction`
- Add proper setters and getters to `OutputFormat`
- Make all `in_array` call strict
- Fix the `Size` constructor arguments in `DeclarationBlock`
- Can't composer update on Linux Ubuntu corrupt error HOT 6
- Allow rgb(R G B / A) notation
- Is there a way to render block wrapper with @media
- Add support for new viewport unit in Size class
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from php-css-parser.