uBlock/js/ublock.js

177 lines
4.9 KiB
JavaScript

/*******************************************************************************
µ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) {
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;
};
/******************************************************************************/
µBlock.toggleNetFilteringSwitch = function(hostname, newState) {
var currentState = this.getNetFilteringSwitch(hostname);
if ( newState === undefined ) {
newState = !currentState;
}
if ( newState === currentState ) {
return currentState;
}
var netExceptionList = this.userSettings.netExceptionList;
// Add to exception list
if ( !newState ) {
netExceptionList[hostname] = true;
this.saveExceptionList();
return true;
}
// Remove from exception list
if ( newState ) {
var hostnames = this.URI.allHostnamesFromHostname(hostname);
while ( hostname = hostnames.shift() ) {
if ( netExceptionList[hostname] !== undefined ) {
delete netExceptionList[hostname];
}
}
this.saveExceptionList();
return false;
}
};
/******************************************************************************/
// 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;
};
/******************************************************************************/
µBlock.saveExceptionList = function() {
chrome.storage.local.set({
'netExceptionList': this.userSettings.netExceptionList
});
};
/******************************************************************************/
µBlock.changeUserSettings = function(name, value) {
if ( typeof name !== 'string' || name === '' ) {
return;
}
var µb = µBlock;
// 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 ) {
default:
break;
}
// Change
µb.userSettings[name] = value;
// Post-change
switch ( name ) {
default:
break;
}
µ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;
};