AdguardTeam / AdguardFilters

AdGuard Content Blocking Filters
https://adguard.com/
GNU General Public License v3.0
3.12k stars 632 forks source link

yandex direct - let's do something with it #778

Closed ameshkov closed 8 years ago

ameshkov commented 9 years ago

Let's use MutationObserver way instead of what we use now.

Alex-302 commented 9 years ago
yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by#%#var __adgRemoveDirectColor = function() { $('.b-serp-item').each(function() { var bgColor = $(this).css('background-color'); if (bgColor == 'rgb(255, 252, 234)' || bgColor == 'rgb(254, 249, 245)') { $(this).css('display', 'none'); } }); };
yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by#%#var __adgRemoveDirectLabel = function() { $('.serp-block .serp-item__label').each(function() { $(this).closest('.serp-item').remove(); }); $('div.label_type_adv').closest('.serp-item_js_inited').remove(); $('div.serp-adv-item__label').closest('.serp-item_js_inited').remove(); };
yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by#%#var __adgRemoveDirectMail = function() { $('a.b-folders__folder__link[title="Яндекс.Директ"]').closest('.b-folders__nesting').remove(); };
yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by#%#var __adgRemoveDirectNews = function() { $('a[href^="http://news-clck.yandex."]').closest('div[class^="story"]').remove(); };
yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by#%#var __adgRemoveDirectTitle = function() { $('.serp-block .serp-adv__title-text').each(function() { $(this).closest('.serp-block').remove(); }); };
yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by#%#var __adgRemoveDirect = function() { console.log("begin adgRemoveDirect"); __adgRemoveDirectNews(); __adgRemoveDirectMail(); if (typeof __adgEnabled != 'undefined' &&  !__adgEnabled) return; __adgRemoveDirectColor(); __adgRemoveDirectTitle(); __adgRemoveDirectLabel(); };
yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by#%#var __adgApplyRules = function() { try { console.log("begin adgApplyRules");window.__adgRemoveDirect(); jQuery(document).ajaxComplete(function() { window.__adgRemoveDirect(); setTimeout(window.__adgRemoveDirect, 100); setTimeout(window.__adgRemoveDirect, 500); }); jQuery(document).ready(function() { window.__adgRemoveDirect(); }); } catch(ex){console.log(ex); }};
yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by#%#var __DirectObserver = function(func, obj) { console.log("begin MutationObserver"); if (obj) new MutationObserver(func).observe(obj,{childList:true}); }
yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by#%#var __CallDirectObserver = function() { console.log("begin CallDirectObserver"); __DirectObserver(window.__adgApplyRules, document.querySelector('div.rubric__right')); __adgRemoveDirect(); };
yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by#%#if (window.addEventListener) { window.addEventListener('load', function() { window.__adgApplyRules(); window.__CallDirectObserver(); console.log("begin addEventListener load ---> CallDirectObserver");}); };
yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by#%#if (window.addEventListener) { window.addEventListener('DOMContentLoaded', function() { window.__adgApplyRules(); window.__CallDirectObserver(); console.log("begin addEventListener DOMContentLoaded ---> CallDirectObserver"); }); };
yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by#%#try {__adgRemoveDirect(); window.__CallDirectObserver(); console.log("try adgRemoveDirect ---> CallDirectObserver");} catch(ex) {};
ameshkov commented 9 years ago

First, try to get rid of jquery usage.

var AG_removeParent = function(el, fn) {
    while (el) {
        if (fn(el)) { el.parentNode.removeChild(el); return; }
        el = el.parentNode;
    }
};
AG_each('.serp-adv-item__label', function(node) { AG_removeParent(node, function(parent) { return parent.className && parent.className.indexOf('serp-item_js_inited') >= 0; }) });
Alex-302 commented 9 years ago

Rules

