Add version links to popup, remove ctx from templates, lint

This commit is contained in:
Ilya Ig. Petrov 2017-02-16 13:10:49 +00:00
parent a850648a4d
commit 879667e704
14 changed files with 102 additions and 50 deletions

View File

@ -12,6 +12,7 @@ const templatePlugin = (context) => through.obj(function(file, encoding, cb) {
const tjson = '.tmpl.json'; const tjson = '.tmpl.json';
if (file.path.endsWith(tjson)) { if (file.path.endsWith(tjson)) {
const originalPath = file.path;
file.path = file.path.replace(new RegExp(`${tjson}$`), '.json'); file.path = file.path.replace(new RegExp(`${tjson}$`), '.json');
if (file.isStream()) { if (file.isStream()) {
@ -24,11 +25,19 @@ const templatePlugin = (context) => through.obj(function(file, encoding, cb) {
}, },
}); });
const {keys, values} = Object.entries(context).reduce( (acc, [key, value]) => {
acc.keys.push(key);
acc.values.push(value);
return acc;
}, { keys: [], values: [] });
try { try {
file.contents = new Buffer( file.contents = new Buffer(
(new Function('ctx', 'return `' + String(file.contents) + '`;'))(stringsContext) (new Function(...keys, 'return `' + String(file.contents) + '`;'))(...values)
); );
} catch(e) { } catch(e) {
e.message += '\nIN FILE: ' + originalPath;
return cb(new PluginError(PluginName, e)); return cb(new PluginError(PluginName, e));
} }
} }
@ -46,23 +55,25 @@ gulp.task('clean', function() {
}); });
const commonContext = { const fullContext = {
version: '0.19', version: '0.19',
nameSuffixEn: '',
nameSuffixRu: '',
}; };
const contextMini = Object.assign({ const miniContext = Object.assign({}, fullContext, {
nameSuffixEn: ' MINI', nameSuffixEn: ' MINI',
nameSuffixRu: ' МИНИ', nameSuffixRu: ' МИНИ',
}, commonContext); });
gulp.task('_cp-common', ['clean'], function() { gulp.task('_cp-common', ['clean'], function() {
gulp.src(['./src/extension-common/**/*']) gulp.src(['./src/extension-common/**/*'])
.pipe(templatePlugin(contextMini)) .pipe(templatePlugin(miniContext))
.pipe(gulp.dest('./build/extension-mini')) .pipe(gulp.dest('./build/extension-mini'))
gulp.src(['./src/extension-common/**/*']) gulp.src(['./src/extension-common/**/*'])
.pipe(templatePlugin(commonContext)) .pipe(templatePlugin(fullContext))
.pipe(gulp.dest('./build/extension-full')); .pipe(gulp.dest('./build/extension-full'));
}); });
@ -70,7 +81,7 @@ gulp.task('_cp-common', ['clean'], function() {
gulp.task('_cp-mini', ['_cp-common'], function() { gulp.task('_cp-mini', ['_cp-common'], function() {
gulp.src(['./src/extension-mini/**/*']) gulp.src(['./src/extension-mini/**/*'])
.pipe(templatePlugin(contextMini)) .pipe(templatePlugin(miniContext))
.pipe(gulp.dest('./build/extension-mini')); .pipe(gulp.dest('./build/extension-mini'));
}); });
@ -78,7 +89,7 @@ gulp.task('_cp-mini', ['_cp-common'], function() {
gulp.task('_cp-full', ['_cp-common'], function() { gulp.task('_cp-full', ['_cp-common'], function() {
gulp.src(['./src/extension-full/**/*']) gulp.src(['./src/extension-full/**/*'])
.pipe(templatePlugin(commonContext)) .pipe(templatePlugin(fullContext))
.pipe(gulp.dest('./build/extension-full')); .pipe(gulp.dest('./build/extension-full'));
}); });

View File

@ -3,7 +3,7 @@
"version": "0.0.19", "version": "0.0.19",
"description": "Development tools for chromium extension", "description": "Development tools for chromium extension",
"scripts": { "scripts": {
"lint": "./node_modules/.bin/eslint ./runet-censorship-bypass/extension/**/*.js --ignore-pattern vendor" "lint": "./node_modules/.bin/eslint ./src/**/*.js --ignore-pattern vendor"
}, },
"author": "Ilya Ig. Petrov", "author": "Ilya Ig. Petrov",
"license": "GPLv3", "license": "GPLv3",

View File

@ -2,7 +2,7 @@
{ {
const IF_DEBUG = true; const IF_DEBUG = false;
if (!IF_DEBUG) { if (!IF_DEBUG) {
// I believe logging objects precludes them from being GCed. // I believe logging objects precludes them from being GCed.
@ -162,6 +162,10 @@
}; };
window.apis = {}; window.apis = {
version: {
ifMini: false,
},
};
} }

View File

@ -24,7 +24,7 @@
ifUseSecureProxiesOnly: { ifUseSecureProxiesOnly: {
dflt: false, dflt: false,
label: 'только шифрованная связь с прокси', label: 'только шифрованная связь с прокси',
desc: 'Шифровать соединение до прокси от провайдера. Провайдер всё же сможет видеть адреса (но не содержимое) проксируемых ресурсов из протокола DNS. Опция вряд ли может быть вам полезна, т.к. шифруется не весь трафик, а лишь малая его часть.', desc: 'Шифровать соединение до прокси от провайдера. Провайдер всё же сможет видеть адреса (но не содержимое) проксируемых ресурсов из протокола DNS. Опция вряд ли может быть вам полезна, т.к. шифруется не весь трафик, а лишь разблокируемые ресурсы.',
index: 1, index: 1,
}, },
ifProhibitDns: { ifProhibitDns: {
@ -42,7 +42,7 @@
ifUseLocalTor: { ifUseLocalTor: {
dflt: false, dflt: false,
label: 'использовать СВОЙ локальный TOR', label: 'использовать СВОЙ локальный TOR',
desc: 'Установите <a href="https://ru.wikipedia.org/wiki/Tor">TOR</a> на свой компьютер и используйте его как прокси-сервер. <a href="https://rebrand.ly/ac-tor">ВАЖНО</a>', desc: 'Установите <a href="https://rebrand.ly/ac-tor">TOR</a> на свой компьютер и используйте его как прокси-сервер. <a href="https://rebrand.ly/ac-tor">ВАЖНО</a>',
index: 4, index: 4,
}, },
exceptions: { exceptions: {
@ -323,10 +323,6 @@
const hosts = par.map( (ps) => ps.split(/\s+/)[1] ); const hosts = par.map( (ps) => ps.split(/\s+/)[1] );
window.utils.fireEvent('ip-to-host-replace-all', hosts, throwIfError); window.utils.fireEvent('ip-to-host-replace-all', hosts, throwIfError);
cb(null, null, ...warns); cb(null, null, ...warns);
/*window.apis.ipToHost.replaceAllAsync(
hosts,
(...args) => cb(...args, ...warns)
);*/
} }
); );

View File

@ -95,7 +95,6 @@
); );
window.utils.fireEvent('ip-to-host-update-all', throwIfError); window.utils.fireEvent('ip-to-host-update-all', throwIfError);
cb(); cb();
//window.apis.ipToHost.updateAllAsync(cb);
}; };
@ -176,7 +175,7 @@
pacUrls: ['https://antizapret.prostovpn.org/proxy.pac'], pacUrls: ['https://antizapret.prostovpn.org/proxy.pac'],
}, },
Антицензорити: { Антицензорити: {
label: 'Антицензорити', label: 'Антицензорити (тормозит)',
desc: 'Основной PAC-скрипт от автора расширения.' + desc: 'Основной PAC-скрипт от автора расширения.' +
' Блокировка определятся по доменному имени или IP адресу.' + ' Блокировка определятся по доменному имени или IP адресу.' +
' Работает на switch-ах. <br/>' + ' Работает на switch-ах. <br/>' +

View File

@ -14,7 +14,7 @@
() => chrome.contextMenus.create({ () => chrome.contextMenus.create({
id: id, id: id,
title: title, title: title,
contexts: ['browser_action'] contexts: ['browser_action'],
}, timeouted(() => { }, timeouted(() => {
const err = chrome.runtime.lastError; const err = chrome.runtime.lastError;

View File

@ -1,6 +1,6 @@
{ {
"extName": { "extName": {
"message": "Runet Censorship Bypass${ctx.nameSuffixEn}" "message": "Runet Censorship Bypass${nameSuffixEn}"
}, },
"extDesc": { "extDesc": {
"message": "Circumvent Russian Internet Censorship: https://rebrand.ly/ac-wiki" "message": "Circumvent Russian Internet Censorship: https://rebrand.ly/ac-wiki"

View File

@ -1,6 +1,6 @@
{ {
"extName": { "extName": {
"message": "Обход блокировок Рунета${ctx.nameSuffixRu}" "message": "Обход блокировок Рунета${nameSuffixRu}"
}, },
"extDesc": { "extDesc": {
"message": "Обход интернет-цензуры в России: https://rebrand.ly/ac-wiki" "message": "Обход интернет-цензуры в России: https://rebrand.ly/ac-wiki"

View File

@ -5,6 +5,7 @@
<style> <style>
:root { :root {
--ribbon-color: #4169e1; --ribbon-color: #4169e1;
--blue-bg: dodgerblue;
--default-grey: #bfbfbf; --default-grey: #bfbfbf;
max-width: 27em; max-width: 27em;
} }
@ -17,8 +18,18 @@
div, section, header, ul, ol { div, section, header, ul, ol {
margin: 0; margin: 0;
padding: 0; padding: 0;
}
header {
margin-bottom: 0.3em
}
ul, ol {
list-style-type: none; list-style-type: none;
} }
:root.if-options-page ul,
:root.if-options-page ol,
#list-of-handlers {
margin-left: 0.4em;
}
li, footer { li, footer {
display: block; display: block;
white-space: nowrap; white-space: nowrap;
@ -65,10 +76,25 @@
border-bottom: 1px solid var(--default-grey); border-bottom: 1px solid var(--default-grey);
} }
:root.if-options-page .if-not-controlled {
padding-top: 0;
padding-bottom: 0;
}
.if-not-controlled a { .if-not-controlled a {
color: white; color: white;
} }
/* MINI VS FULL */
:root:not(.if-version-mini) .only-for-mini-version {
display: none;
}
:root.if-version-mini .only-for-full-version {
display: none;
}
/* OPTIONS PAGE */
:root:not(.if-options-page) .only-for-options-page { :root:not(.if-options-page) .only-for-options-page {
display: none; display: none;
} }
@ -83,7 +109,7 @@
} }
section[data-for] { section[data-for] {
padding: 0.6em 0.5em 1em; padding: 0.6em 0 1em;
} }
:root.if-options-page section[data-for] { :root.if-options-page section[data-for] {
padding-bottom: 0.6em; padding-bottom: 0.6em;
@ -121,7 +147,6 @@
} }
.nav-labels { .nav-labels {
text-align: center; text-align: center;
--blue-bg: dodgerblue;
} }
.nav-labels li label { .nav-labels li label {
display: inline-block; display: inline-block;
@ -293,7 +318,7 @@
border: none; border: none;
width: 100%; width: 100%;
background: inherit; background: inherit;
// The two below align '.' (dot) vertically. /* The two below align '.' (dot) vertically. */
max-height: var(--exc-hieght) !important; max-height: var(--exc-hieght) !important;
min-height: var(--exc-hieght) !important; min-height: var(--exc-hieght) !important;
} }
@ -321,28 +346,34 @@
/* CONTROL RAW = BUTTON + LINK */ /* CONTROL RAW = BUTTON + LINK */
.control-row { .hor-flex {
display: table; display: flex;
align-items: baseline;
justify-content: space-between;
width: 100%; width: 100%;
}
.control-row {
margin: 1em 0 1em 0; margin: 1em 0 1em 0;
} }
.control-row > * {
display: table-cell;
}
.control-row a:nth-child(2) {
margin-left: 1em;
text-align: right;
}
/* STATUS */ /* STATUS */
#status { #status-row {
padding: 0 0.3em 1em; padding: 0 0.3em 1em;
} }
#status {
display: inline-block;
}
.other-version {
font-size: 1.7em;
color: var(--ribbon-color);
}
.other-version:hover {
text-decoration: none;
}
</style> </style>
</head> </head>
<body> <body>
<section class="if-not-controlled hor-padded" id="which-extension"></section> <section class="if-not-controlled hor-padded" id="which-extension"></section>
<input type="radio" name="accordion" class="off" id="acc-pac" checked/> <input type="radio" name="accordion" class="off" id="acc-pac" checked/>
@ -350,7 +381,7 @@
<input type="radio" name="accordion" class="off" id="acc-mods"/> <input type="radio" name="accordion" class="off" id="acc-mods"/>
<input type="radio" name="accordion" class="off" id="acc-ntf"/> <input type="radio" name="accordion" class="off" id="acc-ntf"/>
<section class="nav-labels horizontal-list hidden-for-options-page"> <nav class="nav-labels horizontal-list hidden-for-options-page">
<ul> <ul>
<li><label for="acc-pac" class="nav-label">PAC-скрипт</label></li> <li><label for="acc-pac" class="nav-label">PAC-скрипт</label></li>
<li><label for="acc-mods" class="nav-label">Модификаторы</label></li> <li><label for="acc-mods" class="nav-label">Модификаторы</label></li>
@ -358,12 +389,13 @@
<li><label for="acc-ntf" class="nav-label">Уведомления</label></li> <li><label for="acc-ntf" class="nav-label">Уведомления</label></li>
</ul> </ul>
<hr/> <hr/>
</section> </nav>
<nav class="hor-padded main-nav"> <nav class="hor-padded main-nav">
<section data-for="acc-pac"> <section data-for="acc-pac">
<header class="only-for-options-page">PAC-скрипт:</header>
<ul id="list-of-providers"> <ul id="list-of-providers">
<li><input type="radio" name="pacProvider" id="none" checked> <label for="none">Отключить</label></li> <li><input type="radio" name="pacProvider" id="none" checked> <label for="none">Отключить</label></li>
</ul> </ul>
@ -394,7 +426,7 @@
<section data-for="acc-mods"> <section data-for="acc-mods">
<ul id="pac-mods"> <ul id="pac-mods">
<li class="control-row"> <li class="control-row hor-flex">
<input type="button" value="Применить" id="apply-mods" disabled/> <input type="button" value="Применить" id="apply-mods" disabled/>
<a href id="reset-mods" class="link-button">К изначальным!</a> <a href id="reset-mods" class="link-button">К изначальным!</a>
</li> </li>
@ -403,9 +435,8 @@
</section> </section>
<section data-for="acc-ntf"> <section data-for="acc-ntf">
<header>Я ❤️ yведомления:</header> <header>Я ❤️ yведомления:</header>
<ul id="list-of-handlers" style="margin-left: 0.4em; margin-top: 0.4em;"></ul> <ul id="list-of-handlers"></ul>
</section> </section>
@ -414,9 +445,13 @@
<hr/> <hr/>
<div class="hor-padded"> <div class="hor-padded">
<section class="hor-flex" id="status-row">
<div id="status" style="will-change: contents">Загрузка...</div> <div id="status" style="will-change: contents">Загрузка...</div>
<a class="only-for-mini-version other-version link-button" title="Полная версия" href="https://rebrand.ly/ac-versions">🏋&#xFE0E;</a>
<a class="only-for-full-version other-version link-button" title="Версия для слабых машин" href="https://rebrand.ly/ac-versions">🐌&#xFE0E;</a>
</section>
<footer class="control-row"> <footer class="control-row hor-flex">
<input type="button" value="Готово" class="close-button"> <input type="button" value="Готово" class="close-button">
<a href="../troubleshoot/index.html" class="link-button"> <a href="../troubleshoot/index.html" class="link-button">
Проблемы? Проблемы?

View File

@ -17,7 +17,7 @@ chrome.runtime.getBackgroundPage( (backgroundPage) =>
const setStatusTo = (msg) => { const setStatusTo = (msg) => {
getStatus().innerHTML = msg || 'Хорошего настроения вам!'; getStatus().innerHTML = msg || 'Поддержи <a href="https://2018.navalny.com" class="link-button">Навального</a> и <a href="https://fbk.info" class="link-button">ФБК</a>!';
}; };
@ -226,6 +226,12 @@ chrome.runtime.getBackgroundPage( (backgroundPage) =>
}; };
} }
// IF MINI
if (backgroundPage.apis.version.ifMini) {
document.documentElement.classList.add('if-version-mini');
}
// IF INSIDE OPTIONS TAB // IF INSIDE OPTIONS TAB
const currentTab = await new Promise( const currentTab = await new Promise(

View File

@ -4,7 +4,7 @@
"name": "__MSG_extName__", "name": "__MSG_extName__",
"default_locale": "ru", "default_locale": "ru",
"description": "__MSG_extDesc__", "description": "__MSG_extDesc__",
"version": "0.0.${ctx.version}", "version": "0.0.${version}",
"icons": { "icons": {
"128": "/icons/default-128.png" "128": "/icons/default-128.png"
}, },
@ -36,7 +36,7 @@
] ]
}, },
"browser_action": { "browser_action": {
"default_title": "Этот сайт благословлён ${ctx.version}", "default_title": "Этот сайт одобрен РПЦ | Версия ${version}",
"default_popup": "/pages/choose-pac-provider/index.html" "default_popup": "/pages/choose-pac-provider/index.html"
}, },
"options_ui": { "options_ui": {

View File

@ -2,6 +2,7 @@
{ {
window.apis.version.ifMini = true;
chrome.browserAction.setBadgeText({text: 'M'}); chrome.browserAction.setBadgeText({text: 'M'});
} }

View File

@ -4,7 +4,7 @@
"name": "__MSG_extName__", "name": "__MSG_extName__",
"default_locale": "ru", "default_locale": "ru",
"description": "__MSG_extDesc__", "description": "__MSG_extDesc__",
"version": "0.0.${ctx.version}", "version": "0.0.${version}",
"icons": { "icons": {
"128": "/icons/default-128.png" "128": "/icons/default-128.png"
}, },
@ -35,7 +35,7 @@
] ]
}, },
"browser_action": { "browser_action": {
"default_title": "Этот сайт благословлён ${ctx.version}-mini", "default_title": "Этот сайт одобрен РПЦ | Версия ${version}-mini",
"default_popup": "/pages/choose-pac-provider/index.html" "default_popup": "/pages/choose-pac-provider/index.html"
}, },
"options_ui": { "options_ui": {