Skip to content

Commit d952992

Browse files
committed
Improvements: improved UI design, sync by domain
1 parent fd0e240 commit d952992

File tree

3 files changed

+98
-81
lines changed

3 files changed

+98
-81
lines changed

Source/Android/config.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
xmlns:android="http://schemas.android.com/apk/res/android"
44
xmlns:cdv="http://cordova.apache.org/ns/1.0"
55
id = "com.r57zone.easynotes"
6-
versionCode = "18"
7-
version = "1.0.3" >
6+
versionCode = "19"
7+
version = "1.0.4" >
88

99
<!-- versionCode is optional and Android only -->
1010
<name>EasyNotes</name>

Source/Android/index.html

Lines changed: 65 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -139,38 +139,39 @@
139139
@media all and (min-width:550px) {
140140
#list{display:block; float:left; width:37%;}
141141
#list #items{border-right:1px solid var(--list-right-border-color);}
142+
#sub-panel{background-color:var(--background-color);}
142143
#editor{display:block; float:right; width:63%;}
143144
#settings{float:right; width:63%;}
144145
.hide-btn img{opacity:0; cursor:default;}
145146
}
146147
</style>
147148
<script type="text/javascript" src="cordova.js"></script>
148149
<script type="text/javascript">
149-
var FirstRun = false;
150-
var DeviceID;
151-
var TabletMode = false;
150+
let FirstRun = false;
151+
let DeviceID;
152+
let TabletMode = false;
152153

153-
var NotesDB;
154-
var ActionsDB;
154+
let NotesDB;
155+
let ActionsDB;
155156

156-
var CurNoteID = -1; // По умолчанию новая заметка
157-
var LatestNote;
158-
var CurNoteDateTime;
157+
let CurNoteID = -1; // По умолчанию новая заметка
158+
let LatestNote;
159+
let CurNoteDateTime;
159160

160-
var SyncWait = false;
161+
let SyncWait = false;
161162

162-
var UpdateDateTime = true;
163+
let UpdateDateTime = true;
163164

164-
var HideFirstNotifyError = true; // На замену navigator.onLine (постоянно стала возвращать true на Android), для iOS ставим true
165+
let HideFirstNotifyError = true; // На замену navigator.onLine (постоянно стала возвращать true на Android), для iOS ставим true
165166

166-
var UsedDarkTheme = false; // Для QR (проблемы с CSS)
167+
let UsedDarkTheme = false; // Для QR (проблемы с CSS)
167168

168169
// Настройки для Android
169-
var ServerIP;
170-
var ServerPort;
171-
var AutoSearchIP = false;
170+
let ServerAddress;
171+
let ServerPort;
172+
let AutoSearchIP = false;
172173

173-
var FlashLightEnable = false;
174+
let FlashLightEnable = false;
174175

175176
// Перевод, по умолчанию English
176177
let IDS_MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
@@ -183,10 +184,10 @@
183184

184185
// Настройки для Android
185186
let IDS_SETTINGS = 'Settings';
186-
let IDS_SYNC_IP = 'IP address';
187+
let IDS_SYNC_ADDRESS = 'IP or domain';
187188
let IDS_SYNC_PORT = 'Port';
188189
let IDS_AUTOSEARCH_IP = 'Autosearch IP address';
189-
let IDS_ABOUT_SYNC = 'IP address and port to sync notes with your PC.';
190+
let IDS_ABOUT_SYNC = 'IP and port or domain to sync notes with your PC or web server.';
190191
let IDS_AUTO_SYNC = 'Sync at startup';
191192
let IDS_ABOUT_AUTO_SYNC = 'Automatically sync on app launch.';
192193

@@ -219,10 +220,10 @@
219220

220221
// Настройки для Android
221222
IDS_SETTINGS = 'Настройки';
222-
IDS_SYNC_IP = 'IP адрес';
223+
IDS_SYNC_ADDRESS = 'IP или домен';
223224
IDS_SYNC_PORT = 'Порт';
224225
IDS_AUTOSEARCH_IP = 'Автопоиск IP адреса';
225-
IDS_ABOUT_SYNC = 'IP адрес и порт для синхронизации заметок с вашим ПК.';
226+
IDS_ABOUT_SYNC = 'IP адрес и порт или домен для синхронизации заметок, с вашим ПК или веб-сервером.';
226227
IDS_AUTO_SYNC = 'Синхронизация при запуске';
227228
IDS_ABOUT_AUTO_SYNC = 'Автоматическая синхронизация при запуске приложения.';
228229

@@ -460,12 +461,23 @@
460461
UsedDarkTheme = true;
461462
}
462463

