Skip to content

Commit

Permalink
Merge pull request #121 in ADGUARD-FILTERS/scriptlets from fix/AG-188…
Browse files Browse the repository at this point in the history
…7 to master

* commit 'cc709ea9b1238af3851f5445d1edf700d96b07eb':
  uncomment tests
  remove toString convesions in tests
  better tests for alias names
  • Loading branch information
slavaleleka committed Apr 16, 2020
2 parents 026fe7c + cc709ea commit a2d5e64
Show file tree
Hide file tree
Showing 41 changed files with 481 additions and 759 deletions.
38 changes: 23 additions & 15 deletions dist/cjs/scriptletsCjs.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/cjs/scriptletsCjs.js.map

Large diffs are not rendered by default.

6 changes: 5 additions & 1 deletion dist/scriptlets.corelibs.json
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,11 @@
},
{
"names": [
"remove-class"
"remove-class",
"remove-class.js",
"ubo-remove-class.js",
"rc.js",
"ubo-rc.js"
],
"scriptlet": "function(source, args){function removeClass(source, classNames, selector) {if (!classNames) {return;}classNames = classNames.split(/\\s*\\|\\s*/);var selectors = [];if (!selector) {selectors = classNames.map(function (className) {return \".\".concat(className);});}var removeClassHandler = function removeClassHandler() {var nodes = new Set();if (selector) {var foundedNodes = [].slice.call(document.querySelectorAll(selector));foundedNodes.forEach(function (n) {return nodes.add(n);});} else if (selectors.length > 0) {selectors.forEach(function (s) {var elements = document.querySelectorAll(s);for (var i = 0; i < elements.length; i += 1) {var element = elements[i];nodes.add(element);}});}var removed = false;nodes.forEach(function (node) {classNames.forEach(function (className) {if (node.classList.contains(className)) {node.classList.remove(className);removed = true;}});});if (removed) {hit(source);}};removeClassHandler();var CLASS_ATTR_NAME = ['class'];observeDOMChanges(removeClassHandler, true, CLASS_ATTR_NAME);}function hit(source, message) {if (source.verbose !== true) {return;}try {var log = console.log.bind(console);var trace = console.trace.bind(console);var prefix = source.ruleText || '';var LOG_MARKER = 'log: ';if (message) {if (message.indexOf(LOG_MARKER) === -1) {log(\"\".concat(prefix, \" message:\\n\").concat(message));} else {log(message.slice(LOG_MARKER.length));}}log(\"\".concat(prefix, \" trace start\"));if (trace) {trace();}log(\"\".concat(prefix, \" trace end\"));} catch (e) {}if (typeof window.__debug === 'function') {window.__debug(source);}}function observeDOMChanges(callback) {var observeAttrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;var attrsToObserv = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];var throttle = function throttle(method, delay) {var wait = false;var savedArgs;var wrapper = function wrapper() {for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {args[_key] = arguments[_key];}if (wait) {savedArgs = args;return;}method.apply(void 0, args);wait = true;setTimeout(function () {wait = false;if (savedArgs) {wrapper(savedArgs);savedArgs = null;}}, delay);};return wrapper;};var THROTTLE_DELAY_MS = 20;var observer = new MutationObserver(throttle(callbackWrapper, THROTTLE_DELAY_MS));var connect = function connect() {if (attrsToObserv.length > 0) {observer.observe(document.documentElement, {childList: true,subtree: true,attributes: observeAttrs,attributeFilter: attrsToObserv});} else {observer.observe(document.documentElement, {childList: true,subtree: true,attributes: observeAttrs});}};var disconnect = function disconnect() {observer.disconnect();};function callbackWrapper() {disconnect();callback();connect();}connect();};const updatedArgs = args ? [].concat(source).concat(args) : [source];removeClass.apply(this, updatedArgs);}"
},
Expand Down
38 changes: 23 additions & 15 deletions dist/scriptlets.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/scriptlets.js.map

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions src/redirects/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ const getRedirectByName = (name) => {
/**
* Returns redirect code by param
* @param {Source} source
* @returns {string} redirect code
*/
const getRedirectCode = (source) => {
const redirect = getRedirectByName(source.name);
Expand Down
7 changes: 4 additions & 3 deletions src/scriptlets/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,10 @@ import {
*/

/**
* Returns scriptlet code by param
* @param {Source} source
*/
* Returns scriptlet code by param
* @param {Source} source
* @returns {string} scriptlet code
*/
function getScriptletCode(source) {
if (!validator.isValidScriptletName(source.name)) {
return null;
Expand Down
4 changes: 4 additions & 0 deletions src/scriptlets/remove-class.js
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,10 @@ export function removeClass(source, classNames, selector) {

removeClass.names = [
'remove-class',
'remove-class.js',
'ubo-remove-class.js',
'rc.js',
'ubo-rc.js',
];

removeClass.injections = [hit, observeDOMChanges];
106 changes: 9 additions & 97 deletions tests/redirects/google-analytics-ga.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,110 +8,22 @@ module(name);

const evalWrapper = eval;

test('UBO alias _gat', (assert) => {
const params = {
name: 'ubo-google-analytics_ga.js',
test('Checking if alias name works', (assert) => {
const adgParams = {
name,
engine: 'test',
verbose: true,
};
window.__debug = () => { window.hit = 'FIRED'; };

// run scriptlet
const resString = window.scriptlets.redirects.getCode(params);
evalWrapper(resString);

assert.ok(window._gat, '_gat object was created');
assert.notOk(window._gat._createTracker(), '_createTracker returns nothing');

const tracker = window._gat._getTracker();
assert.ok(typeof tracker === 'object', '_getTracker returns tracker object');
assert.notOk(tracker._addIgnoredOrganic(), 'checks _addIgnoredOrganic tracker method');
assert.notOk(tracker._setCookiePersistence(), 'checks _setCookiePersistence tracker method');

// hit checking
assert.strictEqual(window.hit, 'FIRED', 'hit function was executed');

clearGlobalProps('__debug', 'hit', '_gat');
});

test('UBO alias _gaq', (assert) => {
const params = {
const uboParams = {
name: 'ubo-google-analytics_ga.js',
engine: 'test',
verbose: true,
};
window.__debug = () => { window.hit = 'FIRED'; };

// run scriptlet
const resString = window.scriptlets.redirects.getCode(params);
evalWrapper(resString);

assert.expect(6);

assert.ok(window._gaq, '_gaq object was created');
assert.notOk(window._gaq._createAsyncTracker(), '_createAsyncTracker returns nothing');
window._gaq.push(() => assert.ok(true, 'push with cb runs it'));
assert.notOk(window._gaq.push([]), 'push with array returns nothing');

// https://github.com/gorhill/uBlock/issues/2162
const cb = () => assert.ok(true, 'hitCallback was executed');
window._gaq.push(['_set', 'hitCallback', cb]);

// hit checking
assert.strictEqual(window.hit, 'FIRED', 'hit function was executed');

clearGlobalProps('__debug', 'hit', '_gaq');
});

test('UBO Syntax _gat', (assert) => {
const params = {
name: 'google-analytics_ga.js',
verbose: true,
};
window.__debug = () => { window.hit = 'FIRED'; };

// run scriptlet
const resString = window.scriptlets.redirects.getCode(params);
evalWrapper(resString);

assert.ok(window._gat, '_gat object was created');
assert.notOk(window._gat._createTracker(), '_createTracker returns nothing');

const tracker = window._gat._getTracker();
assert.ok(typeof tracker === 'object', '_getTracker returns tracker object');
assert.notOk(tracker._addIgnoredOrganic(), 'checks _addIgnoredOrganic tracker method');
assert.notOk(tracker._setCookiePersistence(), 'checks _setCookiePersistence tracker method');

// hit checking
assert.strictEqual(window.hit, 'FIRED', 'hit function was executed');

clearGlobalProps('__debug', 'hit', '_gat');
});

test('UBO Syntax _gaq', (assert) => {
const params = {
name: 'google-analytics_ga.js',
verbose: true,
};
window.__debug = () => { window.hit = 'FIRED'; };

// run scriptlet
const resString = window.scriptlets.redirects.getCode(params);
evalWrapper(resString);

assert.expect(6);
const codeByAdgParams = window.scriptlets.redirects.getCode(adgParams);
const codeByUboParams = window.scriptlets.redirects.getCode(uboParams);

assert.ok(window._gaq, '_gaq object was created');
assert.notOk(window._gaq._createAsyncTracker(), '_createAsyncTracker returns nothing');
window._gaq.push(() => assert.ok(true, 'push with cb runs it'));
assert.notOk(window._gaq.push([]), 'push with array returns nothing');

// https://github.com/gorhill/uBlock/issues/2162
const cb = () => assert.ok(true, 'hitCallback was executed');
window._gaq.push(['_set', 'hitCallback', cb]);

// hit checking
assert.strictEqual(window.hit, 'FIRED', 'hit function was executed');

clearGlobalProps('__debug', 'hit', '_gaq');
assert.strictEqual(codeByAdgParams, codeByUboParams, 'ubo name - ok');
});

test('AdGuard Syntax _gat', (assert) => {
Expand Down
Loading

0 comments on commit a2d5e64

Please sign in to comment.