Skip to content

Commit

Permalink
Merge pull request #45 from AdguardTeam/feature/issues/30
Browse files Browse the repository at this point in the history
Support :-abp-has(), :-abp-has-text()
  • Loading branch information
seanl-adg authored Jul 11, 2017
2 parents 1bb58c2 + 198c25a commit c485e92
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 29 deletions.
9 changes: 6 additions & 3 deletions lib/extended-css-selector.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ var ExtendedSelector = (function () { // jshint ignore:line
// Add :matches-css-*() support
StylePropertyMatcher.extendSizzle(Sizzle);

// Add :contains, :has-text support
Sizzle.selectors.pseudos["has-text"] = Sizzle.selectors.pseudos["contains"] = Sizzle.selectors.createPseudo(function( text ) {
// Add :contains, :has-text, :-abp-contains support
Sizzle.selectors.pseudos["contains"] = Sizzle.selectors.pseudos["has-text"] = Sizzle.selectors.pseudos["-abp-contains"] = Sizzle.selectors.createPseudo(function( text ) {
if(/^\s*\/.*\/\s*$/.test(text)) {
text = text.trim().slice(1, -1).replace(/\\([\\"])/g, '$1');
var regex;
Expand All @@ -60,6 +60,9 @@ var ExtendedSelector = (function () { // jshint ignore:line
}
});

// Add :-abp-has support
Sizzle.selectors.pseudos["-abp-has"] = Sizzle.selectors.pseudos["has"];

/**
* Complex replacement function.
* Unescapes quote characters inside of an extended selector.
Expand Down Expand Up @@ -235,7 +238,7 @@ var ExtendedSelector = (function () { // jshint ignore:line
try {
// Prepare selector to be compiled with Sizzle
// Which means transform [-ext-*=""] attributes to pseudo classes
var re = /\[-(?:abp|ext)-([a-z-_]+)=(["'])((?:(?=(\\?))\4.)*?)\2\]/g;
var re = /\[-ext-([a-z-_]+)=(["'])((?:(?=(\\?))\4.)*?)\2\]/g;
var str = selectorText.replace(re, evaluateMatch);

// Sizzle's parsing of pseudo class arguments is buggy on certain circumstances
Expand Down
17 changes: 0 additions & 17 deletions test/extended-css/test-extended-css.html
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@
#case8>div[-ext-has=":matches-css-before(content: *block me*)"] { display: none; }
#case9>div[-ext-contains="Another text"] { font-size: 16px; }
#case10>div[-ext-contains="Block this"] { display: none; }
#case11>div[-abp-has=".banner"] { display:none !important; }
#case12 div[-abp-has=".banner:has-text(Banner)"] { display: none; }
</style>

<style type="text/css">
Expand Down Expand Up @@ -83,21 +81,6 @@
<div id="case10">
<div id="case10-blocked">Block this</div>
</div>
<div id="case11">
<div id="case11-blocked">
<div class="banner"></div>
</div>
</div>
<div id="case12">
<div id="case12-root">
<div id="case12-blocked">
<div class="banner">Banner</div>
</div>
<div id="case12-notblocked">
<div class="banner">Another text</div>
</div>
</div>
</div>

<script src="../qunit/qunit-2.0.1.js"></script>
<script src="../../lib/sizzle.patched.js"></script>
Expand Down
9 changes: 0 additions & 9 deletions test/extended-css/test-extended-css.js
Original file line number Diff line number Diff line change
Expand Up @@ -146,12 +146,3 @@ QUnit.test("Test attribute protection", function(assert) {
}, 100);
}, 100);
});

QUnit.test("Modifier -abp-has", function(assert) {
assertElementStyle("case11-blocked", { display: "none" }, assert);
});

QUnit.test("Modifier -abp-has with :has-text", function(assert) {
assertElementStyle("case12-blocked", { "display": "none" }, assert);
assertElementStyle("case12-notblocked", { "display": "" }, assert);
});
15 changes: 15 additions & 0 deletions test/selector/test-selector.js
Original file line number Diff line number Diff line change
Expand Up @@ -182,3 +182,18 @@ QUnit.test( "Test simple regex support in :matches-css, when ()[] characters are
var elements = selector.querySelectorAll();
assert.equal(1, elements.length);
});

QUnit.test( "Test -abp-has and -abp-has-text", function(assert) {
var elements;
var selector;

selector = new ExtendedSelector('div.test-class:-abp-has(time.g-time)');
elements = selector.querySelectorAll();
assert.equal(1, elements.length);
assert.ok(selector.matches(elements[0]));

selector = new ExtendedSelector('div:-abp-has(div.test-class-two) > .test-class:-abp-contains(adg-test)');
elements = selector.querySelectorAll();
assert.equal(1, elements.length);
assert.ok(selector.matches(elements[0]));
});

0 comments on commit c485e92

Please sign in to comment.