! в API
#%#var AG_removeParent = function(el, fn) { while (el && el.parentNode) { if (fn(el)) { el.parentNode.removeChild(el); return; } el = el.parentNode; } };
! yandex.ru/search (context)
yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by#%#var __adgRemoveContext = function() { AG_each('.serp-adv-item__label', function(node) { AG_removeParent(node, function(parent) { return parent.className && (parent.className.indexOf('serp-item_js_inited') >= 0 || parent.className && parent.className.indexOf('serp-adv__block') >= 0); }) }); }
!! yandex mail direct (left)
yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by#%#var __adgRemoveDirectMail = function() { console.log("begin adgRemoveDirectInMail"); AG_each('.js-folders__nesting', function(node) { AG_each('a[class="b-folders__folder__link"][href*="direct.yandex.ru"]', function(node) { AG_removeParent(node, function(parent) { return parent.className && parent.className.indexOf('b-folders__nesting') >= 0; }) }); }); }
!! yandex news direct (right)
yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by#%#var __adgRemoveDirectNews = function() { console.log("removing DirectNews"); AG_each('a[href^="http://news-clck.yandex."]', function (node) { AG_removeParent(node, function (parent) { return parent.className && parent.className.indexOf('story') >= 0; }) }); };
!!
yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by#%#var __adgRemoveDirectLabel = function() { };
yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by#%#var __adgRemoveDirectNews = function() { $('a[href^="http://news-clck.yandex."]').closest('div[class^="story"]').remove(); };
yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by#%#var __adgRemoveDirect = function() { __adgRemoveContext(); __adgRemoveDirectNews(); __adgRemoveDirectMail(); if (typeof __adgEnabled != 'undefined' &&  !__adgEnabled) return; __adgRemoveDirectLabel(); };
yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by#%#var __adgApplyRules = function() { try { window.__adgRemoveDirect(); jQuery(document).ajaxComplete(function() { window.__adgRemoveDirect(); setTimeout(window.__adgRemoveDirect, 100); setTimeout(window.__adgRemoveDirect, 500); }); jQuery(document).ready(function() { window.__adgRemoveDirect(); }); }catch(ex){} };
yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by##.banner_js_inited

Observer

var observer = new MutationObserver(function(mutations) {
    mutations.forEach(function(mutation) {
        console.log(mutation.type);
        __adgRemoveDirect();
    });    
});
#%#var observer = function() { new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { console.log(mutation.type); __adgRemoveDirect(); }); }); };

Run observer

observer.observe(document.querySelector('body'), { attributes: true, childList: true, characterData: true });
ameshkov commented 9 years ago

Rename observer --> __adgObserver.

ameshkov commented 9 years ago

Why do you need empty __adgRemoveDirectLabel?

ameshkov commented 9 years ago

Are you sure we still need __adgApplyRules?

Alex-302 commented 9 years ago

no, I will remove them

Alex-302 commented 8 years ago

!!! to API

#%#var AG_removeParent = function(el, fn) { while (el && el.parentNode) { if (fn(el)) { el.parentNode.removeChild(el); return; } el = el.parentNode; } };

!!! yandex.ru/search (context)

yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by#%#var __adgRemoveContext = function() { AG_each('.serp-adv-item__label', function(node) { AG_removeParent(node, function(parent) { return parent.className && (parent.className.indexOf('serp-item_js_inited') >= 0 || parent.className && parent.className.indexOf('serp-adv__block') >= 0); }) }); }

!!! yandex mail direct (left)

yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by#%#var __adgRemoveDirectMail = function() { console.log("begin adgRemoveDirectInMail"); AG_each('.js-folders__nesting', function(node) { AG_each('a[class="b-folders__folder__link"][href*="direct.yandex.ru"]', function(node) { AG_removeParent(node, function(parent) { return parent.className && parent.className.indexOf('b-folders__nesting') >= 0; }) }); }); }

!!! yandex news direct (right)

yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by#%#var __adgRemoveDirectNews = function() { console.log("removing DirectNews"); AG_each('a[href^="http://news-clck.yandex."]', function (node) { AG_removeParent(node, function (parent) { return parent.className && parent.className.indexOf('story') >= 0; }) }); };

!!! __adgRemoveDirect

yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by#%#var __adgRemoveDirect = function () { console.log("begin __adgRemoveDirect"); __adgRemoveDirectNews(); __adgRemoveDirectMail(); if (typeof __adgEnabled != 'undefined' && !__adgEnabled) { return } else { __adgRemoveContext(); } 
};

!!! __adgObserver

yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by#%#function __adgObserver(mutations) { var __Observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { console.log(mutation.type); __adgRemoveDirect(); }); }); __Observer.observe(document.body,  { childList: true, characterData: true, subtree: true }); };
yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by#%#AG_onLoad(function() { __adgObserver(); });

!!! sometime Direct can by hided

yandex.ru,yandex.com,yandex.ua,yandex.kz,yandex.by##.banner_js_inited
Eugene-Savenko commented 8 years ago

Здравствуйте ! Пропуск рекламы наЯндекс погода.Появилась реклама(Яндекс.Директ.) на сайте Яндекс.Погода.Реклама проявляется в любом браузере.Помогает очистка куки и кэш,но ненадолго.После двух-трёх открытий данного сайта. Яндекс.Директ. появляется вновь.Програмама Adguard 6.0 установлена на чистую ось.С уважением. image

У меня тоже есть: image

SPQ-874-92792

ameshkov commented 8 years ago

@evgeniy-ADG лучше это в отдельный issue

Eugene-Savenko commented 8 years ago

https://github.com/AdguardTeam/ExperimentalFilter/issues/1231