2014-06-23 16:42:43 -06:00
|
|
|
/*******************************************************************************
|
|
|
|
|
|
|
|
µBlock - a Chromium browser extension to block requests.
|
|
|
|
Copyright (C) 2014 Raymond Hill
|
|
|
|
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with this program. If not, see {http://www.gnu.org/licenses/}.
|
|
|
|
|
|
|
|
Home: https://github.com/gorhill/uBlock
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* global chrome, µBlock */
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
|
|
|
µBlock.getNetFilteringSwitch = function(hostname) {
|
2014-06-23 17:23:36 -06:00
|
|
|
var netExceptionList = this.userSettings.netExceptionList;
|
|
|
|
if ( netExceptionList[hostname] !== undefined ) {
|
2014-06-23 16:42:43 -06:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
var hostnames = this.URI.parentHostnamesFromHostname(hostname);
|
|
|
|
while ( hostname = hostnames.shift() ) {
|
2014-06-23 17:23:36 -06:00
|
|
|
if ( netExceptionList[hostname] !== undefined ) {
|
2014-06-23 16:42:43 -06:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
};
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
|
|
|
µBlock.toggleNetFilteringSwitch = function(hostname, newState) {
|
|
|
|
var currentState = this.getNetFilteringSwitch(hostname);
|
|
|
|
if ( newState === undefined ) {
|
|
|
|
newState = !currentState;
|
|
|
|
}
|
|
|
|
if ( newState === currentState ) {
|
|
|
|
return currentState;
|
|
|
|
}
|
2014-06-23 17:23:36 -06:00
|
|
|
var netExceptionList = this.userSettings.netExceptionList;
|
2014-06-23 16:42:43 -06:00
|
|
|
|
|
|
|
// Add to exception list
|
|
|
|
if ( !newState ) {
|
2014-06-23 17:23:36 -06:00
|
|
|
netExceptionList[hostname] = true;
|
2014-06-23 16:42:43 -06:00
|
|
|
this.saveExceptionList();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Remove from exception list
|
2014-07-06 20:24:11 -06:00
|
|
|
var hostnames = this.URI.allHostnamesFromHostname(hostname);
|
|
|
|
while ( hostname = hostnames.shift() ) {
|
|
|
|
if ( netExceptionList[hostname] !== undefined ) {
|
|
|
|
delete netExceptionList[hostname];
|
2014-06-23 16:42:43 -06:00
|
|
|
}
|
|
|
|
}
|
2014-07-06 20:24:11 -06:00
|
|
|
this.saveExceptionList();
|
|
|
|
return false;
|
2014-06-23 16:42:43 -06:00
|
|
|
};
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
2014-06-23 17:23:36 -06:00
|
|
|
// For now we will use the net exception list
|
|
|
|
|
|
|
|
µBlock.getCosmeticFilteringSwitch = function(hostname) {
|
|
|
|
var netExceptionList = this.userSettings.netExceptionList;
|
|
|
|
if ( netExceptionList[hostname] !== undefined ) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
var hostnames = this.URI.parentHostnamesFromHostname(hostname);
|
|
|
|
while ( hostname = hostnames.shift() ) {
|
|
|
|
if ( netExceptionList[hostname] !== undefined ) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
};
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
2014-06-23 16:42:43 -06:00
|
|
|
µBlock.saveExceptionList = function() {
|
|
|
|
chrome.storage.local.set({
|
2014-06-23 17:23:36 -06:00
|
|
|
'netExceptionList': this.userSettings.netExceptionList
|
2014-06-23 16:42:43 -06:00
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
2014-06-24 16:29:55 -06:00
|
|
|
// Return all settings if none specified.
|
|
|
|
|
2014-06-23 16:42:43 -06:00
|
|
|
µBlock.changeUserSettings = function(name, value) {
|
2014-06-24 16:29:55 -06:00
|
|
|
var µb = µBlock;
|
|
|
|
|
|
|
|
if ( name === undefined ) {
|
|
|
|
return µb.userSettings;
|
|
|
|
}
|
|
|
|
|
2014-06-23 16:42:43 -06:00
|
|
|
if ( typeof name !== 'string' || name === '' ) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Do not allow an unknown user setting to be created
|
|
|
|
if ( µb.userSettings[name] === undefined ) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( value === undefined ) {
|
|
|
|
return µb.userSettings[name];
|
|
|
|
}
|
|
|
|
|
|
|
|
// Pre-change
|
|
|
|
switch ( name ) {
|
2014-06-26 07:46:38 -06:00
|
|
|
default:
|
|
|
|
break;
|
2014-06-23 16:42:43 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
// Change
|
|
|
|
µb.userSettings[name] = value;
|
|
|
|
|
|
|
|
// Post-change
|
|
|
|
switch ( name ) {
|
2014-06-26 07:46:38 -06:00
|
|
|
default:
|
|
|
|
break;
|
2014-06-23 16:42:43 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
µb.saveUserSettings();
|
|
|
|
};
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
|
|
|
µBlock.transposeType = function(type, path) {
|
|
|
|
if ( type === 'other' ) {
|
|
|
|
var pos = path.lastIndexOf('.');
|
|
|
|
if ( pos > 0 ) {
|
|
|
|
var ext = path.slice(pos);
|
|
|
|
if ( '.eot.ttf.otf.svg.woff'.indexOf(ext) >= 0 ) {
|
|
|
|
return 'stylesheet';
|
|
|
|
}
|
|
|
|
if ( '.ico.png'.indexOf(ext) >= 0 ) {
|
|
|
|
return 'image';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return type;
|
|
|
|
};
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
|
|
|
µBlock.formatCount = function(count) {
|
|
|
|
if ( typeof count !== 'number' ) {
|
|
|
|
return '';
|
|
|
|
}
|
|
|
|
var s = count.toFixed(0);
|
|
|
|
if ( count >= 1000 ) {
|
|
|
|
if ( count < 10000 ) {
|
|
|
|
s = '>' + s.slice(0,1) + 'K';
|
|
|
|
} else if ( count < 100000 ) {
|
|
|
|
s = s.slice(0,2) + 'K';
|
|
|
|
} else if ( count < 1000000 ) {
|
|
|
|
s = s.slice(0,3) + 'K';
|
|
|
|
} else if ( count < 10000000 ) {
|
|
|
|
s = s.slice(0,1) + 'M';
|
|
|
|
} else {
|
|
|
|
s = s.slice(0,-6) + 'M';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return s;
|
|
|
|
};
|