464+
function IsDomain(Str){
465+
Str = Str.toLowerCase();
466+
if (Str.indexOf('http://') == 0 || Str.indexOf('https://') == 0)
467+
return true;
468+
else
469+
return false;
470+
}
471+
463472
function SettingsDone()
464473
{
465474
// IP
466-
let NewIP = document.getElementById('ServerIP').value;
467-
localStorage.setItem('ServerIP', NewIP);
468-
ServerIP = NewIP;
475+
let NewAddress = document.getElementById('ServerAddress').value;
476+
localStorage.setItem('ServerAddress', NewAddress);
477+
if (IsDomain(NewAddress))
478+
ServerAddress = NewAddress;
479+
else
480+
ServerAddress = 'http://' + NewAddress;
469481

470482
// Port
471483
let NewPort = document.getElementById('ServerPort').value;
@@ -714,7 +726,7 @@
714726
DeviceOS = 'Android';
715727
else if (/iPhone|iPod|iPad/i.test(window.navigator.userAgent))
716728
DeviceOS = 'iOS';
717-
if (/Edg/.test(navigator.userAgent))
729+
else if (/Edg/.test(navigator.userAgent))
718730
DeviceOS = 'Windows';
719731

720732
return DeviceOS + '_' + Math.random().toString(36).substr(2, 9);
@@ -753,14 +765,14 @@
753765
// Первый запуск
754766
if (FirstRun) {
755767
//console.log('FirstRun');
756-
GetData('http://' + ServerIP + ':' + ServerPort + '/api/auth?id=' + DeviceID).then(function(responseText) {
768+
GetData(ServerAddress + ':' + ServerPort + '/api/auth?id=' + DeviceID).then(function(responseText) {
757769
if (responseText == 'auth:ok') {
758770
//console.log('auth:ok');
759771

760772
// Получение всех заметок при первом запуске
761773
let XMLDoc = document.createElement('div');
762774

763-
GetData('http://' + ServerIP + ':' + ServerPort + '/api/notes?id=' + DeviceID).then(function(responseNotes) {
775+
GetData(ServerAddress + ':' + ServerPort + '/api/notes?id=' + DeviceID).then(function(responseNotes) {
764776
XMLDoc.innerHTML = responseNotes;
765777

766778
let NoteItems = XMLDoc.getElementsByTagName('note');
@@ -801,11 +813,11 @@
801813
} else { // Второй и последующие запуски
802814
// Получение действий
803815
let XMLDoc = document.createElement('div');
804-
GetData('http://' + ServerIP + ':' + ServerPort + '/api/actions?id=' + DeviceID).then(function(responseNotes) {
816+
GetData(ServerAddress + ':' + ServerPort + '/api/actions?id=' + DeviceID).then(function(responseNotes) {
805817
XMLDoc.innerHTML = responseNotes;
806818

807819
// Удаляем действия
808-
GetData('http://' + ServerIP + ':' + ServerPort + '/api/received?id=' + DeviceID).then(function(responseStatus) {
820+
GetData(ServerAddress + ':' + ServerPort + '/api/received?id=' + DeviceID).then(function(responseStatus) {
809821

810822
if (responseStatus == 'ok') {
811823
let ActionsItems = XMLDoc.getElementsByTagName('*');
@@ -855,7 +867,7 @@
855867

856868
// Генерирация XML действий пользователя и отправка на "сервер"
857869
if (FirstRun == false) // При первом запуске отправлять нечего
858-
GetData('http://' + ServerIP + ':' + ServerPort + '/api/auth?id=' + DeviceID).then(function(responseText) { // Проверка авторизации
870+
GetData(ServerAddress + ':' + ServerPort + '/api/auth?id=' + DeviceID).then(function(responseText) { // Проверка авторизации
859871
if (responseText == 'auth:ok') {
860872
ActionsDB.transaction(function (tx) {
861873
tx.executeSql('SELECT * FROM Actions', [], function (tx, results) {
@@ -871,7 +883,7 @@
871883
XMLAPI += '</actions>';
872884

873885
// Отправка XML на "сервер"
874-
SendData('http://' + ServerIP + ':' + ServerPort + '/api/syncnotes?id=' + DeviceID, XMLAPI).then(function(responseStatus) {
886+
SendData(ServerAddress + ':' + ServerPort + '/api/syncnotes?id=' + DeviceID, XMLAPI).then(function(responseStatus) {
875887

876888
if (responseStatus == 'ok') {
877889
ActionsDB.transaction(function (tx) {
@@ -918,29 +930,23 @@
918930
function CheckIPStatus(IP){
919931
if (FoundIPAddress) return;
920932
//console.log('Check ' + IP);
921-
try {
922-
let xhr = new XMLHttpRequest();
923-
xhr.onreadystatechange = function () {
924-
if (xhr.readyState == 4 && xhr.status == 200 && xhr.responseText == 'ok') {
925-
ServerIP = IP;
926-
Sync();
927-
FoundIPAddress = true;
928-
//console.log('WORK ' + ServerIP);
929-
}
930-
};
931-
xhr.open('GET', 'http://' + IP + ':' + ServerPort + '/api/connecttest', true);
932-
xhr.timeout = 500;
933-
xhr.send();
934-
} catch {}
933+
GetData('http://' + IP + ':' + ServerPort + '/api/connecttest').then(function(responseText) { // Проверка IP адреса
934+
if (responseText == 'ok') {
935+
ServerAddress = 'http://' + IP;
936+
FoundIPAddress = true;
937+
Sync();
938+
}
939+
}).catch(function() {
940+
});
935941
}
936942

937943
// Список наиболее популярных локальных IP адресов
938-
let IPS = ["192.168.0.", "192.168.0.", "192.168.1.", "192.168.1.", "192.168.2.", "192.168.3."];
939-
let LastAddrs = [ 0, 100, 0, 100, 0, 0]; //Начальный адрес
944+
let IPs = ['192.168.0.', '192.168.0.', '192.168.1.', '192.168.1.', '192.168.2.', '192.168.3.'];
945+
let LastAddrs = [ 0, 100, 0, 100, 0, 0]; // Начальный адрес
940946

941-
for (let i = 0; i < IPS.length; i++)
947+
for (let i = 0; i < IPs.length; i++)
942948
for (let j = 0; j <= 15; j++)
943-
CheckIPStatus(IPS[i] + (LastAddrs[i] + j));
949+
CheckIPStatus(IPs[i] + (LastAddrs[i] + j));
944950
}
945951

946952
function SyncAdvance(){
@@ -975,7 +981,7 @@
975981
document.getElementById('NotesCount').innerHTML = IDS_NOTES + ' (0)';
976982
document.getElementById('NoteTitle').innerHTML = IDS_NEW_NOTE;
977983
document.getElementById('SettingsTitle').innerText = IDS_SETTINGS;
978-
document.getElementById('SyncIP').innerText = IDS_SYNC_IP;
984+
document.getElementById('SyncAddress').innerText = IDS_SYNC_ADDRESS;
979985
document.getElementById('SyncPort').innerText = IDS_SYNC_PORT;
980986
document.getElementById('AutoSearchIP').innerText = IDS_AUTOSEARCH_IP;
981987
document.getElementById('AboutSync').innerText = IDS_ABOUT_SYNC;
@@ -1019,9 +1025,11 @@
10191025
ShowNotes();
10201026

10211027
// Настройки, IP
1022-
if (localStorage.getItem('ServerIP') != null) {
1023-
ServerIP = localStorage.getItem('ServerIP');
1024-
document.getElementById('ServerIP').value = ServerIP;
1028+
if (localStorage.getItem('ServerAddress') != null) {
1029+
ServerAddress = localStorage.getItem('ServerAddress');
1030+
document.getElementById('ServerAddress').value = ServerAddress;
1031+
if (IsDomain(ServerAddress) == false)
1032+
ServerAddress = 'http://' + ServerAddress;
10251033
} else
10261034
ShowSettings();
10271035

@@ -1038,7 +1046,7 @@
10381046
}
10391047

10401048
// Первый запуск
1041-
if (localStorage.getItem('FirstRun') === null)
1049+
if (localStorage.getItem('FirstRun') == null)
10421050
FirstRun = true;
10431051
else
10441052
FirstRun = false;
@@ -1058,7 +1066,7 @@
10581066
if (window.navigator.onLine)
10591067
SyncAdvance();
10601068
} else
1061-
HideFirstNotifyError = false; //Android, неработающая navigator.onLine
1069+
HideFirstNotifyError = false; // Android, неработающая navigator.onLine
10621070

10631071
});
10641072
</script>
@@ -1112,8 +1120,8 @@
11121120
<div id="page">
11131121
<div id="items">
11141122
<div id="item">
1115-
<div class="title" id="SyncIP">IP адрес</div>
1116-
<div id="control"><input type="text" id="ServerIP" value="192.168.0.1" placeholder="192.168.0.1"></div>
1123+
<div class="title" id="SyncAddress">IP или домен</div>
1124+
<div id="control"><input type="text" id="ServerAddress" oninput="if (IsDomain(this.value)) document.getElementById('ServerPort').value='80';" value="192.168.0.1" placeholder="192.168.0.1"></div>
11171125
</div>
11181126
<div id="item">
11191127
<div class="title" id="SyncPort">Порт</div>
@@ -1160,7 +1168,7 @@
11601168

11611169
<div id="AboutThemeTime" class="titlebox"></div>
11621170

1163-
<div class="titlebox" style="text-align:center;"><br>EasyNotes<br><span id="LastUpdate"></span> 23.11.21<br>https://r57zone.github.io<br><br><span id="DeviceID"></span></div>
1171+
<div class="titlebox" style="text-align:center;"><br>EasyNotes<br><span id="LastUpdate"></span> 06.09.22<br>https://r57zone.github.io<br><br><span id="DeviceID"></span></div>
11641172
<br>
11651173
<div id="items">
11661174
<div id="item">

0 commit comments

Comments
 (0)