From 651622f7d0fbe8199c15c228859d50787c3315ac Mon Sep 17 00:00:00 2001
From: Valentin
Date: Wed, 19 Aug 2015 17:55:41 +0200
Subject: [PATCH 1/2] Clone FuckAdBlock : Added a "setTimeout" 1ms for the
first "_checkBait()" when calling the method "check()". This fixes a bug in
some cases on Firefox. Improved performance when a detection is positive (we
stop the loop). Added the "debug" option that displays a multitude of
interesting logs. Updated documentation (text, CDN, syntax highlighting, ...)
Update version.
---
LICENSE | 1 -
README.md | 10 +++++--
blockadblock.js | 80 ++++++++++++++++++++++++++++++++++++++++++-------
bower.json | 2 +-
package.json | 2 +-
test.html | 66 ++++++++++++++++++++++++----------------
6 files changed, 119 insertions(+), 42 deletions(-)
diff --git a/LICENSE b/LICENSE
index d8b688d..7ce5af3 100644
--- a/LICENSE
+++ b/LICENSE
@@ -19,4 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
-
diff --git a/README.md b/README.md
index 874f7c5..fdf6bf7 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-BlockAdBlock (v3.1.1)
+BlockAdBlock (v3.2.0)
===========
([FuckAdBlock](https://github.com/sitexw/FuckAdBlock) same project but with a more convenient name)
@@ -59,9 +59,10 @@ if(typeof blockAdBlock === 'undefined') {
}
// Change the options
-blockAdBlock.setOptions('checkOnLoad', false);
+blockAdBlock.setOption('checkOnLoad', false);
// and|or
-blockAdBlock.setOptions({
+blockAdBlock.setOption({
+ debug: true,
checkOnLoad: false,
resetOnEnd: false
});
@@ -89,6 +90,9 @@ baitClass: 'pub_300x250 pub_300x250m pub_728x90 text-ad textAd text_ad text_ads
// CSS style used to hide the bait of the users
baitStyle: 'width: 1px !important; height: 1px !important; position: absolute !important; left: -10000px !important; top: -1000px !important;'
+
+// Displays the debug in the console (available only from version 3.2 and more)
+debug: false
```
Method available
diff --git a/blockadblock.js b/blockadblock.js
index 8f206a6..e938432 100644
--- a/blockadblock.js
+++ b/blockadblock.js
@@ -1,5 +1,5 @@
/*
- * BlockAdBlock 3.1.1
+ * BlockAdBlock 3.2.0
* Copyright (c) 2015 Valentin Allaire
* Released under the MIT license
* https://github.com/sitexw/BlockAdBlock
@@ -13,10 +13,11 @@
loopCheckTime: 50,
loopMaxNumber: 5,
baitClass: 'pub_300x250 pub_300x250m pub_728x90 text-ad textAd text_ad text_ads text-ads text-ad-links',
- baitStyle: 'width: 1px !important; height: 1px !important; position: absolute !important; left: -10000px !important; top: -1000px !important;'
+ baitStyle: 'width: 1px !important; height: 1px !important; position: absolute !important; left: -10000px !important; top: -1000px !important;',
+ debug: false
};
this._var = {
- version: '3.1.1',
+ version: '3.2.0',
bait: null,
checking: false,
loop: null,
@@ -30,6 +31,9 @@
var eventCallback = function() {
setTimeout(function() {
if(self._options.checkOnLoad === true) {
+ if(self._options.debug === true) {
+ self._log('onload->eventCallback', 'A check loading is launched');
+ }
if(self._var.bait === null) {
self._creatBait();
}
@@ -49,6 +53,10 @@
BlockAdBlock.prototype._var = null;
BlockAdBlock.prototype._bait = null;
+ BlockAdBlock.prototype._log = function(method, message) {
+ console.log('[BlockAdBlock]['+method+'] '+message);
+ };
+
BlockAdBlock.prototype.setOption = function(options, value) {
if(value !== undefined) {
var key = options;
@@ -57,6 +65,9 @@
}
for(var option in options) {
this._options[option] = options[option];
+ if(this._options.debug === true) {
+ this._log('setOption', 'The option "'+option+'" he was assigned to "'+options[option]+'"');
+ }
}
return this;
};
@@ -74,10 +85,18 @@
this._var.bait.offsetWidth;
this._var.bait.clientHeight;
this._var.bait.clientWidth;
+
+ if(this._options.debug === true) {
+ this._log('_creatBait', 'Bait has been created');
+ }
};
BlockAdBlock.prototype._destroyBait = function() {
window.document.body.removeChild(this._var.bait);
this._var.bait = null;
+
+ if(this._options.debug === true) {
+ this._log('_destroyBait', 'Bait has been removed');
+ }
};
BlockAdBlock.prototype.check = function(loop) {
@@ -85,7 +104,14 @@
loop = true;
}
+ if(this._options.debug === true) {
+ this._log('check', 'An audit was requested '+(loop===true?'with a':'without')+' loop');
+ }
+
if(this._var.checking === true) {
+ if(this._options.debug === true) {
+ this._log('check', 'A check was canceled because there is already an ongoing');
+ }
return false;
}
this._var.checking = true;
@@ -101,7 +127,12 @@
self._checkBait(loop);
}, this._options.loopCheckTime);
}
- this._checkBait(loop);
+ setTimeout(function() {
+ self._checkBait(loop);
+ }, 1);
+ if(this._options.debug === true) {
+ this._log('check', 'A check is in progress ...');
+ }
return true;
};
@@ -130,33 +161,52 @@
}
}
+ if(this._options.debug === true) {
+ this._log('_checkBait', 'A check ('+(this._var.loopNumber+1)+'/'+this._options.loopMaxNumber+' ~'+(1+this._var.loopNumber*this._options.loopCheckTime)+'ms) was conducted and detection is '+(detected===true?'positive':'negative'));
+ }
+
if(loop === true) {
this._var.loopNumber++;
if(this._var.loopNumber >= this._options.loopMaxNumber) {
- clearInterval(this._var.loop);
- this._var.loop = null;
- this._var.loopNumber = 0;
+ this._stopLoop();
}
}
if(detected === true) {
- if(loop === true) {
- this._var.checking = false;
- }
+ this._stopLoop();
this._destroyBait();
this.emitEvent(true);
- } else if(this._var.loop === null || loop === false) {
if(loop === true) {
this._var.checking = false;
}
+ } else if(this._var.loop === null || loop === false) {
this._destroyBait();
this.emitEvent(false);
+ if(loop === true) {
+ this._var.checking = false;
+ }
+ }
+ };
+ BlockAdBlock.prototype._stopLoop = function(detected) {
+ clearInterval(this._var.loop);
+ this._var.loop = null;
+ this._var.loopNumber = 0;
+
+ if(this._options.debug === true) {
+ this._log('_stopLoop', 'A loop has been stopped');
}
};
BlockAdBlock.prototype.emitEvent = function(detected) {
+ if(this._options.debug === true) {
+ this._log('emitEvent', 'An event with a '+(detected===true?'positive':'negative')+' detection was called');
+ }
+
var fns = this._var.event[(detected===true?'detected':'notDetected')];
for(var i in fns) {
+ if(this._options.debug === true) {
+ this._log('emitEvent', 'Call function '+(parseInt(i)+1)+'/'+fns.length);
+ }
if(fns.hasOwnProperty(i)) {
fns[i]();
}
@@ -169,10 +219,18 @@
BlockAdBlock.prototype.clearEvent = function() {
this._var.event.detected = [];
this._var.event.notDetected = [];
+
+ if(this._options.debug === true) {
+ this._log('clearEvent', 'The event list has been cleared');
+ }
};
BlockAdBlock.prototype.on = function(detected, fn) {
this._var.event[(detected===true?'detected':'notDetected')].push(fn);
+ if(this._options.debug === true) {
+ this._log('on', 'A type of event "'+(detected===true?'detected':'notDetected')+'" was added');
+ }
+
return this;
};
BlockAdBlock.prototype.onDetected = function(fn) {
diff --git a/bower.json b/bower.json
index 2960fff..592213e 100644
--- a/bower.json
+++ b/bower.json
@@ -1,6 +1,6 @@
{
"name": "blockadblock",
- "version": "3.1.1",
+ "version": "3.2.0",
"description": "Detects ad blockers (AdBlock, ...)",
"authors": [{
"name" : "Valentin Allaire",
diff --git a/package.json b/package.json
index 15f8398..273fe9b 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "blockadblock",
- "version": "3.1.1",
+ "version": "3.2.0",
"description": "Detects ad blockers (AdBlock, ...)",
"author": {
"name" : "Valentin Allaire",
diff --git a/test.html b/test.html
index 036b55f..45a4601 100644
--- a/test.html
+++ b/test.html
@@ -1,13 +1,14 @@
- BlockAdBlock 3.1.1
+ BlockAdBlock 3.2.0
-
+
+
-
BlockAdBlock 3.1.1
+ BlockAdBlock 3.2.0
Publicity exampleCheck again
- AdBlock is not enabled
- AdBlock is enabled
+ AdBlock is not enabled
+ AdBlock is enabled
@@ -74,11 +78,11 @@
Install via
Manual:
Download "blockadblock.js" and add it to your website.
Bower:
-
bower install blockadblock
+
bower install fuck-adblock
Node.js/io.js:
npm install blockadblock
Code example
-
// Function called if AdBlock is not detected
+// Function called if AdBlock is not detected
function adBlockNotDetected() {
alert('AdBlock is not enabled');
}
@@ -103,14 +107,15 @@ Code example
}
// Change the options
-blockAdBlock.setOptions('checkOnLoad', false);
+blockAdBlock.setOption('checkOnLoad', false);
// and|or
-blockAdBlock.setOptions({
+blockAdBlock.setOption({
+ debug: true,
checkOnLoad: false,
resetOnEnd: false
-});
+});
Default options
-
// At launch, check if AdBlock is enabled
+// At launch, check if AdBlock is enabled
// Uses the method blockAdBlock.check()
checkOnLoad: true
@@ -129,9 +134,12 @@ Default options
// CSS style used to hide the bait of the users
baitStyle: 'width: 1px !important; height: 1px !important; position: absolute !important; left: -10000px !important; top: -1000px !important;'
-
+
+// Displays the debug in the console (available only from version 3.2 and more)
+debug: false
+
Method available
-
// Allows to set options
+// Allows to set options
// #options: string|object
// #value: string
blockAdBlock.setOption(options, value);
@@ -157,46 +165,48 @@ Method available
// Similar to blockAdBlock.on(true|false, fn)
blockAdBlock.onDetected(fn);
-blockAdBlock.onNotDetected(fn);
+blockAdBlock.onNotDetected(fn);
Instance
(Available only from version 3.1 and more)
By default, BlockAdBlock is instantiated automatically.
To block this automatic instantiation, simply create a variable "blockAdBlock" with a value (null, false, ...) before importing the script.
-
<script>var blockAdBlock = false;</script>
-<script src="./blockadblock.js"></script>
+
<script>var blockAdBlock = false;</script>
+<script src="./blockadblock.js"></script>
After that, you are free to create your own instances:
-
blockAdBlock = new BlockAdBlock;
+blockAdBlock = new BlockAdBlock;
// and|or
myBlockAdBlock = new BlockAdBlock({
checkOnLoad: true,
resetOnEnd: true
-});
+});
+
+
+
\ No newline at end of file
From bbc58914fe34cf57571014f92ec0dcc709eb1aef Mon Sep 17 00:00:00 2001
From: Valentin
Date: Wed, 19 Aug 2015 18:50:21 +0200
Subject: [PATCH 2/2] Correction documentation error
---
test.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test.html b/test.html
index 45a4601..65a2323 100644
--- a/test.html
+++ b/test.html
@@ -172,7 +172,7 @@ Instance
By default, BlockAdBlock is instantiated automatically.
To block this automatic instantiation, simply create a variable "blockAdBlock" with a value (null, false, ...) before importing the script.
-<script>var blockAdBlock = false;</script>
+<script>var blockAdBlock = false;</script>
<script src="./blockadblock.js"></script>
After that, you are free to create your own instances:
blockAdBlock = new BlockAdBlock;