diff --git a/extensions/chromium/.eslintrc.js b/extensions/chromium/.eslintrc.js
index 917c5ed..14a26e3 100644
--- a/extensions/chromium/.eslintrc.js
+++ b/extensions/chromium/.eslintrc.js
@@ -1,5 +1,5 @@
module.exports = {
- "extends": ["eslint:recommended", "google"],
+ "extends": ["google"],
"plugins": [
//"hapi"
],
diff --git a/extensions/chromium/runet-censorship-bypass/extension/00-init-apis.js b/extensions/chromium/runet-censorship-bypass/extension/00-init-apis.js
index f7d0a64..75bf363 100644
--- a/extensions/chromium/runet-censorship-bypass/extension/00-init-apis.js
+++ b/extensions/chromium/runet-censorship-bypass/extension/00-init-apis.js
@@ -1,6 +1,6 @@
'use strict';
-const IF_DEBUG = true;
+const IF_DEBUG = false;
if (!IF_DEBUG) {
// I believe logging objects precludes them from being GCed.
@@ -8,13 +8,24 @@ if (!IF_DEBUG) {
// (though no one sent me logs so far).
['log', 'warn', 'error'].forEach( (meth) => {
const _meth = window.console[meth].bind(console);
- window.console[meth] = function(...args) { _meth(...args.map((a) => '' + a)) }
+ window.console[meth] = function(...args) {
+
+ _meth(...args.map((a) => '' + a));
+
+ };
});
}
window.utils = {
+ mandatory() {
+
+ throw new TypeError('Missing required argument. ' +
+ 'Be explicit if you swallow errors.');
+
+ },
+
areSettingsNotControlledFor(details) {
return ['controlled_by_other', 'not_controllable']
diff --git a/extensions/chromium/runet-censorship-bypass/extension/11-api-error-handlers.js b/extensions/chromium/runet-censorship-bypass/extension/11-api-error-handlers.js
index 54376ae..42c0c4c 100644
--- a/extensions/chromium/runet-censorship-bypass/extension/11-api-error-handlers.js
+++ b/extensions/chromium/runet-censorship-bypass/extension/11-api-error-handlers.js
@@ -78,13 +78,18 @@
window.apis.errorHandlers = {
- viewErrorVoid(errId) {
+ viewErrorVoid(type = window.utils.mandatory(), err) {
- const errors = this.idToError;
+ let errors = {};
+ if (err) {
+ errors[type] = err;
+ } else {
+ errors = this.idToError;
+ }
const json = JSON.stringify(errors, errorJsonReplacer, 0);
openAndFocus(
'http://rebrand.ly/ac-error/?json=' + encodeURIComponent(json) +
- '&type=' + encodeURIComponent(errId) +
+ (type ? '&type=' + encodeURIComponent(type) : '') +
'&version=' + chrome.runtime.getManifest().version
);
@@ -142,7 +147,7 @@
{
icon = 'default-128.png',
context = extName,
- ifSticky = true
+ ifSticky = true,
}
) {
@@ -248,7 +253,7 @@
noCon,
chrome.i18n.getMessage('noControl'),
chrome.i18n.getMessage('which'),
- {icon:'no-control-128.png', ifSticky: false}
+ {icon: 'no-control-128.png', ifSticky: false}
);
} else {
chrome.notifications.clear( noCon );
diff --git a/extensions/chromium/runet-censorship-bypass/extension/12-api-sync-pac-script-with-pac-provider.js b/extensions/chromium/runet-censorship-bypass/extension/12-api-sync-pac-script-with-pac-provider.js
index 8f66318..50ebbc4 100644
--- a/extensions/chromium/runet-censorship-bypass/extension/12-api-sync-pac-script-with-pac-provider.js
+++ b/extensions/chromium/runet-censorship-bypass/extension/12-api-sync-pac-script-with-pac-provider.js
@@ -21,12 +21,7 @@
{ // Private namespace starts.
- const mandatory = function mandatory() {
-
- throw new TypeError('Missing required argument. ' +
- 'Be explicit if you swallow errors.');
-
- };
+ const mandatory = window.utils.mandatory;
const throwIfError = function throwIfError(err) {
@@ -99,7 +94,10 @@
};
- const clarify = function clarify(err = mandatory(), message = mandatory(), {data} = {}) {
+ const clarify = function clarify(
+ err = mandatory(),
+ message = mandatory(),
+ {data} = {}) {
err.clarification = new Clarification(message, err.clarification);
if (data) {
@@ -144,8 +142,7 @@
console.warn('Failed, other extension is in control.');
return cb(
- null, null,
- [new Warning( window.utils.messages.whichExtensionHtml() )]
+ new Warning( window.utils.messages.whichExtensionHtml() )
);
}
@@ -163,17 +160,22 @@
};
- const clarifyFetchErrorThen = (cb) => clarifyErrorThen('Что-то не так с сетью, проверьте соединение.', cb);
+ const clarifyFetchErrorThen = (cb) =>
+ clarifyErrorThen('Что-то не так с сетью, проверьте соединение.', cb);
- const ifModifiedSince = function ifModifiedSince(url = mandatory(), lastModified = mandatory(), cb = mandatory()) {
+ const ifModifiedSince = function ifModifiedSince(
+ url = mandatory(),
+ lastModified = mandatory(),
+ cb = mandatory()
+ ) {
const wasModified = new Date(0).toUTCString();
const notModifiedCode = 304;
fetch(url, {
method: 'HEAD',
headers: new Headers({
- 'If-Modified-Since': lastModified
- })
+ 'If-Modified-Since': lastModified,
+ }),
}).then(
(res) => {
cb(
@@ -242,7 +244,10 @@
);
}
} catch(e) {
- err = clarify(e, 'Сервер (текст): ' + res, err ? {data: err} : null)
+ err = clarify(
+ e,
+ 'Сервер (текст): ' + res, err ? {data: err} : null
+ );
}
}
resolve([err, res]);
@@ -271,7 +276,10 @@
};
- const updatePacProxyIps = function updatePacProxyIps(provider, cb = throwIfError) {
+ const updatePacProxyIps = function updatePacProxyIps(
+ provider,
+ cb = throwIfError
+ ) {
cb = asyncLogGroup(
'Getting IP for '+ provider.proxyHosts.join(', ') + '...',
@@ -312,7 +320,7 @@
);
errorsCount === hostsProcessed
? cb(failure)
- : cb(null, null, [failure])
+ : cb(null, null, [failure]);
}
)
);
@@ -335,7 +343,10 @@
return cb(
null,
{lastModified},
- [new Warning('Ваш PAC-скрипт не нуждается в обновлении. Его дата: ' + lastModified)]
+ [new Warning(
+ 'Ваш PAC-скрипт не нуждается в обновлении. Его дата: ' +
+ lastModified
+ )]
);
}
@@ -381,8 +392,6 @@
version: chrome.runtime.getManifest().version,
- throwAsync() { throw new Error('ABC') }, // TODO: delete
-
pacProviders: {
Антизапрет: {
label: 'Антизапрет',
@@ -404,8 +413,9 @@
Антицензорити: {
label: 'Антицензорити',
desc: 'Основной PAC-скрипт от автора расширения.' +
- ' Блокировка определятся по доменному имени или IP адресу. Работает на switch-ах.' +
- '
Страница проекта.',
+ ' Блокировка определятся по доменному имени или IP адресу.' +
+ ' Работает на switch-ах.
' +
+ ' Страница проекта.',
/*
Don't use in system configs! Because Windows does poor caching.
@@ -416,11 +426,11 @@
// Official, Cloud Flare with caching:
'https://anticensorship-russia.tk/generated-pac-scripts/anticensority.pac',
// GitHub.io:
- '\x68\x74\x74\x70\x73\x3a\x2f\x2f\x61\x6e\x74\x69\x63\x65\x6e\x73\x6f\x72\x73\x68\x69\x70\x2d\x72\x75\x73\x73\x69\x61\x2e\x67\x69\x74\x68\x75\x62\x2e\x69\x6f\x2f\x67\x65\x6e\x65\x72\x61\x74\x65\x64\x2d\x70\x61\x63\x2d\x73\x63\x72\x69\x70\x74\x73\x2f\x61\x6e\x74\x69\x63\x65\x6e\x73\x6f\x72\x69\x74\x79\x2e\x70\x61\x63',
+ '\x68\x74\x74\x70\x73\x3a\x2f\x2f\x61\x6e\x74\x69\x63\x65\x6e\x73\x6f\x72\x73\x68\x69\x70\x2d\x72\x75\x73\x73\x69\x61\x2e\x67\x69\x74\x68\x75\x62\x2e\x69\x6f\x2f\x67\x65\x6e\x65\x72\x61\x74\x65\x64\x2d\x70\x61\x63\x2d\x73\x63\x72\x69\x70\x74\x73\x2f\x61\x6e\x74\x69\x63\x65\x6e\x73\x6f\x72\x69\x74\x79\x2e\x70\x61\x63', // eslint-disable-line max-len
// GitHub repo:
- '\x68\x74\x74\x70\x73\x3a\x2f\x2f\x72\x61\x77\x2e\x67\x69\x74\x68\x75\x62\x75\x73\x65\x72\x63\x6f\x6e\x74\x65\x6e\x74\x2e\x63\x6f\x6d\x2f\x61\x6e\x74\x69\x63\x65\x6e\x73\x6f\x72\x73\x68\x69\x70\x2d\x72\x75\x73\x73\x69\x61\x2f\x67\x65\x6e\x65\x72\x61\x74\x65\x64\x2d\x70\x61\x63\x2d\x73\x63\x72\x69\x70\x74\x73\x2f\x6d\x61\x73\x74\x65\x72\x2f\x61\x6e\x74\x69\x63\x65\x6e\x73\x6f\x72\x69\x74\x79\x2e\x70\x61\x63',
+ '\x68\x74\x74\x70\x73\x3a\x2f\x2f\x72\x61\x77\x2e\x67\x69\x74\x68\x75\x62\x75\x73\x65\x72\x63\x6f\x6e\x74\x65\x6e\x74\x2e\x63\x6f\x6d\x2f\x61\x6e\x74\x69\x63\x65\x6e\x73\x6f\x72\x73\x68\x69\x70\x2d\x72\x75\x73\x73\x69\x61\x2f\x67\x65\x6e\x65\x72\x61\x74\x65\x64\x2d\x70\x61\x63\x2d\x73\x63\x72\x69\x70\x74\x73\x2f\x6d\x61\x73\x74\x65\x72\x2f\x61\x6e\x74\x69\x63\x65\x6e\x73\x6f\x72\x69\x74\x79\x2e\x70\x61\x63', // eslint-disable-line max-len
// Google Drive (0.17):
- '\x68\x74\x74\x70\x73\x3a\x2f\x2f\x64\x72\x69\x76\x65\x2e\x67\x6f\x6f\x67\x6c\x65\x2e\x63\x6f\x6d\x2f\x75\x63\x3f\x65\x78\x70\x6f\x72\x74\x3d\x64\x6f\x77\x6e\x6c\x6f\x61\x64\x26\x69\x64\x3d\x30\x42\x2d\x5a\x43\x56\x53\x76\x75\x4e\x57\x66\x30\x54\x44\x46\x52\x4f\x47\x35\x46\x62\x55\x39\x4f\x64\x44\x67'],
+ '\x68\x74\x74\x70\x73\x3a\x2f\x2f\x64\x72\x69\x76\x65\x2e\x67\x6f\x6f\x67\x6c\x65\x2e\x63\x6f\x6d\x2f\x75\x63\x3f\x65\x78\x70\x6f\x72\x74\x3d\x64\x6f\x77\x6e\x6c\x6f\x61\x64\x26\x69\x64\x3d\x30\x42\x2d\x5a\x43\x56\x53\x76\x75\x4e\x57\x66\x30\x54\x44\x46\x52\x4f\x47\x35\x46\x62\x55\x39\x4f\x64\x44\x67'], // eslint-disable-line max-len
proxyHosts: ['proxy.antizapret.prostovpn.org'],
proxyIps: {
'195.123.209.38': 'proxy.antizapret.prostovpn.org',
@@ -479,7 +489,10 @@
return this._currentPacProviderKey;
},
- setCurrentPacProviderKey(newKey = mandatory(), lastModified = new Date().toUTCString()) {
+ setCurrentPacProviderKey(
+ newKey = mandatory(),
+ lastModified = new Date().toUTCString()
+ ) {
this.mustBeKey(newKey);
this._currentPacProviderKey = newKey;
@@ -742,7 +755,7 @@
key !== null &&
!Object.keys(antiCensorRu.pacProviders).includes(key)
) {
- antiCensorRu._currentPacProviderKey = 'Антицензорити'
+ antiCensorRu._currentPacProviderKey = 'Антицензорити';
}
console.log('Extension updated.');
diff --git a/extensions/chromium/runet-censorship-bypass/extension/pages/choose-pac-provider/index.html b/extensions/chromium/runet-censorship-bypass/extension/pages/choose-pac-provider/index.html
index 9165a39..65bdc67 100755
--- a/extensions/chromium/runet-censorship-bypass/extension/pages/choose-pac-provider/index.html
+++ b/extensions/chromium/runet-censorship-bypass/extension/pages/choose-pac-provider/index.html
@@ -44,9 +44,6 @@
input:checked ~ .checked-radio-panel {
visibility: visible;
}
- footer {
- margin: 2em 1em 1em;
- }
hr {
border-width: 1px 0 0 0;
margin: 0.6em 0;
@@ -61,71 +58,22 @@
}
li.provider {
display: table;
- width: 100%;
+ width: 100%;
+ position: relative;
}
-
.desc i {
vertical-align: bottom;
font-size: 1.1em;
}
/* Source: https://jsfiddle.net/greypants/zgCb7/ */
- .tooltip {
- display: none;
- white-space: initial;
- padding: 1em;
- }
.desc {
display: table-cell;
text-align: right;
color: var(--ribbon-color);
cursor: help;
+ width: 1%;
}
- .desc:hover br .tooltip {
- display: block;
- text-align: left;
- position: absolute;
- left: 0;
- top: 0;
- bottom: 0;
- right: 2.6em;
- background-color: var(--ribbon-color);
- color: white;
- z-index: 1;
- }
- .tooltip a {
- color: white;
- }
-
- /* CSS Triangles - courtesy of Trevor */
- .desc .tooltip:after {
- border-top: solid transparent 7px;
- border-bottom: solid transparent 7px;
- border-left: solid var(--ribbon-color) 7px;
- right: -7px;
- content: "";
- width: 0;
- top: 7px;
- margin-top: -13px;
- position: absolute;
- height: 0;
- }
- /* This bridges the gap so you can mouse into the tooltip without it disappearing
- .desc .tooltip:before {
- position: absolute;
- right: -14px;
- content: " ";
- display: block;
- width: 14px;
- top: 0;
- height: 100%;
- }
- */
-
-
- li.provider {
- position: relative;
- }
- .xyz {
+ .tooltip {
display: none;
position: absolute;
white-space: initial;
@@ -139,32 +87,36 @@
color: white;
text-align: initial;
}
- .desc:hover .xyz {
+ .desc:hover .tooltip {
display: block;
- }
- .xyz a {
+ }
+ .tooltip a {
color: white;
}
- .desc .xyz:after {
- border-left: solid transparent 7px;
- border-bottom: solid var(--ribbon-color) 7px;
+ .desc .tooltip:after {
+ border-left: solid transparent 0.5em;
+ border-bottom: solid var(--ribbon-color) 0.5em;
position: absolute;
- top: -7px;
+ top: -0.5em;
content: "";
width: 0;
right: 0;
height: 0;
- }
+ }
/* This bridges the gap so you can mouse into the tooltip without it disappearing */
- .desc .xyz:before {
+ .desc .tooltip:before {
position: absolute;
- top: -14px;
+ top: -1em;
content: "";
display: block;
- height: 22px;
- left: 0;
- width: calc(100% + 0.6em);
- }
+ height: 1.8em;
+ left: 75%;
+ width: calc(25% + 0.6em);
+ }
+
+ footer {
+ margin: 2em 0 1em 0;
+ }