It's Not Important

Исправление проблем с невозможностью скрытия некоторых рекламных блоков в Google Chrome. Fix for inability to hide some adverts in Google Chrome.

目前為 2016-03-08 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         It's Not Important
// @namespace    lainscripts_it_is_not_important
// @version      1.2
// @description  Исправление проблем с невозможностью скрытия некоторых рекламных блоков в Google Chrome. Fix for inability to hide some adverts in Google Chrome.
// @author       lainverse
// @match        *://*/*
// @grant        none
// @run-at       document-start
// ==/UserScript==
/* jshint esnext: true */

(function(){
    'use strict';

    var imptt = /((display|(margin|padding)(-top|-bottom)?):[^;!]*)!\s*important/ig;

    function unimportanter(el) {
        var si = el.getAttribute('style'), so = si.replace(imptt, function(str,grp){return grp;});
        el.setAttribute('style',so);
        return (si != so)?1:0;
    }

    function logger(c) {
        if (c) console.log(`Decreased importance of ${c} element${c>1?'s':''}`);
    }

    document.addEventListener ("DOMContentLoaded", function(){
        var c = 0, imp = document.querySelectorAll('[style*="!"]'), i = imp.length;
        while(i--)
            c+= unimportanter(imp[i]);
        logger(c);
    });

    function checkTarget(m, c) {
        if (m.style && m.style.cssText.indexOf('!') > -1)
            c+=unimportanter(m);
        return c;            
    }

    function checkNodes(m, c) {
        var i = m.length;
        while(i--)
            c = checkTarget(m[i], c);
        return c;            
    }

    var observer = new MutationObserver(function(mutations) {
        setTimeout(function(m) {
            var i = m.length, c = 0;
            while(i--) {
                if (m[i].target)
                    c = checkTarget(m[i].target, c);
                if (m[i].addedNodes.length)
                    c = checkNodes(m[i].addedNodes, c);
            }
            logger(c);
        },0,mutations);
    });

    observer.observe(document, { childList : true, attributes : true, attributeFilter : ['style'], subtree : true });
})();