Add import-export via copy-paste

This commit is contained in:
Ilya Ig. Petrov 2017-03-17 17:29:23 +00:00
parent 89e92c28d2
commit 5d715ce693
3 changed files with 102 additions and 16 deletions

View File

@ -2,7 +2,7 @@
<html style="display: none; will-change: contents, display">
<head>
<meta charset="utf-8">
<title>Выбор провайдера PAC</title>
<title>Настройки</title>
<style>
:root {
--ribbon-color: #4169e1;
@ -316,13 +316,22 @@
}
/* TAB_3 EXCEPTIONS */
#exc-address-container {
display: flex;
align-items: center;
width: 100%;
}
#exc-address-container > a {
border-bottom: 1px solid transparent;
margin-left: 0.2em;
}
#exc-address {
width: 100%;
display: flex;
align-items: baseline;
width: 100%;
--exc-hieght: 1.6em;
border-bottom: 1px solid var(--ribbon-color) !important;
font-size: 1em;
border-bottom: 1px solid var(--ribbon-color) !important;
}
input#exc-editor {
border: none;
@ -454,9 +463,15 @@
</section>
<section data-for="acc-exc" class="hidden-for-options-page">
<div>Проксировать указанный сайт?
<div>Проксировать указанный сайт?</div>
<div id="exc-address-container">
<div id="exc-address">
<span>*.</span><input placeholder="navalny.com" list="exc-list" name="browser" id="exc-editor" style=""/><a href="../exceptions/index.html"></a></div>
<span>*.</span><input placeholder="navalny.com" list="exc-list" name="browser" id="exc-editor" style=""/>
</div>
<a href="../exceptions/index.html" title="импорт-экспорт"><svg
class="icon"
><use xlink:href="#icon-import-export"></use></svg>
</a>
</div>
<datalist id="exc-list"></datalist>
<ol class="horizontal-list" id="exc-radio">
@ -519,6 +534,19 @@
<path d="M27.802 5.197c-2.925-3.194-7.13-5.197-11.803-5.197-8.837 0-16 7.163-16 16h3c0-7.18 5.82-13 13-13 3.844 0 7.298 1.669 9.678 4.322l-4.678 4.678h11v-11l-4.198 4.197z"/>
<path d="M29 16c0 7.18-5.82 13-13 13-3.844 0-7.298-1.669-9.678-4.322l4.678-4.678h-11v11l4.197-4.197c2.925 3.194 7.13 5.197 11.803 5.197 8.837 0 16-7.163 16-16h-3z"/>
</symbol>
<symbol id="icon-import-export" viewBox="0 0 32 32">
<title>import-export</title>
<g transform="rotate(0 16 16)">
<path d="M7 22 h 25 v 4 h -25 v 5 l -7-7 7-7 v5 z"/>
<path d="M25 10 h-25 v-4 h 25 v -5 l 7 7 -7 7 z"/>
</g>
<!-- With bars on peaks.
<path d="M30 0h2v16h-2v-16z"></path>
<path d="M0 16h2v16h-2v-16z"></path>
<path d="M10 22 h 22 v 4 h -22 v 5 l -7-7 7-7 v5 z"></path>
<path d="M22 10 h-22 v-4 h 22 v -5 l 7 7 -7 7 z"></path-->
</symbol>
</svg>
</body>
</html>

View File

@ -1,9 +1,19 @@
<!DOCTYPE html>
<html>
<!DOCTYPE html>
<html style="display: none; will-change: contents, display">
<head>
<meta charset="utf-8">
<title>Исключения</title>
<title>Импорт-экспорт исключений</title>
<style>
@font-face {
font-family: "emoji";
src:url("../lib/fonts/emoji.woff") format("woff");
font-weight: normal;
font-style: normal;
}
.emoji {
font-family: "emoji";
}
html, body {
width: 100%;
height: 100%;
@ -15,7 +25,6 @@
flex-direction: column;
}
textarea {
display: block;
border-width: 1px 0 0 0;
padding: 1em;
height: 100%;
@ -24,12 +33,16 @@
nav {
padding: 0.2em;
}
#status {
padding-left: 1em;
}
</style>
</head>
<body>
<nav>
<button>Сохранить в памяти</button>
<button>Считать из памяти</button>
<button id="load">Загрузить <span class="emoji"></span></button>
<button id="save">Сохранить <span class="emoji"></span></button>
<span id="status"></span>
</nav>
<textarea id="editor"></textarea>
<script src="./index.js"></script>

View File

@ -5,20 +5,65 @@ chrome.runtime.getBackgroundPage( (backgroundPage) =>
window, 'EXC', () => {
const editor = document.getElementById('editor');
const loadBtn = document.getElementById('load');
const saveBtn = document.getElementById('save');
const status = document.getElementById('status');
loadBtn.onclick = function() {
const mods = backgroundPage.apis.pacKitchen.getPacMods();
editor.innerText = `# Комментарии начинаются с # и действуют до конца строки.
editor.value = `# Комментарии начинаются с # и действуют до конца строки.
# Комментарии НЕ сохраняются!
# Сначала идёт список проксируемых сайтов,
# затем ---- на отдельной строке,
# затем ==== на отдельной строке,
# затем исключённые сайты.
# ПРОКСИРОВАТЬ:
${mods.included.join('\n')}
-----------------------------
===============================
# НЕ ПРОКСИРОВАТЬ:
${mods.excluded.join('\n')}`;
status.innerText = 'Успешно загружено!';
};
loadBtn.click();
saveBtn.onclick = function() {
let [proxyList, dontProxyList] = editor.value
.trim()
.replace(/#.*/g, '')
.split(/=+/g)
.map( (listStr) => listStr
.trim()
.split(/(?:\s*\r?\n\s*)+/g)
.filter((host) => host)
)
dontProxyList = dontProxyList || [];
const exceptions = {};
proxyList.forEach((host) => (exceptions[host] = true));
dontProxyList.forEach((host) => (exceptions[host] = false));
const mods = backgroundPage.apis.pacKitchen.getPacMods();
mods.exceptions = exceptions;
backgroundPage.apis.pacKitchen.keepCookedNowAsync(mods, (err) => {
if (!err) {
status.innerText = 'Успешно сохранено!';
loadBtn.click();
} else {
status.innerText = '<em>ОШИБКА:</em>' + err;
}
});
};
editor.oninput = () => (status.innerText = 'Вы держитесь там!');
document.documentElement.style.display = 'initial';
})
);