Raymond Hill
7 years ago
No known key found for this signature in database
GPG Key ID: 25E1490B761470C2
12 changed files with 532 additions and 243 deletions
-
13src/_locales/en/messages.json
-
67src/css/dashboard.css
-
18src/css/raw-settings.css
-
73src/dashboard.html
-
85src/js/background.js
-
31src/js/contentscript.js
-
21src/js/dashboard.js
-
84src/js/messaging.js
-
115src/js/raw-settings.js
-
101src/js/start.js
-
98src/js/storage.js
-
27src/raw-settings.html
@ -0,0 +1,67 @@ |
|||||
|
body { |
||||
|
margin: 0; |
||||
|
border: 0; |
||||
|
padding: 0; |
||||
|
font: 15px sans-serif; |
||||
|
position: relative; |
||||
|
width: 100vw; |
||||
|
height: 100vh; |
||||
|
overflow: hidden; |
||||
|
} |
||||
|
#dashboard-nav { |
||||
|
margin: 0; |
||||
|
border: 0; |
||||
|
padding: 0; |
||||
|
position: absolute; |
||||
|
top: 0; |
||||
|
width: 100vw; |
||||
|
height: 50px; |
||||
|
z-index: 10; |
||||
|
} |
||||
|
#dashboard-nav-widgets { |
||||
|
margin: 0; |
||||
|
border-bottom: 1px solid #ccc; |
||||
|
padding: 4px 0 0 0; |
||||
|
white-space: nowrap; |
||||
|
background-color: white; |
||||
|
} |
||||
|
#dashboard-nav-widgets span { |
||||
|
padding: 0 0.5em; |
||||
|
font-size: larger; |
||||
|
} |
||||
|
.tabButton { |
||||
|
margin: 0; |
||||
|
border: 1px solid #ccc; |
||||
|
border-top-left-radius: 3px; |
||||
|
border-top-right-radius: 3px; |
||||
|
padding: 4px; |
||||
|
display: inline-block; |
||||
|
position: relative; |
||||
|
top: 1px; |
||||
|
color: black; |
||||
|
background-color: #eee; |
||||
|
font: inherit; |
||||
|
cursor: pointer; |
||||
|
text-decoration: none; |
||||
|
} |
||||
|
.tabButton:focus { |
||||
|
outline: 0; |
||||
|
} |
||||
|
.tabButton:active,.tabButton:visited { |
||||
|
color: inherited; |
||||
|
} |
||||
|
.tabButton.selected { |
||||
|
border-bottom: 1px solid white; |
||||
|
background-color: white; |
||||
|
} |
||||
|
iframe { |
||||
|
margin: 0; |
||||
|
border: 0; |
||||
|
padding: 0; |
||||
|
background-color: transparent; |
||||
|
overflow: auto; |
||||
|
position: absolute; |
||||
|
top: 50px; |
||||
|
width: 100%; |
||||
|
height: calc(100% - 50px); |
||||
|
} |
@ -0,0 +1,18 @@ |
|||||
|
body { |
||||
|
display: flex; |
||||
|
flex-direction: column; |
||||
|
height: 100vh; |
||||
|
justify-content: space-between; |
||||
|
} |
||||
|
p { |
||||
|
margin: 0.5em 0; |
||||
|
} |
||||
|
textarea { |
||||
|
box-sizing: border-box; |
||||
|
flex-grow: 1; |
||||
|
resize: none; |
||||
|
text-align: left; |
||||
|
white-space: pre; |
||||
|
width: 100%; |
||||
|
word-wrap: normal; |
||||
|
} |
@ -0,0 +1,115 @@ |
|||||
|
/******************************************************************************* |
||||
|
|
||||
|
uMatrix - a browser extension to block requests. |
||||
|
Copyright (C) 2018 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 uDom */ |
||||
|
|
||||
|
'use strict'; |
||||
|
|
||||
|
/******************************************************************************/ |
||||
|
|
||||
|
(function() { |
||||
|
|
||||
|
/******************************************************************************/ |
||||
|
|
||||
|
var messaging = vAPI.messaging; |
||||
|
var cachedData = ''; |
||||
|
var rawSettingsInput = uDom.nodeFromId('rawSettings'); |
||||
|
|
||||
|
/******************************************************************************/ |
||||
|
|
||||
|
var hashFromRawSettings = function(raw) { |
||||
|
return raw.trim().replace(/\s+/g, '|'); |
||||
|
}; |
||||
|
|
||||
|
/******************************************************************************/ |
||||
|
|
||||
|
// This is to give a visual hint that the content of user blacklist has changed.
|
||||
|
|
||||
|
var rawSettingsChanged = (function () { |
||||
|
var timer = null; |
||||
|
|
||||
|
var handler = function() { |
||||
|
timer = null; |
||||
|
var changed = |
||||
|
hashFromRawSettings(rawSettingsInput.value) !== cachedData; |
||||
|
uDom.nodeFromId('rawSettingsApply').disabled = !changed; |
||||
|
}; |
||||
|
|
||||
|
return function() { |
||||
|
if ( timer !== null ) { |
||||
|
clearTimeout(timer); |
||||
|
} |
||||
|
timer = vAPI.setTimeout(handler, 100); |
||||
|
}; |
||||
|
})(); |
||||
|
|
||||
|
/******************************************************************************/ |
||||
|
|
||||
|
function renderRawSettings() { |
||||
|
var onRead = function(raw) { |
||||
|
cachedData = hashFromRawSettings(raw); |
||||
|
var pretty = [], |
||||
|
whitespaces = ' ', |
||||
|
lines = raw.split('\n'), |
||||
|
max = 0, |
||||
|
pos, |
||||
|
i, n = lines.length; |
||||
|
for ( i = 0; i < n; i++ ) { |
||||
|
pos = lines[i].indexOf(' '); |
||||
|
if ( pos > max ) { |
||||
|
max = pos; |
||||
|
} |
||||
|
} |
||||
|
for ( i = 0; i < n; i++ ) { |
||||
|
pos = lines[i].indexOf(' '); |
||||
|
pretty.push(whitespaces.slice(0, max - pos) + lines[i]); |
||||
|
} |
||||
|
rawSettingsInput.value = pretty.join('\n') + '\n'; |
||||
|
rawSettingsChanged(); |
||||
|
rawSettingsInput.focus(); |
||||
|
}; |
||||
|
messaging.send('dashboard', { what: 'readRawSettings' }, onRead); |
||||
|
} |
||||
|
|
||||
|
/******************************************************************************/ |
||||
|
|
||||
|
var applyChanges = function() { |
||||
|
messaging.send( |
||||
|
'dashboard', |
||||
|
{ |
||||
|
what: 'writeRawSettings', |
||||
|
content: rawSettingsInput.value |
||||
|
}, |
||||
|
renderRawSettings |
||||
|
); |
||||
|
}; |
||||
|
|
||||
|
/******************************************************************************/ |
||||
|
|
||||
|
// Handle user interaction
|
||||
|
uDom('#rawSettings').on('input', rawSettingsChanged); |
||||
|
uDom('#rawSettingsApply').on('click', applyChanges); |
||||
|
|
||||
|
renderRawSettings(); |
||||
|
|
||||
|
/******************************************************************************/ |
||||
|
|
||||
|
})(); |
@ -0,0 +1,27 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html> |
||||
|
<head> |
||||
|
<meta charset="utf-8"> |
||||
|
<title data-i18n="rawSettingsPageName"></title> |
||||
|
<link rel="stylesheet" type="text/css" href="css/common.css"> |
||||
|
<link rel="stylesheet" type="text/css" href="css/dashboard-common.css"> |
||||
|
<link rel="stylesheet" type="text/css" href="css/raw-settings.css"> |
||||
|
<link rel="shortcut icon" type="image/png" href="img/icon_16.png"/> |
||||
|
</head> |
||||
|
|
||||
|
<body> |
||||
|
<p><span data-i18n="rawSettingsWarning"></span> <a class="fa info important" href="https://github.com/gorhill/uMatrix/wiki/Raw-settings" target="_blank"></a> |
||||
|
</p> |
||||
|
<p><button id="rawSettingsApply" class="custom important" type="button" disabled="true" data-i18n="genericApplyChanges"></button>  |
||||
|
</p> |
||||
|
<textarea id="rawSettings" dir="auto" spellcheck="false"></textarea> |
||||
|
|
||||
|
<script src="js/vapi-common.js"></script> |
||||
|
<script src="js/vapi-client.js"></script> |
||||
|
<script src="js/udom.js"></script> |
||||
|
<script src="js/i18n.js"></script> |
||||
|
<script src="js/dashboard-common.js"></script> |
||||
|
<script src="js/raw-settings.js"></script> |
||||
|
|
||||
|
</body> |
||||
|
</html> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue