Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: lib/content/elemHideEmulation.js

Issue 29759621: Issue 6610 - Prefer inline style for :-abp-properties() (Closed) Base URL: https://hg.adblockplus.org/adblockpluscore/
Patch Set: Created April 23, 2018, 2:39 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * This file is part of Adblock Plus <https://adblockplus.org/>, 2 * This file is part of Adblock Plus <https://adblockplus.org/>,
3 * Copyright (C) 2006-present eyeo GmbH 3 * Copyright (C) 2006-present eyeo GmbH
4 * 4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify 5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as 6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
8 * 8 *
9 * Adblock Plus is distributed in the hope that it will be useful, 9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 }; 241 };
242 242
243 const incompletePrefixRegexp = /[\s>+~]$/; 243 const incompletePrefixRegexp = /[\s>+~]$/;
244 244
245 function HasSelector(selectors) 245 function HasSelector(selectors)
246 { 246 {
247 this._innerSelectors = selectors; 247 this._innerSelectors = selectors;
248 } 248 }
249 249
250 HasSelector.prototype = { 250 HasSelector.prototype = {
251 requiresHiding: true,
252 dependsOnDOM: true, 251 dependsOnDOM: true,
253 252
254 get dependsOnStyles() 253 get dependsOnStyles()
255 { 254 {
256 return this._innerSelectors.some(selector => selector.dependsOnStyles); 255 return this._innerSelectors.some(selector => selector.dependsOnStyles);
257 }, 256 },
258 257
259 get dependsOnCharacterData() 258 get dependsOnCharacterData()
260 { 259 {
261 return this._innerSelectors.some( 260 return this._innerSelectors.some(
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 } 303 }
305 } 304 }
306 }; 305 };
307 306
308 function ContainsSelector(textContent) 307 function ContainsSelector(textContent)
309 { 308 {
310 this._regexp = makeRegExpParameter(textContent); 309 this._regexp = makeRegExpParameter(textContent);
311 } 310 }
312 311
313 ContainsSelector.prototype = { 312 ContainsSelector.prototype = {
314 requiresHiding: true,
315 dependsOnDOM: true, 313 dependsOnDOM: true,
316 dependsOnCharacterData: true, 314 dependsOnCharacterData: true,
317 315
318 *getSelectors(prefix, subtree, styles) 316 *getSelectors(prefix, subtree, styles)
319 { 317 {
320 for (let element of this.getElements(prefix, subtree, styles)) 318 for (let element of this.getElements(prefix, subtree, styles))
321 yield [makeSelector(element), subtree]; 319 yield [makeSelector(element), subtree];
322 }, 320 },
323 321
324 *getElements(prefix, subtree, styles) 322 *getElements(prefix, subtree, styles)
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 regexpString = propertyExpression.slice(1, -1) 360 regexpString = propertyExpression.slice(1, -1)
363 .replace("\\7B ", "{").replace("\\7D ", "}"); 361 .replace("\\7B ", "{").replace("\\7D ", "}");
364 } 362 }
365 else 363 else
366 regexpString = filterToRegExp(propertyExpression); 364 regexpString = filterToRegExp(propertyExpression);
367 365
368 this._regexp = new RegExp(regexpString, "i"); 366 this._regexp = new RegExp(regexpString, "i");
369 } 367 }
370 368
371 PropsSelector.prototype = { 369 PropsSelector.prototype = {
372 preferHideWithSelector: true,
373 dependsOnStyles: true, 370 dependsOnStyles: true,
374 371
375 *findPropsSelectors(styles, prefix, regexp) 372 *findPropsSelectors(styles, prefix, regexp)
376 { 373 {
377 for (let style of styles) 374 for (let style of styles)
378 if (regexp.test(style.style)) 375 if (regexp.test(style.style))
379 for (let subSelector of style.subSelectors) 376 for (let subSelector of style.subSelectors)
380 { 377 {
381 if (subSelector.startsWith("*") && 378 if (subSelector.startsWith("*") &&
382 !incompletePrefixRegexp.test(prefix)) 379 !incompletePrefixRegexp.test(prefix))
(...skipping 14 matching lines...) Expand all
397 } 394 }
398 }; 395 };
399 396
400 function Pattern(selectors, text) 397 function Pattern(selectors, text)
401 { 398 {
402 this.selectors = selectors; 399 this.selectors = selectors;
403 this.text = text; 400 this.text = text;
404 } 401 }
405 402
406 Pattern.prototype = { 403 Pattern.prototype = {
407 isSelectorHidingOnlyPattern()
408 {
409 return getCachedPropertyValue(
410 this, "_selectorHidingOnlyPattern",
411 () => this.selectors.some(selector => selector.preferHideWithSelector) &&
412 !this.selectors.some(selector => selector.requiresHiding)
413 );
414 },
415
416 get dependsOnStyles() 404 get dependsOnStyles()
417 { 405 {
418 return getCachedPropertyValue( 406 return getCachedPropertyValue(
419 this, "_dependsOnStyles", 407 this, "_dependsOnStyles",
420 () => this.selectors.some(selector => selector.dependsOnStyles) 408 () => this.selectors.some(selector => selector.dependsOnStyles)
421 ); 409 );
422 }, 410 },
423 411
424 get dependsOnDOM() 412 get dependsOnDOM()
425 { 413 {
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 657
670 pattern = patterns.shift(); 658 pattern = patterns.shift();
671 659
672 generator = evaluate(pattern.selectors, 0, "", 660 generator = evaluate(pattern.selectors, 0, "",
673 this.document, cssStyles); 661 this.document, cssStyles);
674 } 662 }
675 for (let selector of generator) 663 for (let selector of generator)
676 { 664 {
677 if (selector != null) 665 if (selector != null)
678 { 666 {
679 if (!this.useInlineStyles || 667 if (!this.useInlineStyles)
680 pattern.isSelectorHidingOnlyPattern())
681 { 668 {
682 selectors.push(selector); 669 selectors.push(selector);
683 selectorFilters.push(pattern.text); 670 selectorFilters.push(pattern.text);
684 } 671 }
685 else 672 else
686 { 673 {
687 for (let element of this.document.querySelectorAll(selector)) 674 for (let element of this.document.querySelectorAll(selector))
688 { 675 {
689 elements.push(element); 676 elements.push(element);
690 elementFilters.push(pattern.text); 677 elementFilters.push(pattern.text);
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
835 characterData: shouldObserveCharacterData(this.patterns), 822 characterData: shouldObserveCharacterData(this.patterns),
836 subtree: true 823 subtree: true
837 } 824 }
838 ); 825 );
839 this.document.addEventListener("load", this.onLoad.bind(this), true); 826 this.document.addEventListener("load", this.onLoad.bind(this), true);
840 } 827 }
841 } 828 }
842 }; 829 };
843 830
844 exports.ElemHideEmulation = ElemHideEmulation; 831 exports.ElemHideEmulation = ElemHideEmulation;
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld