1
0
Fork 0
mirror of https://github.com/gorhill/uMatrix.git synced 2024-06-02 18:34:52 +12:00
uMatrix/src/js/utils.js

120 lines
3.3 KiB
JavaScript
Raw Normal View History

2014-10-18 08:01:09 +13:00
/*******************************************************************************
µMatrix - a Chromium browser extension to black/white list requests.
Copyright (C) 2014-2017 Raymond Hill
2014-10-18 08:01:09 +13:00
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/uMatrix
*/
'use strict';
2014-10-18 08:01:09 +13:00
/******************************************************************************/
// This will inserted as a module in the µMatrix object.
µMatrix.utils = (function() {
/******************************************************************************/
var gotoURL = function(details) {
2015-04-12 09:15:57 +12:00
vAPI.tabs.open(details);
2014-10-18 08:01:09 +13:00
};
/******************************************************************************/
var gotoExtensionURL = function(url) {
2015-04-12 09:15:57 +12:00
vAPI.tabs.open({
url: url,
index: -1,
select: true
});
2014-10-18 08:01:09 +13:00
};
/******************************************************************************/
var LineIterator = function(text, offset) {
this.text = text;
this.textLen = this.text.length;
this.offset = offset || 0;
};
LineIterator.prototype.next = function() {
var lineEnd = this.text.indexOf('\n', this.offset);
if ( lineEnd === -1 ) {
lineEnd = this.text.indexOf('\r', this.offset);
if ( lineEnd === -1 ) {
lineEnd = this.textLen;
}
}
var line = this.text.slice(this.offset, lineEnd);
this.offset = lineEnd + 1;
return line;
};
LineIterator.prototype.rewind = function() {
if ( this.offset <= 1 ) {
this.offset = 0;
return;
}
var lineEnd = this.text.lastIndexOf('\n', this.offset - 2);
if ( lineEnd !== -1 ) {
this.offset = lineEnd + 1;
} else {
lineEnd = this.text.lastIndexOf('\r', this.offset - 2);
this.offset = lineEnd !== -1 ? lineEnd + 1 : 0;
}
};
LineIterator.prototype.eot = function() {
return this.offset >= this.textLen;
};
/******************************************************************************/
var setToArray = typeof Array.from === 'function'
? Array.from
: function(dict) {
var out = [],
entries = dict.values(),
entry;
for (;;) {
entry = entries.next();
if ( entry.done ) { break; }
out.push(entry.value);
}
return out;
};
var setFromArray = function(arr) {
return new Set(arr);
};
/******************************************************************************/
2014-10-18 08:01:09 +13:00
return {
gotoURL: gotoURL,
gotoExtensionURL: gotoExtensionURL,
LineIterator: LineIterator,
setToArray: setToArray,
setFromArray: setFromArray
2014-10-18 08:01:09 +13:00
};
/******************************************************************************/
})();
/******************************************************************************/