Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
759ff46c92 | ||
|
|
41957cdceb | ||
|
|
d418e3a1c9 | ||
|
|
f650124428 | ||
|
|
795d109c76 | ||
|
|
6868b3effc | ||
|
|
26747b7013 | ||
|
|
5198f8aa60 |
@@ -3,6 +3,7 @@
|
|||||||
<h4>Возможности читалки:</h4>
|
<h4>Возможности читалки:</h4>
|
||||||
<ul>
|
<ul>
|
||||||
<li>загрузка любой страницы интернета</li>
|
<li>загрузка любой страницы интернета</li>
|
||||||
|
<li>работа в автономном режиме (без связи)</li>
|
||||||
<li>изменение цвета фона, текста, размер и тип шрифта и прочее</li>
|
<li>изменение цвета фона, текста, размер и тип шрифта и прочее</li>
|
||||||
<li>установка и запоминание текущей позиции и настроек в браузере и на сервере</li>
|
<li>установка и запоминание текущей позиции и настроек в браузере и на сервере</li>
|
||||||
<li>синхронизация данных (настроек и читаемых книг) между различными устройствами</li>
|
<li>синхронизация данных (настроек и читаемых книг) между различными устройствами</li>
|
||||||
@@ -13,7 +14,6 @@
|
|||||||
<li>поиск по тексту и копирование фрагмента</li>
|
<li>поиск по тексту и копирование фрагмента</li>
|
||||||
<li>запоминание недавних книг, скачивание книги из читалки в формате fb2</li>
|
<li>запоминание недавних книг, скачивание книги из читалки в формате fb2</li>
|
||||||
<li>управление кликом и с клавиатуры</li>
|
<li>управление кликом и с клавиатуры</li>
|
||||||
<li>подключение к интернету не обязательно для чтения книги после ее загрузки</li>
|
|
||||||
<li>регистрация не требуется</li>
|
<li>регистрация не требуется</li>
|
||||||
<li>поддерживаемые браузеры: Google Chrome, Mozilla Firefox последних версий</li>
|
<li>поддерживаемые браузеры: Google Chrome, Mozilla Firefox последних версий</li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -22,18 +22,13 @@
|
|||||||
на файл из онлайн-библиотеки (например, скопировав адрес ссылки или кнопки "скачать fb2").</p>
|
на файл из онлайн-библиотеки (например, скопировав адрес ссылки или кнопки "скачать fb2").</p>
|
||||||
<p>Поддерживаемые форматы: <b>fb2, fb2.zip, html, txt</b> и другие.</p>
|
<p>Поддерживаемые форматы: <b>fb2, fb2.zip, html, txt</b> и другие.</p>
|
||||||
|
|
||||||
<p>Для автономной загрузки читалки (без интернета):<br>
|
|
||||||
В Google Chrome можно установить флаг <span class="clickable" @click="copyText('chrome://flags/#show-saved-copy', 'Ссылка на флаг успешно скопирована в буфер обмена. Можно открыть ее в новой вкладке.')">chrome://flags/#show-saved-copy</span>
|
|
||||||
в значение "Primary". В этом случае на стандартной странице "нет соединения" появится кнопка для автономной загрузки сайта из кэша.<br>
|
|
||||||
В Mozilla Firefox в автономном режиме сайт загружается из кэша автоматически. Если этого не происходит, можно установить опцию
|
|
||||||
"Веб-разработка" -> "Работать автономно".</p>
|
|
||||||
|
|
||||||
<div v-show="mode == 'omnireader'">
|
<div v-show="mode == 'omnireader'">
|
||||||
<p>Вы также можете добавить в свой браузер закладку, указав в ее свойствах вместо адреса следующий код:
|
<p>Вы можете добавить в свой браузер закладку, указав в ее свойствах вместо адреса следующий код:
|
||||||
<br><span class="clickable" @click="copyText('javascript:location.href=\'https://omnireader.ru/?url=\'+location.href;', 'Код для адреса закладки успешно скопирован в буфер обмена')">
|
<br><span class="clickable" @click="copyText('javascript:location.href=\'https://omnireader.ru/?url=\'+location.href;', 'Код для адреса закладки успешно скопирован в буфер обмена')">
|
||||||
<strong>javascript:location.href='https://omnireader.ru/?url='+location.href;</strong>
|
<strong>javascript:location.href='https://omnireader.ru/?url='+location.href;</strong>
|
||||||
</span>
|
</span>
|
||||||
<br>Тогда, нажав на получившуюся кнопку на любой странице интернета, вы автоматически откроете ее в Omni Reader.
|
<br>Тогда, активировав получившуюся закладку на любой странице интернета, вы автоматически откроете ее в Omni Reader.
|
||||||
|
<br>В Chrome для Android можно вызывать такую закладку по имени прямо в адресной строке браузера (имя стоит сделать попроще).
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<p>Связаться с разработчиком: <a href="mailto:bookpauk@gmail.com">bookpauk@gmail.com</a></p>
|
<p>Связаться с разработчиком: <a href="mailto:bookpauk@gmail.com">bookpauk@gmail.com</a></p>
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
<li><b>Ctrl+C</b> - скопировать текст со страницы</li>
|
<li><b>Ctrl+C</b> - скопировать текст со страницы</li>
|
||||||
<li><b>R</b> - принудительно обновить книгу в обход кэша</li>
|
<li><b>R</b> - принудительно обновить книгу в обход кэша</li>
|
||||||
<li><b>X</b> - открыть недавние</li>
|
<li><b>X</b> - открыть недавние</li>
|
||||||
|
<li><b>O</b> - автономный режим</li>
|
||||||
<li><b>S</b> - открыть окно настроек</li>
|
<li><b>S</b> - открыть окно настроек</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -38,6 +38,9 @@
|
|||||||
<el-tooltip v-show="showToolButton['recentBooks']" content="Открыть недавние" :open-delay="1000" effect="light">
|
<el-tooltip v-show="showToolButton['recentBooks']" content="Открыть недавние" :open-delay="1000" effect="light">
|
||||||
<el-button ref="recentBooks" class="tool-button" :class="buttonActiveClass('recentBooks')" @click="buttonClick('recentBooks')"><i class="el-icon-document"></i></el-button>
|
<el-button ref="recentBooks" class="tool-button" :class="buttonActiveClass('recentBooks')" @click="buttonClick('recentBooks')"><i class="el-icon-document"></i></el-button>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
|
<el-tooltip v-show="showToolButton['offlineMode']" content="Автономный режим (без интернета)" :open-delay="1000" effect="light">
|
||||||
|
<el-button ref="offlineMode" class="tool-button" :class="buttonActiveClass('offlineMode')" @click="buttonClick('offlineMode')"><i class="el-icon-connection"></i></el-button>
|
||||||
|
</el-tooltip>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<el-tooltip content="Настроить" :open-delay="1000" effect="light">
|
<el-tooltip content="Настроить" :open-delay="1000" effect="light">
|
||||||
@@ -257,6 +260,7 @@ class Reader extends Vue {
|
|||||||
searchActive = false;
|
searchActive = false;
|
||||||
copyTextActive = false;
|
copyTextActive = false;
|
||||||
recentBooksActive = false;
|
recentBooksActive = false;
|
||||||
|
offlineModeActive = false;
|
||||||
settingsActive = false;
|
settingsActive = false;
|
||||||
helpActive = false;
|
helpActive = false;
|
||||||
clickMapActive = false;
|
clickMapActive = false;
|
||||||
@@ -696,6 +700,11 @@ class Reader extends Vue {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
offlineModeToggle() {
|
||||||
|
this.offlineModeActive = !this.offlineModeActive;
|
||||||
|
this.$refs.serverStorage.offlineModeActive = this.offlineModeActive;
|
||||||
|
}
|
||||||
|
|
||||||
settingsToggle() {
|
settingsToggle() {
|
||||||
this.settingsActive = !this.settingsActive;
|
this.settingsActive = !this.settingsActive;
|
||||||
if (this.settingsActive) {
|
if (this.settingsActive) {
|
||||||
@@ -781,11 +790,14 @@ class Reader extends Vue {
|
|||||||
case 'copyText':
|
case 'copyText':
|
||||||
this.copyTextToggle();
|
this.copyTextToggle();
|
||||||
break;
|
break;
|
||||||
|
case 'refresh':
|
||||||
|
this.refreshBook();
|
||||||
|
break;
|
||||||
case 'recentBooks':
|
case 'recentBooks':
|
||||||
this.recentBooksToggle();
|
this.recentBooksToggle();
|
||||||
break;
|
break;
|
||||||
case 'refresh':
|
case 'offlineMode':
|
||||||
this.refreshBook();
|
this.offlineModeToggle();
|
||||||
break;
|
break;
|
||||||
case 'settings':
|
case 'settings':
|
||||||
this.settingsToggle();
|
this.settingsToggle();
|
||||||
@@ -806,6 +818,7 @@ class Reader extends Vue {
|
|||||||
case 'search':
|
case 'search':
|
||||||
case 'copyText':
|
case 'copyText':
|
||||||
case 'recentBooks':
|
case 'recentBooks':
|
||||||
|
case 'offlineMode':
|
||||||
case 'settings':
|
case 'settings':
|
||||||
if (this[`${button}Active`])
|
if (this[`${button}Active`])
|
||||||
classResult = classActive;
|
classResult = classActive;
|
||||||
@@ -1130,6 +1143,9 @@ class Reader extends Vue {
|
|||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
break;
|
break;
|
||||||
|
case 'KeyO':
|
||||||
|
this.offlineModeToggle();
|
||||||
|
break;
|
||||||
case 'KeyS':
|
case 'KeyS':
|
||||||
this.settingsToggle();
|
this.settingsToggle();
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ class ServerStorage extends Vue {
|
|||||||
if (eventName == 'recent-changed') {
|
if (eventName == 'recent-changed') {
|
||||||
if (itemKey) {
|
if (itemKey) {
|
||||||
if (!this.recentDeltaInited) {
|
if (!this.recentDeltaInited) {
|
||||||
|
await this.loadRecent();
|
||||||
this.warning('Функции сохранения на сервер пока недоступны');
|
this.warning('Функции сохранения на сервер пока недоступны');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -175,12 +176,12 @@ class ServerStorage extends Vue {
|
|||||||
}
|
}
|
||||||
|
|
||||||
warning(message) {
|
warning(message) {
|
||||||
if (this.showServerStorageMessages)
|
if (this.showServerStorageMessages && !this.offlineModeActive)
|
||||||
this.$notify.warning({message});
|
this.$notify.warning({message});
|
||||||
}
|
}
|
||||||
|
|
||||||
error(message) {
|
error(message) {
|
||||||
if (this.showServerStorageMessages)
|
if (this.showServerStorageMessages && !this.offlineModeActive)
|
||||||
this.$notify.error({message});
|
this.$notify.error({message});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -362,9 +363,11 @@ class ServerStorage extends Vue {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async loadRecent(skipRevCheck = false, doNotifySuccess = true) {
|
async loadRecent(skipRevCheck = false, doNotifySuccess = true) {
|
||||||
if (!this.keyInited || !this.serverSyncEnabled)
|
if (!this.keyInited || !this.serverSyncEnabled || this.loadingRecent)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
this.loadingRecent = true;
|
||||||
|
try {
|
||||||
const oldRecentRev = bookManager.recentRev;
|
const oldRecentRev = bookManager.recentRev;
|
||||||
const oldRecentDeltaRev = bookManager.recentDeltaRev;
|
const oldRecentDeltaRev = bookManager.recentDeltaRev;
|
||||||
//проверим ревизию на сервере
|
//проверим ревизию на сервере
|
||||||
@@ -430,6 +433,9 @@ class ServerStorage extends Vue {
|
|||||||
|
|
||||||
if (doNotifySuccess)
|
if (doNotifySuccess)
|
||||||
this.debouncedNotifySuccess();
|
this.debouncedNotifySuccess();
|
||||||
|
} finally {
|
||||||
|
this.loadingRecent = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async saveRecent(itemKey, recurse) {
|
async saveRecent(itemKey, recurse) {
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ export const versionHistory = [
|
|||||||
`
|
`
|
||||||
<ul>
|
<ul>
|
||||||
<li>исправления багов</li>
|
<li>исправления багов</li>
|
||||||
|
<li>на панель управления добавлена кнопка "Автономный режим"</li>
|
||||||
|
<li>актуализирована справка</li>
|
||||||
</ul>
|
</ul>
|
||||||
`
|
`
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ const toolButtons = [
|
|||||||
{name: 'copyText', show: false, text: 'Скопировать текст со страницы'},
|
{name: 'copyText', show: false, text: 'Скопировать текст со страницы'},
|
||||||
{name: 'refresh', show: true, text: 'Принудительно обновить книгу'},
|
{name: 'refresh', show: true, text: 'Принудительно обновить книгу'},
|
||||||
{name: 'recentBooks', show: true, text: 'Открыть недавние'},
|
{name: 'recentBooks', show: true, text: 'Открыть недавние'},
|
||||||
|
{name: 'offlineMode', show: false, text: 'Автономный режим (без интернета)'},
|
||||||
];
|
];
|
||||||
|
|
||||||
const fonts = [
|
const fonts = [
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user