Revert "Draft: simple web server added"
This commit is contained in:
parent
fe36f0e8d4
commit
0310eb92f6
42 changed files with 0 additions and 34937 deletions
|
@ -408,7 +408,6 @@
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</receiver>
|
</receiver>
|
||||||
|
|
||||||
<activity android:name=".activities.ServerActivity" android:label="@string/shared_string_settings" android:configChanges="keyboardHidden|orientation" />
|
|
||||||
<activity android:name="net.osmand.plus.activities.SettingsActivity" android:label="@string/shared_string_settings" android:configChanges="keyboardHidden|orientation" />
|
<activity android:name="net.osmand.plus.activities.SettingsActivity" android:label="@string/shared_string_settings" android:configChanges="keyboardHidden|orientation" />
|
||||||
<activity android:name="net.osmand.plus.activities.SettingsGeneralActivity" android:configChanges="keyboardHidden|orientation" />
|
<activity android:name="net.osmand.plus.activities.SettingsGeneralActivity" android:configChanges="keyboardHidden|orientation" />
|
||||||
<activity android:name="net.osmand.plus.activities.SettingsNavigationActivity" android:configChanges="keyboardHidden|orientation" />
|
<activity android:name="net.osmand.plus.activities.SettingsNavigationActivity" android:configChanges="keyboardHidden|orientation" />
|
||||||
|
|
|
@ -1,110 +0,0 @@
|
||||||
body {
|
|
||||||
margin:0;
|
|
||||||
padding:20px;
|
|
||||||
max-width: 1250px;
|
|
||||||
}
|
|
||||||
|
|
||||||
table {
|
|
||||||
border-collapse: collapse;
|
|
||||||
}
|
|
||||||
|
|
||||||
.send-private-giveaway, .register-giveaway, .access-server-logs, .update-btc-report {
|
|
||||||
margin: 20px 0px;
|
|
||||||
border: 1px solid #e6e6e6;
|
|
||||||
width: 50%;
|
|
||||||
|
|
||||||
}
|
|
||||||
.wrapper {
|
|
||||||
list-style-type: none;
|
|
||||||
padding: 0;
|
|
||||||
border-radius: 3px;
|
|
||||||
|
|
||||||
}
|
|
||||||
.form-row {
|
|
||||||
display: flex;
|
|
||||||
justify-content: flex-start;
|
|
||||||
align-items: flex-start;
|
|
||||||
padding: 5px;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.form-row > label {
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
.form-row > input {
|
|
||||||
flex: 1;
|
|
||||||
width: auto;
|
|
||||||
}
|
|
||||||
.form-row > button {
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
th, td {
|
|
||||||
text-align: left;
|
|
||||||
padding: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
tr:nth-child(even){background-color: #f2f2f2}
|
|
||||||
tr:hover {background-color: #d5d5d5;}
|
|
||||||
|
|
||||||
th {
|
|
||||||
background-color: #4CAF50;
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
.loader,
|
|
||||||
.loader:before,
|
|
||||||
.loader:after {
|
|
||||||
border-radius: 50%;
|
|
||||||
width: 2.5em;
|
|
||||||
height: 2.5em;
|
|
||||||
-webkit-animation-fill-mode: both;
|
|
||||||
animation-fill-mode: both;
|
|
||||||
-webkit-animation: load7 1.8s infinite ease-in-out;
|
|
||||||
animation: load7 1.8s infinite ease-in-out;
|
|
||||||
}
|
|
||||||
.loader {
|
|
||||||
color: #00ffff;
|
|
||||||
font-size: 10px;
|
|
||||||
margin: 25px auto;
|
|
||||||
position: relative;
|
|
||||||
text-indent: -9999em;
|
|
||||||
-webkit-transform: translateZ(0);
|
|
||||||
-ms-transform: translateZ(0);
|
|
||||||
transform: translateZ(0);
|
|
||||||
-webkit-animation-delay: -0.16s;
|
|
||||||
animation-delay: -0.16s;
|
|
||||||
}
|
|
||||||
.loader:before,
|
|
||||||
.loader:after {
|
|
||||||
content: '';
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
}
|
|
||||||
.loader:before {
|
|
||||||
left: -3.5em;
|
|
||||||
-webkit-animation-delay: -0.32s;
|
|
||||||
animation-delay: -0.32s;
|
|
||||||
}
|
|
||||||
.loader:after {
|
|
||||||
left: 3.5em;
|
|
||||||
}
|
|
||||||
@-webkit-keyframes load7 {
|
|
||||||
0%,
|
|
||||||
80%,
|
|
||||||
100% {
|
|
||||||
box-shadow: 0 2.5em 0 -1.3em;
|
|
||||||
}
|
|
||||||
40% {
|
|
||||||
box-shadow: 0 2.5em 0 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@keyframes load7 {
|
|
||||||
0%,
|
|
||||||
80%,
|
|
||||||
100% {
|
|
||||||
box-shadow: 0 2.5em 0 -1.3em;
|
|
||||||
}
|
|
||||||
40% {
|
|
||||||
box-shadow: 0 2.5em 0 0;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,606 +0,0 @@
|
||||||
::-webkit-input-placeholder {color:#000;}
|
|
||||||
::-moz-placeholder {color:#000;}
|
|
||||||
:-moz-placeholder {color:#000;}
|
|
||||||
:-ms-input-placeholder {color:#000;}
|
|
||||||
h2, h3 {
|
|
||||||
font-size: 20px;
|
|
||||||
}
|
|
||||||
.nav-holder {
|
|
||||||
padding: 0 20px;
|
|
||||||
background: #ff8e01;
|
|
||||||
}
|
|
||||||
.navigation {
|
|
||||||
max-width: 1100px;
|
|
||||||
margin: 0 auto;
|
|
||||||
}
|
|
||||||
.navigation li {
|
|
||||||
margin-right: 30px;
|
|
||||||
}
|
|
||||||
.navigation a {
|
|
||||||
display: block;
|
|
||||||
padding: 30px 0;
|
|
||||||
color: rgba(255, 255, 255, 0.5);
|
|
||||||
font-size: 15px;
|
|
||||||
font-weight: bold;
|
|
||||||
text-decoration: none;
|
|
||||||
text-transform: uppercase;
|
|
||||||
border-bottom: 4px solid #ff8e01;
|
|
||||||
outline: none;
|
|
||||||
}
|
|
||||||
.navigation a:hover {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.navigation li {
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
.navigation li.active a,
|
|
||||||
.navigation li.active a:focus,
|
|
||||||
.navigation li.active a:hover {
|
|
||||||
color: #fff;
|
|
||||||
border-bottom: 4px solid #4464ad;
|
|
||||||
}
|
|
||||||
#month-selection {
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
#region-selection {
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
.infobox {
|
|
||||||
font-size: 16px;
|
|
||||||
line-height: 150%;
|
|
||||||
}
|
|
||||||
.infobox h2 {
|
|
||||||
font-size: 33px;
|
|
||||||
}
|
|
||||||
.infobox h3 {
|
|
||||||
margin-top: 35px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
.infobox ul {
|
|
||||||
list-style-type: disc;
|
|
||||||
list-style-position: inside;
|
|
||||||
}
|
|
||||||
.report-period-group {
|
|
||||||
padding: 20px;
|
|
||||||
background: #f2f2f2;
|
|
||||||
}
|
|
||||||
.report-period-group.supporters {
|
|
||||||
float: left;
|
|
||||||
width: 30%;
|
|
||||||
height: 120px;
|
|
||||||
}
|
|
||||||
.supporters-total {
|
|
||||||
float: right;
|
|
||||||
width: 70%;
|
|
||||||
height: 120px;
|
|
||||||
border: 1px solid #ddd;
|
|
||||||
border-left: 0 none;
|
|
||||||
}
|
|
||||||
.supporters-total-holder:after {
|
|
||||||
content: '';
|
|
||||||
display: table;
|
|
||||||
clear: both;
|
|
||||||
float: none;
|
|
||||||
}
|
|
||||||
.report-group {
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
||||||
.report-group.period {
|
|
||||||
width: 100%;
|
|
||||||
max-width: 250px;
|
|
||||||
margin-right: 40px;
|
|
||||||
}
|
|
||||||
.supporters .report-group.period {
|
|
||||||
margin-right: 0;
|
|
||||||
}
|
|
||||||
.report-group.region {
|
|
||||||
width: 100%;
|
|
||||||
max-width: 420px;
|
|
||||||
}
|
|
||||||
.styled-select {
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
height: 42px;
|
|
||||||
overflow: hidden;
|
|
||||||
background: #fff;
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
border-radius: 2px;
|
|
||||||
}
|
|
||||||
.styled-select:before {
|
|
||||||
z-index: 0;
|
|
||||||
content: '';
|
|
||||||
position: absolute;
|
|
||||||
top: 10px;
|
|
||||||
left: 10px;
|
|
||||||
width: 20px;
|
|
||||||
height: 20px;
|
|
||||||
background: url('../images/main-sprite.png') no-repeat;
|
|
||||||
}
|
|
||||||
.styled-select:after {
|
|
||||||
z-index: 0;
|
|
||||||
content: '';
|
|
||||||
position: absolute;
|
|
||||||
top: 12px;
|
|
||||||
right: 10px;
|
|
||||||
width: 20px;
|
|
||||||
height: 20px;
|
|
||||||
background: url('../images/main-sprite.png') no-repeat -200px -80px;
|
|
||||||
}
|
|
||||||
.report-group.period .styled-select:before {
|
|
||||||
background-position: -251px -110px;
|
|
||||||
}
|
|
||||||
.report-group.region .styled-select:before {
|
|
||||||
background-position: -290px -110px;
|
|
||||||
}
|
|
||||||
.report-group.round .styled-select:before {
|
|
||||||
background-position: -290px -110px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.styled-select select {
|
|
||||||
position: relative;
|
|
||||||
z-index: 1;
|
|
||||||
display: block;
|
|
||||||
width: 110%;
|
|
||||||
height: 42px;
|
|
||||||
padding: 10px 45px 10px 35px;
|
|
||||||
border: 0 none;
|
|
||||||
border-radius: 0;
|
|
||||||
background: transparent;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
}
|
|
||||||
select {
|
|
||||||
-webkit-appearance: none;
|
|
||||||
-moz-appearance: none;
|
|
||||||
appearance: none;
|
|
||||||
}
|
|
||||||
select:-moz-focusring {
|
|
||||||
color: transparent;
|
|
||||||
text-shadow: 0 0 0 #000;
|
|
||||||
}
|
|
||||||
.report-total-div {
|
|
||||||
border: 1px solid #e6e6e6;
|
|
||||||
border-top: 0 none;
|
|
||||||
}
|
|
||||||
.overview-body {
|
|
||||||
padding: 15px 15px 0;
|
|
||||||
}
|
|
||||||
.overview-hint {
|
|
||||||
font-weight: bold;
|
|
||||||
margin: 5px 0 20px;
|
|
||||||
}
|
|
||||||
.overview-hint span {
|
|
||||||
color: #484dde;
|
|
||||||
}
|
|
||||||
.overview {
|
|
||||||
position: relative;
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: top;
|
|
||||||
padding-left: 50px;
|
|
||||||
margin-right: 80px;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
.overview:last-child {
|
|
||||||
margin-right: 0;
|
|
||||||
}
|
|
||||||
.overview:before {
|
|
||||||
content: '';
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
width: 40px;
|
|
||||||
height: 40px;
|
|
||||||
background: url('../images/main-sprite.png') no-repeat;
|
|
||||||
}
|
|
||||||
.overview-changes:before {
|
|
||||||
background-position: -0px -280px;
|
|
||||||
}
|
|
||||||
.overview-users:before {
|
|
||||||
background-position: -40px -280px;
|
|
||||||
}
|
|
||||||
.overview-region:before {
|
|
||||||
background-position: -80px -280px;
|
|
||||||
}
|
|
||||||
.overview-active_supporters:before {
|
|
||||||
background-position: -40px -280px;
|
|
||||||
}
|
|
||||||
.overview-register_supporters:before {
|
|
||||||
background-position: -120px -280px;
|
|
||||||
}
|
|
||||||
.overview-btc:before {
|
|
||||||
background-position: -160px -280px;
|
|
||||||
}
|
|
||||||
.overview-total_weight:before {
|
|
||||||
background-position: -200px -280px;
|
|
||||||
}
|
|
||||||
.overview p {
|
|
||||||
margin: 0;
|
|
||||||
margin-bottom: -10px;
|
|
||||||
font-size: 30px;
|
|
||||||
font-weight: bold;
|
|
||||||
line-height: 1.2;
|
|
||||||
}
|
|
||||||
.overview span {
|
|
||||||
color: #999;
|
|
||||||
font-size: 11px;
|
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: 2px;
|
|
||||||
}
|
|
||||||
#report-ranking,
|
|
||||||
#users-ranking,
|
|
||||||
#support-country-table-header,
|
|
||||||
#support-table-header,
|
|
||||||
#recipients-table-header {
|
|
||||||
margin-top: 50px;
|
|
||||||
font-size: 20px;
|
|
||||||
}
|
|
||||||
#report-ranking span {
|
|
||||||
display: block;
|
|
||||||
font-size: 13px;
|
|
||||||
font-weight: normal;
|
|
||||||
color: #999;
|
|
||||||
text-transform: uppercase;
|
|
||||||
}
|
|
||||||
.table {
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
.table thead span {
|
|
||||||
display: block;
|
|
||||||
color: #999;
|
|
||||||
font-size: 11px;
|
|
||||||
text-transform: uppercase;
|
|
||||||
}
|
|
||||||
.table tbody tr td {
|
|
||||||
padding: 12px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
.table-bordered > thead > tr > td,
|
|
||||||
.table-bordered > thead > tr > th {
|
|
||||||
vertical-align: middle;
|
|
||||||
border-bottom-color: #ff8f00;
|
|
||||||
font-weight: normal;
|
|
||||||
}
|
|
||||||
.table-controls.hidden {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.table-controls {
|
|
||||||
position: relative;
|
|
||||||
padding-right: 185px;
|
|
||||||
}
|
|
||||||
.tc.search {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
.tc.search:before {
|
|
||||||
content: '';
|
|
||||||
position: absolute;
|
|
||||||
top: 10px;
|
|
||||||
left: 12px;
|
|
||||||
width: 20px;
|
|
||||||
height: 20px;
|
|
||||||
background: url('../images/main-sprite.png') no-repeat -300px -80px;
|
|
||||||
}
|
|
||||||
.tc.search input {
|
|
||||||
max-width: 350px;
|
|
||||||
height: 42px;
|
|
||||||
padding-left: 40px;
|
|
||||||
border-radius: 2px;
|
|
||||||
}
|
|
||||||
.tc.entries {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
right: 0;
|
|
||||||
width: 100%;
|
|
||||||
max-width: 180px;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
.tc.entries .styled-select {
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: middle;
|
|
||||||
width: 80px;
|
|
||||||
}
|
|
||||||
.tc.entries .styled-select:before {
|
|
||||||
content: none;
|
|
||||||
}
|
|
||||||
.tc.entries label {
|
|
||||||
display: block;
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
.tc.entries select {
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: middle;
|
|
||||||
width: 125%;
|
|
||||||
padding: 10px 0 10px 10px;
|
|
||||||
}
|
|
||||||
.sorting_desc,
|
|
||||||
.sorting_asc,
|
|
||||||
.sorting {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
.sorting_desc:after,
|
|
||||||
.sorting_asc:after {
|
|
||||||
content: '' !important;
|
|
||||||
position: absolute;
|
|
||||||
top: 50%;
|
|
||||||
right: 0;
|
|
||||||
width: 20px;
|
|
||||||
height: 20px;
|
|
||||||
background: url('../images/main-sprite.png') no-repeat;
|
|
||||||
transform: translate(0, -50%);
|
|
||||||
}
|
|
||||||
.sorting_asc:after {
|
|
||||||
background-position: -160px -140px;
|
|
||||||
}
|
|
||||||
.sorting_desc:after {
|
|
||||||
background-position: -200px -140px;
|
|
||||||
}
|
|
||||||
.sorting:after {
|
|
||||||
content: '' !important;
|
|
||||||
position: absolute;
|
|
||||||
top: 50%;
|
|
||||||
right: 0;
|
|
||||||
width: 20px;
|
|
||||||
height: 20px;
|
|
||||||
background: url('../images/main-sprite.png') no-repeat -180px -140px;
|
|
||||||
transform: translate(0, -50%);
|
|
||||||
}
|
|
||||||
.pagination > .active > a,
|
|
||||||
.pagination > .active > a:focus,
|
|
||||||
.pagination > .active > a:hover,
|
|
||||||
.pagination > .active > span,
|
|
||||||
.pagination > .active > span:focus,
|
|
||||||
.pagination > .active > span:hover {
|
|
||||||
background-color: #ff8f00;
|
|
||||||
border-color: #ff8f00;
|
|
||||||
}
|
|
||||||
.pagination > li > a,
|
|
||||||
.pagination > li > span {
|
|
||||||
color: #000;
|
|
||||||
}
|
|
||||||
.pagination > li > a:hover,
|
|
||||||
.pagination > li > span:hover {
|
|
||||||
background-color: rgba(255, 143, 0, 0.5);
|
|
||||||
border-color: #ff8f00;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.registration {
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: top;
|
|
||||||
width: 49%;
|
|
||||||
min-height: 420px;
|
|
||||||
padding: 20px;
|
|
||||||
margin-top: 20px;
|
|
||||||
margin-right: 1%;
|
|
||||||
background: #f2f2f2;
|
|
||||||
}
|
|
||||||
.registration.contributor-registration {
|
|
||||||
margin-right: 0;
|
|
||||||
}
|
|
||||||
.registration h4 {
|
|
||||||
margin-top: 0;
|
|
||||||
font-size: 20px;
|
|
||||||
}
|
|
||||||
.recipient-registration label {
|
|
||||||
margin-top: 10px;
|
|
||||||
font-size: 14px;
|
|
||||||
font-weight: normal;
|
|
||||||
}
|
|
||||||
.recipient-registration .form-control {
|
|
||||||
margin: 0;
|
|
||||||
border-radius: 2px;
|
|
||||||
height: 42px;
|
|
||||||
padding-left: 40px;
|
|
||||||
}
|
|
||||||
.recipient-registration .input-holder {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
#agree_osm_live {
|
|
||||||
margin-left: 5px;
|
|
||||||
margin-top: 3px;
|
|
||||||
}
|
|
||||||
.agree_osm_live_label {
|
|
||||||
position: relative;
|
|
||||||
cursor: pointer;
|
|
||||||
font-size: 14px;
|
|
||||||
margin-left: 7px;
|
|
||||||
margin-bottom: 15px;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-moz-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.recipient-registration .input-holder:before {
|
|
||||||
content: '';
|
|
||||||
position: absolute;
|
|
||||||
top: 10px;
|
|
||||||
left: 12px;
|
|
||||||
width: 20px;
|
|
||||||
height: 20px;
|
|
||||||
background: url('../images/main-sprite.png') no-repeat;
|
|
||||||
}
|
|
||||||
.recipient-registration .input-holder.input-user:before {
|
|
||||||
background-position: -180px -80px;
|
|
||||||
}
|
|
||||||
.recipient-registration .input-holder.input-pass:before {
|
|
||||||
height: 21px;
|
|
||||||
background-position: -172px -109px;
|
|
||||||
}
|
|
||||||
.recipient-registration .input-holder.input-bitcoin:before {
|
|
||||||
background-position: -210px -110px;
|
|
||||||
}
|
|
||||||
.recipient-registration .input-hint {
|
|
||||||
color: #999;
|
|
||||||
line-height: 1.4;
|
|
||||||
}
|
|
||||||
.recipient-registration .btn,
|
|
||||||
.recipient-registration .btn:active {
|
|
||||||
background: #575bde;
|
|
||||||
border: 1px solid #3d42bf;
|
|
||||||
color: #fff;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
.registration-badges img {
|
|
||||||
border: none;
|
|
||||||
height: 45px;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
.contributor-registration p {
|
|
||||||
font-size: 14px;
|
|
||||||
line-height: 1.4;
|
|
||||||
}
|
|
||||||
.contributor-registration .btc-address {
|
|
||||||
padding: 15px 10px;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
background: #ff8f00;
|
|
||||||
border-radius: 2px;
|
|
||||||
color: #fff;
|
|
||||||
font-size: 14px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
#recipients-info-div {
|
|
||||||
margin-top: 20px;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
.maincontainer {
|
|
||||||
background-color: white;
|
|
||||||
}
|
|
||||||
.full-width-banner {
|
|
||||||
width: 100%;
|
|
||||||
margin: 20px auto;
|
|
||||||
}
|
|
||||||
.full-width-banner img {
|
|
||||||
display: block;
|
|
||||||
max-width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.vlabel {
|
|
||||||
font-size: 16px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
.form-control {
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
.tab-content {
|
|
||||||
margin-top: 25px;
|
|
||||||
}
|
|
||||||
.container {
|
|
||||||
max-width: 1135px;
|
|
||||||
margin: 10px auto 50px;
|
|
||||||
}
|
|
||||||
#recipients-table td:nth-child(7) {
|
|
||||||
word-break: break-all;
|
|
||||||
padding: 8px 5px !important;
|
|
||||||
}
|
|
||||||
@media screen and (max-width: 1200px) {
|
|
||||||
.nav-holder .navigation{
|
|
||||||
max-width: 940px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@media screen and (max-width: 991px) {
|
|
||||||
.nav-holder .navigation{
|
|
||||||
max-width: 720px;
|
|
||||||
}
|
|
||||||
.report-group.period {
|
|
||||||
max-width: 420px;
|
|
||||||
margin-right: 0;
|
|
||||||
}
|
|
||||||
.supporters-total .overview {
|
|
||||||
margin-right: 20px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@media screen and (max-width: 770px) {
|
|
||||||
.report-period-group.supporters {
|
|
||||||
float: none;
|
|
||||||
width: 100%;
|
|
||||||
height: 120px;
|
|
||||||
}
|
|
||||||
.supporters-total {
|
|
||||||
float: none;
|
|
||||||
width: 100%;
|
|
||||||
height: auto;
|
|
||||||
border: 1px solid #ddd;
|
|
||||||
border-top: 0 none;
|
|
||||||
}
|
|
||||||
.supporters-total:after {
|
|
||||||
content: '';
|
|
||||||
display: table;
|
|
||||||
clear: both;
|
|
||||||
float: none;
|
|
||||||
}
|
|
||||||
.registration {
|
|
||||||
width: 100%;
|
|
||||||
min-height: auto;
|
|
||||||
margin-right: 0;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@media screen and (max-width: 650px) {
|
|
||||||
#recipients-table th:nth-child(4),
|
|
||||||
#recipients-table td:nth-child(4),
|
|
||||||
#recipients-table th:nth-child(3),
|
|
||||||
#recipients-table td:nth-child(3) {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.navigation li a,
|
|
||||||
.navigation li.active a,
|
|
||||||
.navigation li.active a:focus,
|
|
||||||
.navigation li.active a:hover {
|
|
||||||
border-bottom: 0 none;
|
|
||||||
padding: 15px 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@media screen and (max-width: 550px) {
|
|
||||||
.table {
|
|
||||||
font-size: 13px;
|
|
||||||
}
|
|
||||||
.table thead {
|
|
||||||
font-size: 11px;
|
|
||||||
}
|
|
||||||
.table thead span {
|
|
||||||
text-transform: lowercase;
|
|
||||||
}
|
|
||||||
.table th,
|
|
||||||
.table td {
|
|
||||||
padding: 8px 2px !important;
|
|
||||||
vertical-align: middle !important;
|
|
||||||
font-weight: normal !important;
|
|
||||||
text-align: center;
|
|
||||||
|
|
||||||
}
|
|
||||||
.table th.sorting_asc:before,
|
|
||||||
.table th.sorting_desc:before {
|
|
||||||
content: '';
|
|
||||||
position: absolute;
|
|
||||||
left: 50%;
|
|
||||||
margin-left: -2px;
|
|
||||||
border: 4px solid transparent;
|
|
||||||
}
|
|
||||||
.table th.sorting_asc:before {
|
|
||||||
bottom: 1px;
|
|
||||||
border-top-color: #ff8f00;
|
|
||||||
}
|
|
||||||
.table th.sorting_desc:before {
|
|
||||||
top: 1px;
|
|
||||||
border-bottom-color: #ff8f00;
|
|
||||||
}
|
|
||||||
.table th:after {
|
|
||||||
content: none !important;
|
|
||||||
}
|
|
||||||
.table-controls {
|
|
||||||
padding-right: 145px;
|
|
||||||
}
|
|
||||||
.tc.entries {
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
.tc.entries span {
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: middle;
|
|
||||||
width: 30%;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.contributor-registration .btc-address {
|
|
||||||
word-break: break-all;
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,117 +0,0 @@
|
||||||
/* Slider */
|
|
||||||
.slick-slider
|
|
||||||
{
|
|
||||||
position: relative;
|
|
||||||
|
|
||||||
display: block;
|
|
||||||
box-sizing: border-box;
|
|
||||||
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-moz-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
user-select: none;
|
|
||||||
|
|
||||||
-webkit-touch-callout: none;
|
|
||||||
-khtml-user-select: none;
|
|
||||||
-ms-touch-action: pan-y;
|
|
||||||
touch-action: pan-y;
|
|
||||||
-webkit-tap-highlight-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slick-list
|
|
||||||
{
|
|
||||||
position: relative;
|
|
||||||
|
|
||||||
display: block;
|
|
||||||
overflow: hidden;
|
|
||||||
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
.slick-list:focus
|
|
||||||
{
|
|
||||||
outline: none;
|
|
||||||
}
|
|
||||||
.slick-list.dragging
|
|
||||||
{
|
|
||||||
cursor: pointer;
|
|
||||||
cursor: hand;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slick-slider .slick-track,
|
|
||||||
.slick-slider .slick-list
|
|
||||||
{
|
|
||||||
-webkit-transform: translate3d(0, 0, 0);
|
|
||||||
-moz-transform: translate3d(0, 0, 0);
|
|
||||||
-ms-transform: translate3d(0, 0, 0);
|
|
||||||
-o-transform: translate3d(0, 0, 0);
|
|
||||||
transform: translate3d(0, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
.slick-track
|
|
||||||
{
|
|
||||||
position: relative;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
.slick-track:before,
|
|
||||||
.slick-track:after
|
|
||||||
{
|
|
||||||
display: table;
|
|
||||||
|
|
||||||
content: '';
|
|
||||||
}
|
|
||||||
.slick-track:after
|
|
||||||
{
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
.slick-loading .slick-track
|
|
||||||
{
|
|
||||||
visibility: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slick-slide
|
|
||||||
{
|
|
||||||
display: none;
|
|
||||||
float: left;
|
|
||||||
|
|
||||||
height: 100%;
|
|
||||||
min-height: 1px;
|
|
||||||
}
|
|
||||||
[dir='rtl'] .slick-slide
|
|
||||||
{
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
.slick-slide img
|
|
||||||
{
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
.slick-slide.slick-loading img
|
|
||||||
{
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.slick-slide.dragging img
|
|
||||||
{
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
.slick-initialized .slick-slide
|
|
||||||
{
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
.slick-loading .slick-slide
|
|
||||||
{
|
|
||||||
visibility: hidden;
|
|
||||||
}
|
|
||||||
.slick-vertical .slick-slide
|
|
||||||
{
|
|
||||||
display: block;
|
|
||||||
|
|
||||||
height: auto;
|
|
||||||
|
|
||||||
border: 1px solid transparent;
|
|
||||||
}
|
|
||||||
.slick-arrow.slick-hidden {
|
|
||||||
display: none;
|
|
||||||
}
|
|
|
@ -1,98 +0,0 @@
|
||||||
/* Slider */
|
|
||||||
|
|
||||||
.slick-slider {
|
|
||||||
position: relative;
|
|
||||||
display: block;
|
|
||||||
box-sizing: border-box;
|
|
||||||
-webkit-touch-callout: none;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-khtml-user-select: none;
|
|
||||||
-moz-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
user-select: none;
|
|
||||||
-ms-touch-action: pan-y;
|
|
||||||
touch-action: pan-y;
|
|
||||||
-webkit-tap-highlight-color: transparent;
|
|
||||||
}
|
|
||||||
.slick-list {
|
|
||||||
position: relative;
|
|
||||||
overflow: hidden;
|
|
||||||
display: block;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
|
|
||||||
&:focus {
|
|
||||||
outline: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.dragging {
|
|
||||||
cursor: pointer;
|
|
||||||
cursor: hand;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.slick-slider .slick-track,
|
|
||||||
.slick-slider .slick-list {
|
|
||||||
-webkit-transform: translate3d(0, 0, 0);
|
|
||||||
-moz-transform: translate3d(0, 0, 0);
|
|
||||||
-ms-transform: translate3d(0, 0, 0);
|
|
||||||
-o-transform: translate3d(0, 0, 0);
|
|
||||||
transform: translate3d(0, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
.slick-track {
|
|
||||||
position: relative;
|
|
||||||
left: 0;
|
|
||||||
top: 0;
|
|
||||||
display: block;
|
|
||||||
|
|
||||||
&:before,
|
|
||||||
&:after {
|
|
||||||
content: "";
|
|
||||||
display: table;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:after {
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slick-loading & {
|
|
||||||
visibility: hidden;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.slick-slide {
|
|
||||||
float: left;
|
|
||||||
height: 100%;
|
|
||||||
min-height: 1px;
|
|
||||||
[dir="rtl"] & {
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
img {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
&.slick-loading img {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
display: none;
|
|
||||||
|
|
||||||
&.dragging img {
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slick-initialized & {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slick-loading & {
|
|
||||||
visibility: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slick-vertical & {
|
|
||||||
display: block;
|
|
||||||
height: auto;
|
|
||||||
border: 1px solid transparent;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.slick-arrow.slick-hidden {
|
|
||||||
display: none;
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,43 +0,0 @@
|
||||||
@font-family: 'Roboto Regular';
|
|
||||||
@text-color: #000;
|
|
||||||
@oposite-text-color: #fff;
|
|
||||||
@header-color: #536dfe;
|
|
||||||
@read-more-color: #adadad;
|
|
||||||
@brand-orange: #ff8f00;
|
|
||||||
@opacity-orange-overlay: 0.9;
|
|
||||||
@separator-bg: #ffbb00;
|
|
||||||
|
|
||||||
@badge-free: #f3f3f3;
|
|
||||||
@badge-free-text: #737373;
|
|
||||||
@badge-paid: #62c452;
|
|
||||||
@badge-paid-text: #fff;
|
|
||||||
|
|
||||||
@footer-bg: #292f33;
|
|
||||||
@footer-text-color: #fff;
|
|
||||||
@footer-header-color: #698d8f;
|
|
||||||
@footer-header-underline-color: #2f4445;
|
|
||||||
@footer-copyright-color: #525e66;
|
|
||||||
@footer-font-family: Arial;
|
|
||||||
@footer-contact-btn-border: #394247;
|
|
||||||
|
|
||||||
@index-app-features-header: #ffa516;
|
|
||||||
@index-app-features-subheader: #c1c1c1;
|
|
||||||
@index-banner-btn-bg: #ffa516;
|
|
||||||
@index-header-color: #000;
|
|
||||||
@index-subheader-color: #737373;
|
|
||||||
@index-slider-btn-active: #ffa516;
|
|
||||||
@index-slider-btn-passive: #d4d4d4;
|
|
||||||
@index-recomendations-username: #212121;
|
|
||||||
@index-recomendations-service: #9e9e9e;
|
|
||||||
@index-news-link-color: #266ce0;
|
|
||||||
@index-news-read-more-link: #adadad;
|
|
||||||
@index-news-timestamp: #adadad;
|
|
||||||
@index-poll-btn-bg: #ff8f00;
|
|
||||||
@index-poll-result-btn-bg: #ff6c00;
|
|
||||||
@index-poll-radio-btn-active: #ff8f00;
|
|
||||||
@index-poll-radio-btn-border: #bbb;
|
|
||||||
|
|
||||||
@blog-article-header: #536dfe;
|
|
||||||
|
|
||||||
@help-question-link: #454ade;
|
|
||||||
@help-question-border: #e6e7ec;
|
|
|
@ -1,2 +0,0 @@
|
||||||
/***********************EMPTY USED BY HELP inlining but already defined in site.css
|
|
||||||
*********************************************/
|
|
Binary file not shown.
File diff suppressed because it is too large
Load diff
Before Width: | Height: | Size: 574 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load diff
Before Width: | Height: | Size: 584 KiB |
Binary file not shown.
Binary file not shown.
|
@ -1,98 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="cache-control" content="max-age=0"/>
|
|
||||||
<meta http-equiv="cache-control" content="no-cache"/>
|
|
||||||
<meta http-equiv="expires" content="0"/>
|
|
||||||
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT"/>
|
|
||||||
<meta http-equiv="pragma" content="no-cache"/>
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<title>OsmAnd - Offline Mobile Maps and Navigation</title>
|
|
||||||
<link rel="stylesheet" type="text/css" href="/css/site.css?v=4"/>
|
|
||||||
<!-- <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css" /> -->
|
|
||||||
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.1.0/dist/leaflet.css"/>
|
|
||||||
<script src="https://unpkg.com/leaflet@1.1.0/dist/leaflet.js"></script>
|
|
||||||
<script type="text/javascript" src="/scripts/jquery-3.1.0.min.js"></script>
|
|
||||||
<!--
|
|
||||||
<script src="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js"></script>
|
|
||||||
-->
|
|
||||||
|
|
||||||
<script type="text/javascript" src="/scripts/js.cookie.js"></script>
|
|
||||||
<script type="text/javascript" src="/scripts/go.js?v=5"></script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
function getMarkerContent(feature) {
|
|
||||||
var p = feature.properties;
|
|
||||||
var popupContent = p.title;
|
|
||||||
if(p.opr_id) {
|
|
||||||
popupContent += " (" + p.opr_id+") ";
|
|
||||||
}
|
|
||||||
if(p.tags) {
|
|
||||||
for (var t in p.tags) {
|
|
||||||
popupContent += "<br>" + t + " " + p.tags[t];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(p.opr_id) {
|
|
||||||
popupContent += "<br><a href=\'/api/admin?view=objects&browse=type&type=opr.place&subtype=id&key=" +
|
|
||||||
p.opr_id + "\'>OpenPlaceReviews</a>";
|
|
||||||
}
|
|
||||||
if(p.osm_id) {
|
|
||||||
popupContent += "<br><a href=\'https://www.openstreetmap.org/" +
|
|
||||||
p.osm_type + "/" + p.osm_id + "\'>OpenStreetMap</a>";
|
|
||||||
}
|
|
||||||
return popupContent;
|
|
||||||
}
|
|
||||||
|
|
||||||
function markerClick(e){
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
function setupMarkers(){
|
|
||||||
$.ajax({
|
|
||||||
type: 'GET',
|
|
||||||
url: "/favorites",
|
|
||||||
async: false,
|
|
||||||
contentType: "application/json",
|
|
||||||
dataType: 'json',
|
|
||||||
complete: function(r) {
|
|
||||||
var points = JSON.parse(r.responseText);
|
|
||||||
points.forEach(e => {
|
|
||||||
window.goMap.map.addPopupMarker(e,markerClick);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
error: function(e) {
|
|
||||||
alert("Error happened while getting favourite points "+e.message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
$( document ).ready(function() {
|
|
||||||
setupMarkers();
|
|
||||||
});
|
|
||||||
|
|
||||||
</script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="gocontainer" id="gocontainer">
|
|
||||||
<div class="goheader">
|
|
||||||
<a href="/"><img src="/images/logo-grey.png" class="logo"/></a>
|
|
||||||
<div class="coordinatescontainer">
|
|
||||||
<div><span class="title">LAT</span><span class="coordinate latitude"></span></div>
|
|
||||||
<div><span class="title">LON</span><span class="coordinate longitude"></span></div>
|
|
||||||
</div>
|
|
||||||
<div class="clear:both;"></div>
|
|
||||||
</div>
|
|
||||||
<div id="map"></div>
|
|
||||||
<div class="overlay" style="display:none;"></div>
|
|
||||||
<div class="popup" style="display:none;">
|
|
||||||
<div class="logo"></div>
|
|
||||||
<h1>Did you know</h1>
|
|
||||||
<p>OsmAnd has an iOS application</p>
|
|
||||||
<a class="button yes" href="javascript:void(0);">Yep, I've already got it</a>
|
|
||||||
<a class="button no" href="javascript::void(0);">Nope, but I'd love to try it</a>
|
|
||||||
<a class="button cancel" href="javascript:void(0);">Leave me alone</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Binary file not shown.
Before Width: | Height: | Size: 4.3 KiB |
Binary file not shown.
Before Width: | Height: | Size: 6.6 KiB |
Binary file not shown.
Before Width: | Height: | Size: 4.4 KiB |
|
@ -1,86 +0,0 @@
|
||||||
var blogArticles = [
|
|
||||||
{title:'OsmAnd for iPhone is released', url:'blog.html?id=osmand-ios', id:'osmand-ios', gatag:'osmand_ios'},
|
|
||||||
{title:'Nautical charts', url:'blog.html?id=nautical-charts', id:'nautical-charts', gatag:'nautical_charts'},
|
|
||||||
{title:'OsmAnd DVR goes live', url:'blog.html?id=osmand-dvr-goes-live', id:'osmand-dvr-goes-live', gatag:'osmand_dvr_goes_live'},
|
|
||||||
{title:'OsmAnd 1.9', url:'blog.html?id=osmand-1-9-released', id:'osmand-1-9-released', gatag:'osmand_1_9'},
|
|
||||||
{title:'OsmAnd 1.8', url:'blog.html?id=osmand-1-8-released', id:'osmand-1-8-released', gatag:'osmand_1_8'},
|
|
||||||
{title:'OsmAnd 1.7', url:'blog.html?id=osmand-1-7-released', id:'osmand-1-7-released', gatag:'osmand_1_7'},
|
|
||||||
{title:'OsmAnd 1.6 Released', url:'blog.html?id=osmand-1-6-released', id:'osmand-1-6-released', gatag:'osmand_1_6'},
|
|
||||||
{title:'OsmAnd 1.5 Released', url:'blog.html?id=osmand-1-5-released', id:'osmand-1-5-released', gatag:'osmand_1_5'}
|
|
||||||
];
|
|
||||||
|
|
||||||
var webSiteUrl = "http://osmand.net";
|
|
||||||
|
|
||||||
$.urlParam = function(url, name){
|
|
||||||
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(url);
|
|
||||||
if (results==null){
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
return results[1] || 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function blog(container){
|
|
||||||
|
|
||||||
var getFullArticleUrl = function(articleObj){
|
|
||||||
return webSiteUrl + "/" + articleObj.url;
|
|
||||||
}
|
|
||||||
|
|
||||||
var fixTwitter =function (){
|
|
||||||
$('#___plusone_0 iframe').css('height', '21px');
|
|
||||||
}
|
|
||||||
|
|
||||||
var updateMetaTags = function(articleObj){
|
|
||||||
if (articleObj && articleObj != null){
|
|
||||||
var articleFullUrl = getFullArticleUrl(articleObj);
|
|
||||||
$('meta[property="og:title"]').attr('content', articleObj.title);
|
|
||||||
$('meta[property="og:url"]').attr('content', articleFullUrl);
|
|
||||||
$('meta[property="og:description"]').attr('content', articleObj.title);
|
|
||||||
|
|
||||||
$('link[rel="canonical"]').attr('href', articleFullUrl);
|
|
||||||
|
|
||||||
$('div.fb-like').attr('data-href', articleFullUrl);
|
|
||||||
$('.twitter-share-button').attr('data-url', articleFullUrl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var getArticleById = function(articleid){
|
|
||||||
for(var i=0; i < blogArticles.length;++i){
|
|
||||||
if (blogArticles[i].id === articleid){
|
|
||||||
return blogArticles[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
var init = function(){
|
|
||||||
container.empty();
|
|
||||||
|
|
||||||
for(var i=0; i < blogArticles.length; ++i){
|
|
||||||
var link = blogArticles[i];
|
|
||||||
container.append('<li><a data-gatag="' +link.gatag+ '" data-index="' + link.index+ '" href="' + link.url + '">' + link.title + '</a></li>');
|
|
||||||
}
|
|
||||||
|
|
||||||
var articleid = $.urlParam(window.location.href, 'id');
|
|
||||||
if (!articleid || articleid == null){
|
|
||||||
articleid = blogArticles[0].id;
|
|
||||||
}
|
|
||||||
//hide share buttons
|
|
||||||
$('.share_buttons').css('display', 'none');
|
|
||||||
updateMetaTags(getArticleById(articleid));
|
|
||||||
var url = 'blog_articles' + '/' + articleid + ".html";
|
|
||||||
$( ".article" ).load(url, function( response, status, xhr) {
|
|
||||||
if ( status != "error" ) {
|
|
||||||
|
|
||||||
$('.share_buttons').css('display', 'block');
|
|
||||||
setTimeout(fixTwitter, 5000);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
init();
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,268 +0,0 @@
|
||||||
var requestUtils={
|
|
||||||
'getParamValue':function(paramName){
|
|
||||||
let value= (location.search.split(paramName + '=')[1]||'').split('&')[0];
|
|
||||||
if (value && value.length > 0){
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
},
|
|
||||||
'isIOS':function(){
|
|
||||||
return /(iPad|iPhone|iPod)/g.test( navigator.userAgent );
|
|
||||||
},
|
|
||||||
'redirect':function(newUrl){
|
|
||||||
document.location = newUrl;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
var goMap = {
|
|
||||||
'config':{
|
|
||||||
'containerid': 'gocontainer',
|
|
||||||
'defaults':{
|
|
||||||
'lat':50.27,
|
|
||||||
'lon':30.30,
|
|
||||||
'zoom':13
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'utils':{
|
|
||||||
'getPointFromUrl':function(){
|
|
||||||
let point = {};
|
|
||||||
point.lat = requestUtils.getParamValue('lat');
|
|
||||||
point.lon = requestUtils.getParamValue('lon');
|
|
||||||
point.zoom = requestUtils.getParamValue('z');
|
|
||||||
return point;
|
|
||||||
},
|
|
||||||
'isPointComplete':function(point){
|
|
||||||
if (!point.lat || !point.lon){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
'extendPoint':function(initialPoint, newPoint){
|
|
||||||
let point={};
|
|
||||||
point.lat=newPoint.lat;
|
|
||||||
if (!point.lat || point.lat == null){
|
|
||||||
point.lat = initialPoint.lat;
|
|
||||||
}
|
|
||||||
point.lon=newPoint.lon;
|
|
||||||
if (!point.lon || point.lon == null){
|
|
||||||
point.lon = initialPoint.lon;
|
|
||||||
}
|
|
||||||
point.zoom=newPoint.zoom;
|
|
||||||
if (!point.zoom || point.zoom == null){
|
|
||||||
point.zoom = initialPoint.zoom;
|
|
||||||
}
|
|
||||||
return point;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'init': function(config){
|
|
||||||
if (config && typeof (config) == 'object') {
|
|
||||||
$.extend(goMap.config, config);
|
|
||||||
}
|
|
||||||
goMap.$container = $('#' + goMap.config.containerid);
|
|
||||||
goMap.$footer = goMap.$container.find('.gofooter');
|
|
||||||
goMap.$latitude = goMap.$container.find('.latitude');
|
|
||||||
goMap.$longitude = goMap.$container.find('.longitude');
|
|
||||||
|
|
||||||
let inputPoint = goMap.utils.getPointFromUrl();
|
|
||||||
goMap.point = goMap.utils.extendPoint(goMap.config.defaults, inputPoint);
|
|
||||||
goMap.refreshCoordinates();
|
|
||||||
|
|
||||||
goMap.map =$.mapwidget();
|
|
||||||
goMap.map.showPoint(goMap.point);
|
|
||||||
|
|
||||||
let inputComplete = goMap.utils.isPointComplete(inputPoint);
|
|
||||||
if (inputComplete){
|
|
||||||
goMap.map.addMarker(goMap.point);
|
|
||||||
}
|
|
||||||
goMap.point = goMap.utils.getPointFromUrl();
|
|
||||||
},
|
|
||||||
'refreshCoordinates':function(){
|
|
||||||
goMap.$latitude.text(goMap.point.lat);
|
|
||||||
goMap.$longitude.text(goMap.point.lon);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
function toColor(num) {
|
|
||||||
num >>>= 0;
|
|
||||||
var b = num & 0xFF,
|
|
||||||
g = (num & 0xFF00) >>> 8,
|
|
||||||
r = (num & 0xFF0000) >>> 16,
|
|
||||||
a = ( (num & 0xFF000000) >>> 24 ) / 255 ;
|
|
||||||
return "rgba(" + [r, g, b, a].join(",") + ")";
|
|
||||||
}
|
|
||||||
|
|
||||||
(function($) {
|
|
||||||
$.mapwidget = function(config) {
|
|
||||||
var loc = goMap.point.lat + '/' + goMap.point.lon;
|
|
||||||
var lparams = '?mlat='+goMap.point.lat + '&mlon=' + goMap.point.lon;
|
|
||||||
var mapobj={
|
|
||||||
config: $.extend({
|
|
||||||
'mapid':'map',
|
|
||||||
'maxzoom':20,
|
|
||||||
'maxnativezoom':19,
|
|
||||||
'sourceurl':'https://tile.osmand.net/hd/{z}/{x}/{y}.png',
|
|
||||||
'attribution':'© <a href="https://www.openstreetmap.org/'+lparams+'#map=15/'+loc+'">OpenStreetMap</a> contributors'
|
|
||||||
}, config),
|
|
||||||
init:function(){
|
|
||||||
mapobj.map = L.map(mapobj.config.mapid);
|
|
||||||
L.tileLayer(mapobj.config.sourceurl, {
|
|
||||||
attribution: mapobj.config.attribution,
|
|
||||||
maxZoom: mapobj.config.maxzoom,
|
|
||||||
maxNativeZoom: mapobj.config.maxnativezoom
|
|
||||||
}).addTo(mapobj.map);
|
|
||||||
},
|
|
||||||
showPoint:function(point){
|
|
||||||
mapobj.map.setView([point.lat, point.lon], point.zoom);
|
|
||||||
},
|
|
||||||
addMarker:function(point){
|
|
||||||
L.marker([point.lat, point.lon]).addTo(mapobj.map);
|
|
||||||
},
|
|
||||||
addPopupMarker:function(favorite,onClickEvent){
|
|
||||||
window.point = favorite;
|
|
||||||
var point = {};
|
|
||||||
point.lat = favorite.latitude;
|
|
||||||
point.lon = favorite.longitude;
|
|
||||||
var popup = L.popup().setContent(
|
|
||||||
"name: <b>" + favorite.name + "</b><br/>" +
|
|
||||||
"address: <i>" + favorite.address + "</i><br/>"
|
|
||||||
+ "category: " + favorite.category);
|
|
||||||
L.marker([point.lat, point.lon])
|
|
||||||
.bindPopup(popup)
|
|
||||||
.addTo(mapobj.map)
|
|
||||||
.on('click', function(e) {
|
|
||||||
onClickEvent(e);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
mapobj.init();
|
|
||||||
return {
|
|
||||||
showPoint: mapobj.showPoint,
|
|
||||||
addMarker: mapobj.addMarker,
|
|
||||||
addPopupMarker: mapobj.addPopupMarker
|
|
||||||
};
|
|
||||||
};
|
|
||||||
})(jQuery);
|
|
||||||
|
|
||||||
(function($) {
|
|
||||||
$.timer=function(config){
|
|
||||||
var timerobj={
|
|
||||||
config: $.extend({
|
|
||||||
'timeoutInMs':300,
|
|
||||||
'maxActionDelayInMs':2000,
|
|
||||||
'action':function(){},
|
|
||||||
'actionparams':null
|
|
||||||
}, config),
|
|
||||||
init:function(){
|
|
||||||
timerobj.timer = null;
|
|
||||||
timerobj.startDate = null;
|
|
||||||
},
|
|
||||||
start:function(){
|
|
||||||
timerobj.cancel();
|
|
||||||
timerobj.startDate = new Date();
|
|
||||||
timerobj.timer=setTimeout(timerobj.onTimer, timerobj.config.timeoutInMs);
|
|
||||||
},
|
|
||||||
cancel:function(){
|
|
||||||
if (timerobj.timer != null){
|
|
||||||
clearTimeout(timerobj.timer);
|
|
||||||
timerobj.timer = null;
|
|
||||||
timerobj.startDate = null;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
onTimer:function(){
|
|
||||||
timerobj.timer= null;
|
|
||||||
let now = new Date();
|
|
||||||
if(now - timerobj.startDate < timerobj.config.maxActionDelayInMs){
|
|
||||||
timerobj.config.action(timerobj.config.actionparams);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
timerobj.init();
|
|
||||||
return {
|
|
||||||
start:timerobj.start,
|
|
||||||
cancel:timerobj.cancel
|
|
||||||
};
|
|
||||||
};
|
|
||||||
})(jQuery);
|
|
||||||
|
|
||||||
var iosAppRedirect = {
|
|
||||||
config:{
|
|
||||||
appPrefix:'osmandmaps://',
|
|
||||||
containerid:'gocontainer',
|
|
||||||
cookieName:'OsmAndInstalled',
|
|
||||||
cookieNoExpirationTimeoutInDays:30
|
|
||||||
},
|
|
||||||
init:function(config){
|
|
||||||
if (config && typeof (config) == 'object') {
|
|
||||||
$.extend(iosAppRedirect.config, config);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!requestUtils.isIOS()){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
iosAppRedirect.$container = $('#' + iosAppRedirect.config.containerid);
|
|
||||||
iosAppRedirect.$overlay = iosAppRedirect.$container.find('.overlay');
|
|
||||||
iosAppRedirect.$popup = iosAppRedirect.$container.find('.popup');
|
|
||||||
iosAppRedirect.$yesBtn = iosAppRedirect.$container.find('.yes');
|
|
||||||
iosAppRedirect.$noBtn = iosAppRedirect.$container.find('.no');
|
|
||||||
iosAppRedirect.$cancelBtn = iosAppRedirect.$container.find('.cancel');
|
|
||||||
iosAppRedirect.applestorelink = iosAppRedirect.$container.find('.gobadges .apple a').attr('href');
|
|
||||||
iosAppRedirect.applink = iosAppRedirect.config.appPrefix + document.location.search;
|
|
||||||
|
|
||||||
|
|
||||||
if (iosAppRedirect.isAppInstalled() === "yes"){
|
|
||||||
iosAppRedirect.redirectToApp();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (iosAppRedirect.isAppInstalled() === "no"){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
iosAppRedirect.$yesBtn.on('click', function(){
|
|
||||||
iosAppRedirect.redirectToApp();
|
|
||||||
iosAppRedirect.closePopup();
|
|
||||||
});
|
|
||||||
|
|
||||||
iosAppRedirect.$noBtn.on('click', function(){
|
|
||||||
iosAppRedirect.setCookie(true);
|
|
||||||
iosAppRedirect.closePopup();
|
|
||||||
window.open(iosAppRedirect.applestorelink , '_blank');
|
|
||||||
});
|
|
||||||
|
|
||||||
iosAppRedirect.$cancelBtn.on('click', function(){
|
|
||||||
iosAppRedirect.setCookie(false);
|
|
||||||
iosAppRedirect.closePopup();
|
|
||||||
});
|
|
||||||
iosAppRedirect.openPopup();
|
|
||||||
},
|
|
||||||
isAppInstalled:function(){
|
|
||||||
return Cookies.get('OsmAndInstalled');
|
|
||||||
},
|
|
||||||
redirectToApp:function(){
|
|
||||||
iosAppRedirect.timer = $.timer({action:iosAppRedirect.clearCookie});
|
|
||||||
iosAppRedirect.timer.start();
|
|
||||||
requestUtils.redirect(iosAppRedirect.applink);
|
|
||||||
},
|
|
||||||
setCookie:function(appInstalled){
|
|
||||||
if (appInstalled === true){
|
|
||||||
Cookies.set(iosAppRedirect.config.cookieName, "yes");
|
|
||||||
}else{
|
|
||||||
Cookies.set(iosAppRedirect.config.cookieName, "no", { expires: iosAppRedirect.config.cookieNoExpirationTimeoutInDays });
|
|
||||||
}
|
|
||||||
},
|
|
||||||
clearCookie:function(){
|
|
||||||
Cookies.remove('OsmAndInstalled');
|
|
||||||
},
|
|
||||||
openPopup:function(){
|
|
||||||
iosAppRedirect.$overlay.show();
|
|
||||||
iosAppRedirect.$popup.show();
|
|
||||||
},
|
|
||||||
closePopup:function(){
|
|
||||||
iosAppRedirect.$overlay.hide();
|
|
||||||
iosAppRedirect.$popup.hide();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
$( document ).ready(function() {
|
|
||||||
goMap.init();
|
|
||||||
iosAppRedirect.init();
|
|
||||||
});
|
|
File diff suppressed because one or more lines are too long
10346
OsmAnd/assets/server/scripts/jquery-1.11.2.js
vendored
10346
OsmAnd/assets/server/scripts/jquery-1.11.2.js
vendored
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
|
@ -1,38 +0,0 @@
|
||||||
(function($) {
|
|
||||||
$.fn.ellipsis = function()
|
|
||||||
{
|
|
||||||
return this.each(function()
|
|
||||||
{
|
|
||||||
var el = $(this);
|
|
||||||
|
|
||||||
if(el.css("overflow") == "hidden")
|
|
||||||
{
|
|
||||||
var text = el.html();
|
|
||||||
var multiline = el.hasClass('multiline');
|
|
||||||
var t = $(this.cloneNode(true))
|
|
||||||
.hide()
|
|
||||||
.css('position', 'absolute')
|
|
||||||
.css('overflow', 'visible')
|
|
||||||
.width(multiline ? el.width() : 'auto')
|
|
||||||
.height(multiline ? 'auto' : el.height())
|
|
||||||
;
|
|
||||||
|
|
||||||
el.after(t);
|
|
||||||
|
|
||||||
function height() { return t.height() > el.height(); };
|
|
||||||
function width() { return t.width() > el.width(); };
|
|
||||||
|
|
||||||
var func = multiline ? height : width;
|
|
||||||
|
|
||||||
while (text.length > 0 && func())
|
|
||||||
{
|
|
||||||
text = text.substr(0, text.length - 1);
|
|
||||||
t.html(text + "...");
|
|
||||||
}
|
|
||||||
|
|
||||||
el.html(t.html());
|
|
||||||
t.remove();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
})(jQuery);
|
|
|
@ -1,165 +0,0 @@
|
||||||
/*!
|
|
||||||
* JavaScript Cookie v2.1.4
|
|
||||||
* https://github.com/js-cookie/js-cookie
|
|
||||||
*
|
|
||||||
* Copyright 2006, 2015 Klaus Hartl & Fagner Brack
|
|
||||||
* Released under the MIT license
|
|
||||||
*/
|
|
||||||
;(function (factory) {
|
|
||||||
var registeredInModuleLoader = false;
|
|
||||||
if (typeof define === 'function' && define.amd) {
|
|
||||||
define(factory);
|
|
||||||
registeredInModuleLoader = true;
|
|
||||||
}
|
|
||||||
if (typeof exports === 'object') {
|
|
||||||
module.exports = factory();
|
|
||||||
registeredInModuleLoader = true;
|
|
||||||
}
|
|
||||||
if (!registeredInModuleLoader) {
|
|
||||||
var OldCookies = window.Cookies;
|
|
||||||
var api = window.Cookies = factory();
|
|
||||||
api.noConflict = function () {
|
|
||||||
window.Cookies = OldCookies;
|
|
||||||
return api;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}(function () {
|
|
||||||
function extend () {
|
|
||||||
var i = 0;
|
|
||||||
var result = {};
|
|
||||||
for (; i < arguments.length; i++) {
|
|
||||||
var attributes = arguments[ i ];
|
|
||||||
for (var key in attributes) {
|
|
||||||
result[key] = attributes[key];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
function init (converter) {
|
|
||||||
function api (key, value, attributes) {
|
|
||||||
var result;
|
|
||||||
if (typeof document === 'undefined') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write
|
|
||||||
|
|
||||||
if (arguments.length > 1) {
|
|
||||||
attributes = extend({
|
|
||||||
path: '/'
|
|
||||||
}, api.defaults, attributes);
|
|
||||||
|
|
||||||
if (typeof attributes.expires === 'number') {
|
|
||||||
var expires = new Date();
|
|
||||||
expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);
|
|
||||||
attributes.expires = expires;
|
|
||||||
}
|
|
||||||
|
|
||||||
// We're using "expires" because "max-age" is not supported by IE
|
|
||||||
attributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';
|
|
||||||
|
|
||||||
try {
|
|
||||||
result = JSON.stringify(value);
|
|
||||||
if (/^[\{\[]/.test(result)) {
|
|
||||||
value = result;
|
|
||||||
}
|
|
||||||
} catch (e) {}
|
|
||||||
|
|
||||||
if (!converter.write) {
|
|
||||||
value = encodeURIComponent(String(value))
|
|
||||||
.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
|
|
||||||
} else {
|
|
||||||
value = converter.write(value, key);
|
|
||||||
}
|
|
||||||
|
|
||||||
key = encodeURIComponent(String(key));
|
|
||||||
key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);
|
|
||||||
key = key.replace(/[\(\)]/g, escape);
|
|
||||||
|
|
||||||
var stringifiedAttributes = '';
|
|
||||||
|
|
||||||
for (var attributeName in attributes) {
|
|
||||||
if (!attributes[attributeName]) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
stringifiedAttributes += '; ' + attributeName;
|
|
||||||
if (attributes[attributeName] === true) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
stringifiedAttributes += '=' + attributes[attributeName];
|
|
||||||
}
|
|
||||||
return (document.cookie = key + '=' + value + stringifiedAttributes);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Read
|
|
||||||
|
|
||||||
if (!key) {
|
|
||||||
result = {};
|
|
||||||
}
|
|
||||||
|
|
||||||
// To prevent the for loop in the first place assign an empty array
|
|
||||||
// in case there are no cookies at all. Also prevents odd result when
|
|
||||||
// calling "get()"
|
|
||||||
var cookies = document.cookie ? document.cookie.split('; ') : [];
|
|
||||||
var rdecode = /(%[0-9A-Z]{2})+/g;
|
|
||||||
var i = 0;
|
|
||||||
|
|
||||||
for (; i < cookies.length; i++) {
|
|
||||||
var parts = cookies[i].split('=');
|
|
||||||
var cookie = parts.slice(1).join('=');
|
|
||||||
|
|
||||||
if (cookie.charAt(0) === '"') {
|
|
||||||
cookie = cookie.slice(1, -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
var name = parts[0].replace(rdecode, decodeURIComponent);
|
|
||||||
cookie = converter.read ?
|
|
||||||
converter.read(cookie, name) : converter(cookie, name) ||
|
|
||||||
cookie.replace(rdecode, decodeURIComponent);
|
|
||||||
|
|
||||||
if (this.json) {
|
|
||||||
try {
|
|
||||||
cookie = JSON.parse(cookie);
|
|
||||||
} catch (e) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key === name) {
|
|
||||||
result = cookie;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!key) {
|
|
||||||
result[name] = cookie;
|
|
||||||
}
|
|
||||||
} catch (e) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
api.set = api;
|
|
||||||
api.get = function (key) {
|
|
||||||
return api.call(api, key);
|
|
||||||
};
|
|
||||||
api.getJSON = function () {
|
|
||||||
return api.apply({
|
|
||||||
json: true
|
|
||||||
}, [].slice.call(arguments));
|
|
||||||
};
|
|
||||||
api.defaults = {};
|
|
||||||
|
|
||||||
api.remove = function (key, attributes) {
|
|
||||||
api(key, '', extend(attributes, {
|
|
||||||
expires: -1
|
|
||||||
}));
|
|
||||||
};
|
|
||||||
|
|
||||||
api.withConverter = init;
|
|
||||||
|
|
||||||
return api;
|
|
||||||
}
|
|
||||||
|
|
||||||
return init(function () {});
|
|
||||||
}));
|
|
|
@ -1,29 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
function mapselector(container){
|
|
||||||
var $cnt = $(container);
|
|
||||||
var $selectbox = $cnt.find(".selectbox");
|
|
||||||
|
|
||||||
$cnt.find("label").on('click', function(){
|
|
||||||
refreshMap();
|
|
||||||
});
|
|
||||||
|
|
||||||
var refreshMap = function(){
|
|
||||||
var selectedStyle = getSelectedStyle().val();
|
|
||||||
var selectedMap = getSelectedMap().val();
|
|
||||||
if (selectedStyle && selectedMap){
|
|
||||||
var imageName = selectedMap + "-" + selectedStyle + ".png";
|
|
||||||
$cnt.css('background-image', "url('/images/" + imageName + "')");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var getSelectedStyle = function(){
|
|
||||||
return $selectbox.find("input[name='style']:checked");
|
|
||||||
}
|
|
||||||
var getSelectedMap = function(){
|
|
||||||
return $selectbox.find("input[name='show']:checked");
|
|
||||||
}
|
|
||||||
refreshMap();
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,35 +0,0 @@
|
||||||
function applyPolStyles(){
|
|
||||||
|
|
||||||
if ($('.pds-box').length > 0){
|
|
||||||
$('.pds-box').css('border', 'none');
|
|
||||||
$('.pds-vote-button').css('float', 'left');
|
|
||||||
$('.pds-vote-button').css('background', 'none');
|
|
||||||
$('.pds-vote-button').css('background-color', '#FF8F00');
|
|
||||||
$('.pds-vote-button').css('color', '#fff');
|
|
||||||
$('.pds-vote-button').css('border', 'none');
|
|
||||||
$('.pds-vote-button').css('border-radius', '5px');
|
|
||||||
$('.pds-box-outer').css('padding', '0');
|
|
||||||
$('.pds-view-results').on('click', function(){
|
|
||||||
subscribeToReturnToPoll();
|
|
||||||
});
|
|
||||||
}else{
|
|
||||||
setTimeout(applyPolStyles, timeout);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function subscribeToReturnToPoll(){
|
|
||||||
if ($('.pds-return-poll').length > 0){
|
|
||||||
$('.pds-return-poll').on('click', function(){applyStyleOnBackToPoll();});
|
|
||||||
applyPolStyles();
|
|
||||||
}else{
|
|
||||||
setTimeout(subscribeToReturnToPoll, timeout);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function applyStyleOnBackToPoll(){
|
|
||||||
if ($('.pds-view-results').length >0){
|
|
||||||
applyPolStyles();
|
|
||||||
}else{
|
|
||||||
setTimeout(applyStyleOnBackToPoll, timeout);
|
|
||||||
}
|
|
||||||
}
|
|
18
OsmAnd/assets/server/scripts/slick.min.js
vendored
18
OsmAnd/assets/server/scripts/slick.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -1,129 +0,0 @@
|
||||||
var images_android=[
|
|
||||||
"promo-1s.png",
|
|
||||||
"promo-2s.png",
|
|
||||||
"promo-3s.png",
|
|
||||||
"promo-4s.png",
|
|
||||||
"promo-5s.png",
|
|
||||||
"promo-6s.png",
|
|
||||||
"promo-7s.png",
|
|
||||||
"promo-8s.png",
|
|
||||||
"promo-9s.png",
|
|
||||||
"promo-10s.png",
|
|
||||||
"promo-11s.png",
|
|
||||||
"promo-12s.png"
|
|
||||||
];
|
|
||||||
|
|
||||||
var images_ios=[
|
|
||||||
"ios-1s.png",
|
|
||||||
"ios-2s.png",
|
|
||||||
"ios-3s.png",
|
|
||||||
"ios-4s.png",
|
|
||||||
"ios-5s.png"
|
|
||||||
];
|
|
||||||
|
|
||||||
function slider(container){
|
|
||||||
var $cnt = $(container);
|
|
||||||
var $img1 = $cnt.find("#screenshot1");
|
|
||||||
var $img2 =$cnt.find("#screenshot2");
|
|
||||||
var $img3 = $cnt.find("#screenshot3");
|
|
||||||
var $img4 = $cnt.find("#screenshot4");
|
|
||||||
var $leftarrow = $cnt.find(".arrow.left");
|
|
||||||
var $rightarrow = $cnt.find(".arrow.right");
|
|
||||||
var $btnleft = $cnt.find(".button.left");
|
|
||||||
var $btnright = $cnt.find(".button.right");
|
|
||||||
var currentPosition =0;
|
|
||||||
var count =4;
|
|
||||||
|
|
||||||
var images = images_android;
|
|
||||||
|
|
||||||
var init = function(){
|
|
||||||
updatePictures();
|
|
||||||
updateArrows();
|
|
||||||
$leftarrow.on('click', function(){
|
|
||||||
if (currentPosition > 0){
|
|
||||||
currentPosition-=count;
|
|
||||||
updatePictures();
|
|
||||||
updateArrows();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$rightarrow.on('click', function(){
|
|
||||||
if (currentPosition + count < images.length){
|
|
||||||
currentPosition+=count;
|
|
||||||
updatePictures();
|
|
||||||
updateArrows();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$btnleft.on('click', function(){
|
|
||||||
if (!$btnleft.hasClass("active")){
|
|
||||||
$btnleft.addClass("active");
|
|
||||||
$btnright.removeClass("active");
|
|
||||||
$btnright.addClass
|
|
||||||
images = images_android;
|
|
||||||
currentPosition = 0;
|
|
||||||
updatePictures();
|
|
||||||
updateArrows();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
});
|
|
||||||
$btnright.on('click', function(){
|
|
||||||
if (!$btnright.hasClass("active")){
|
|
||||||
$btnright.addClass("active");
|
|
||||||
$btnleft.removeClass("active");
|
|
||||||
images = images_ios;
|
|
||||||
currentPosition = 0;
|
|
||||||
updatePictures();
|
|
||||||
updateArrows();
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
var changePicture = function(img, index){
|
|
||||||
if (index < images.length){
|
|
||||||
img.attr("src", "images/" + images[index]);
|
|
||||||
}else{
|
|
||||||
img.attr("src", "images/empty.png");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var updatePictures = function(){
|
|
||||||
changePicture( $img1, currentPosition);
|
|
||||||
changePicture( $img2, currentPosition+1);
|
|
||||||
changePicture( $img3, currentPosition+2);
|
|
||||||
changePicture( $img4, currentPosition+3);
|
|
||||||
}
|
|
||||||
var updateArrows = function(){
|
|
||||||
if (currentPosition + count < images.length){
|
|
||||||
enableRightArrow();
|
|
||||||
}else{
|
|
||||||
disableRightArrow();
|
|
||||||
}
|
|
||||||
if (currentPosition== 0 ){
|
|
||||||
disableLeftArrow();
|
|
||||||
}else{
|
|
||||||
enableLeftArrow();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var enableLeftArrow = function(){
|
|
||||||
$leftarrow.attr("src", "images/left_arrow_orange.png");
|
|
||||||
while ($leftarrow.hasClass("disabled")){
|
|
||||||
$leftarrow.removeClass("disabled");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var disableLeftArrow = function(){
|
|
||||||
$leftarrow.attr("src", "images/left_arrow_grey.png");
|
|
||||||
$leftarrow.addClass("disabled");
|
|
||||||
}
|
|
||||||
var enableRightArrow = function(){
|
|
||||||
$rightarrow.attr("src", "images/right_arrow_orange.png");
|
|
||||||
while ($rightarrow.hasClass("disabled")){
|
|
||||||
$rightarrow.removeClass("disabled");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var disableRightArrow = function(){
|
|
||||||
$rightarrow.attr("src", "images/right_arrow_grey.png");
|
|
||||||
$rightarrow.addClass("disabled");
|
|
||||||
}
|
|
||||||
init();
|
|
||||||
|
|
||||||
}
|
|
|
@ -542,7 +542,6 @@ dependencies {
|
||||||
//implementation 'com.atilika.kuromoji:kuromoji-ipadic:0.9.0'
|
//implementation 'com.atilika.kuromoji:kuromoji-ipadic:0.9.0'
|
||||||
implementation 'com.squareup.picasso:picasso:2.71828'
|
implementation 'com.squareup.picasso:picasso:2.71828'
|
||||||
implementation 'me.zhanghai.android.materialprogressbar:library:1.4.2'
|
implementation 'me.zhanghai.android.materialprogressbar:library:1.4.2'
|
||||||
implementation 'org.nanohttpd:nanohttpd:2.2.0'
|
|
||||||
// JS core
|
// JS core
|
||||||
implementation group: 'org.mozilla', name: 'rhino', version: '1.7.9'
|
implementation group: 'org.mozilla', name: 'rhino', version: '1.7.9'
|
||||||
// size restrictions
|
// size restrictions
|
||||||
|
|
|
@ -1,51 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:padding="10px">
|
|
||||||
<RelativeLayout
|
|
||||||
android:id="@+id/RelativeLayout03"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_centerHorizontal="true"
|
|
||||||
android:layout_marginTop="20px"
|
|
||||||
android:layout_marginBottom="40px">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/TextView02"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_centerHorizontal="true"
|
|
||||||
android:autoLink="web"
|
|
||||||
android:text="Click button to start server"></TextView>
|
|
||||||
</RelativeLayout>
|
|
||||||
|
|
||||||
<Button
|
|
||||||
android:id="@+id/Button01"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_below="@+id/RelativeLayout03"
|
|
||||||
android:layout_alignParentLeft="true"
|
|
||||||
android:layout_marginBottom="40px"
|
|
||||||
android:text="Start"></Button>
|
|
||||||
|
|
||||||
<Button
|
|
||||||
android:id="@+id/Button03"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_below="@+id/Button01"
|
|
||||||
android:layout_alignParentRight="true"
|
|
||||||
android:layout_alignParentLeft="true"
|
|
||||||
android:text="Stop"></Button>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/textView1"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_alignRight="@+id/Button03"
|
|
||||||
android:fitsSystemWindows="true"
|
|
||||||
android:lines="14"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
|
||||||
android:textSize="8dp" />
|
|
||||||
|
|
||||||
</RelativeLayout>
|
|
|
@ -58,7 +58,6 @@
|
||||||
<string name="shared_string_gpx_files">Tracks</string>
|
<string name="shared_string_gpx_files">Tracks</string>
|
||||||
<string name="add_segment_to_the_track">Add to a track file</string>
|
<string name="add_segment_to_the_track">Add to a track file</string>
|
||||||
<string name="shared_string_save_as_gpx">Save as new track file</string>
|
<string name="shared_string_save_as_gpx">Save as new track file</string>
|
||||||
<string name="web_server">Web server</string>
|
|
||||||
<string name="in_case_of_reverse_direction">In case of reverse direction</string>
|
<string name="in_case_of_reverse_direction">In case of reverse direction</string>
|
||||||
<string name="plan_route_exit_dialog_descr">Are you sure you want to close Plan route without saving? You will lose all changes.</string>
|
<string name="plan_route_exit_dialog_descr">Are you sure you want to close Plan route without saving? You will lose all changes.</string>
|
||||||
<string name="street_level_imagery">Street-level imagery</string>
|
<string name="street_level_imagery">Street-level imagery</string>
|
||||||
|
|
|
@ -1009,20 +1009,6 @@ public class MapActivityActions implements DialogProvider {
|
||||||
}).createItem());
|
}).createItem());
|
||||||
*/
|
*/
|
||||||
|
|
||||||
optionsMenuHelper.addItem(new ItemBuilder().setTitleId(R.string.web_server, mapActivity)
|
|
||||||
.setId("SERVER_ID")
|
|
||||||
.setIcon(R.drawable.mm_shop_computer)
|
|
||||||
.setListener(new ItemClickListener() {
|
|
||||||
@Override
|
|
||||||
public boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> adapter, int itemId, int pos, boolean isChecked, int[] viewCoordinates) {
|
|
||||||
app.logEvent("drawer_help_open");
|
|
||||||
Intent intent = new Intent(mapActivity, ServerActivity.class);
|
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
|
|
||||||
mapActivity.startActivity(intent);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}).createItem());
|
|
||||||
|
|
||||||
optionsMenuHelper.addItem(new ItemBuilder().setTitleId(R.string.shared_string_help, mapActivity)
|
optionsMenuHelper.addItem(new ItemBuilder().setTitleId(R.string.shared_string_help, mapActivity)
|
||||||
.setId(DRAWER_HELP_ID)
|
.setId(DRAWER_HELP_ID)
|
||||||
.setIcon(R.drawable.ic_action_help)
|
.setIcon(R.drawable.ic_action_help)
|
||||||
|
|
|
@ -1,104 +0,0 @@
|
||||||
package net.osmand.plus.activities;
|
|
||||||
|
|
||||||
import android.net.TrafficStats;
|
|
||||||
import android.net.wifi.WifiManager;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.os.StrictMode;
|
|
||||||
import android.text.format.Formatter;
|
|
||||||
import android.view.View;
|
|
||||||
import android.widget.TextView;
|
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
|
||||||
|
|
||||||
import net.osmand.plus.OsmandApplication;
|
|
||||||
import net.osmand.plus.R;
|
|
||||||
import net.osmand.plus.server.OsmAndHttpServer;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public class ServerActivity extends AppCompatActivity {
|
|
||||||
private boolean initialized = false;
|
|
||||||
private OsmAndHttpServer server;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
|
||||||
enableStrictMode();
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
setContentView(R.layout.server_activity);
|
|
||||||
findViewById(R.id.Button01).setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View view) {
|
|
||||||
if (!initialized) {
|
|
||||||
updateTextView("Click second button to deactivate server");
|
|
||||||
initServer();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
findViewById(R.id.Button03).setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View view) {
|
|
||||||
if (initialized) {
|
|
||||||
updateTextView("Click first button to activate server");
|
|
||||||
deInitServer();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void enableStrictMode() {
|
|
||||||
StrictMode.setThreadPolicy(
|
|
||||||
new StrictMode.ThreadPolicy.Builder()
|
|
||||||
.detectDiskReads()
|
|
||||||
.detectDiskWrites()
|
|
||||||
.detectNetwork()
|
|
||||||
.penaltyLog()
|
|
||||||
.build());
|
|
||||||
StrictMode.setVmPolicy(
|
|
||||||
new StrictMode.VmPolicy.Builder()
|
|
||||||
.detectLeakedSqlLiteObjects()
|
|
||||||
.penaltyLog()
|
|
||||||
.build());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void updateTextView(String text) {
|
|
||||||
((TextView) findViewById(R.id.TextView02)).setText(text);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initServer() {
|
|
||||||
final int THREAD_ID = 10000;
|
|
||||||
TrafficStats.setThreadStatsTag(THREAD_ID);
|
|
||||||
OsmAndHttpServer.HOSTNAME = getDeviceAddress();
|
|
||||||
try {
|
|
||||||
server = new OsmAndHttpServer();
|
|
||||||
server.setAndroidApplication((OsmandApplication)this.getApplication());
|
|
||||||
initialized = true;
|
|
||||||
updateTextView("Server started at: http://" + getDeviceAddress() + ":" + OsmAndHttpServer.PORT);
|
|
||||||
} catch (IOException e) {
|
|
||||||
Toast.makeText(this,
|
|
||||||
e.getLocalizedMessage(),
|
|
||||||
Toast.LENGTH_SHORT).show();
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getDeviceAddress() {
|
|
||||||
WifiManager wm = (WifiManager) this.getApplicationContext().getSystemService(WIFI_SERVICE);
|
|
||||||
String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());
|
|
||||||
return ip != null ? ip : "0.0.0.0";
|
|
||||||
}
|
|
||||||
|
|
||||||
private void deInitServer() {
|
|
||||||
server.closeAllConnections();
|
|
||||||
server.stop();
|
|
||||||
initialized = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onDestroy() {
|
|
||||||
deInitServer();
|
|
||||||
super.onDestroy();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
package net.osmand.plus.server;
|
|
||||||
|
|
||||||
import java.util.concurrent.Callable;
|
|
||||||
|
|
||||||
import fi.iki.elonen.NanoHTTPD;
|
|
||||||
|
|
||||||
public class ApiEndpoint{
|
|
||||||
public String uri = "";
|
|
||||||
public ApiCall apiCall;
|
|
||||||
|
|
||||||
public NanoHTTPD.Response run(NanoHTTPD.IHTTPSession session){
|
|
||||||
return apiCall.call(session);
|
|
||||||
}
|
|
||||||
|
|
||||||
public interface ApiCall{
|
|
||||||
NanoHTTPD.Response call(NanoHTTPD.IHTTPSession session);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,186 +0,0 @@
|
||||||
package net.osmand.plus.server;
|
|
||||||
|
|
||||||
import android.util.Log;
|
|
||||||
import android.webkit.MimeTypeMap;
|
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
|
|
||||||
import net.osmand.data.FavouritePoint;
|
|
||||||
import net.osmand.plus.OsmandApplication;
|
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.nio.charset.Charset;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.Callable;
|
|
||||||
|
|
||||||
import fi.iki.elonen.NanoHTTPD;
|
|
||||||
|
|
||||||
import static fi.iki.elonen.NanoHTTPD.newFixedLengthResponse;
|
|
||||||
|
|
||||||
public class ApiRouter {
|
|
||||||
private OsmandApplication androidContext;
|
|
||||||
|
|
||||||
public OsmandApplication getAndroidContext() {
|
|
||||||
return androidContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
private final String FOLDER_NAME = "server";
|
|
||||||
private Gson gson = new Gson();
|
|
||||||
private Map<String, ApiEndpoint> endpoints = new HashMap<>();
|
|
||||||
|
|
||||||
public ApiRouter(){
|
|
||||||
initFavorites();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initFavorites() {
|
|
||||||
ApiEndpoint favorites = new ApiEndpoint();
|
|
||||||
favorites.uri = "/favorites";
|
|
||||||
favorites.apiCall = new ApiEndpoint.ApiCall(){
|
|
||||||
@Override
|
|
||||||
public NanoHTTPD.Response call(NanoHTTPD.IHTTPSession session) {
|
|
||||||
return newFixedLengthResponse(getFavoritesJson());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
endpoints.put(favorites.uri,favorites);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAndroidContext(OsmandApplication androidContext) {
|
|
||||||
this.androidContext = androidContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
public NanoHTTPD.Response route(NanoHTTPD.IHTTPSession session) {
|
|
||||||
Log.d("SERVER", "URI: " + session.getUri());
|
|
||||||
String uri = session.getUri();
|
|
||||||
if (uri.equals("/")) return getStatic("/go.html");
|
|
||||||
if (uri.contains("/scripts/") ||
|
|
||||||
uri.contains("/images/") ||
|
|
||||||
uri.contains("/css/") ||
|
|
||||||
uri.contains("/fonts/") ||
|
|
||||||
uri.contains("/favicon.ico")
|
|
||||||
) return getStatic(uri);
|
|
||||||
if (isApiUrl(uri)){
|
|
||||||
return routeApi(session);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return routeContent(session);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private NanoHTTPD.Response routeApi(NanoHTTPD.IHTTPSession session) {
|
|
||||||
String uri = session.getUri();
|
|
||||||
ApiEndpoint endpoint = endpoints.get(uri);
|
|
||||||
if (endpoint != null){
|
|
||||||
return endpoint.apiCall.call(session);
|
|
||||||
}
|
|
||||||
return ErrorResponses.response404;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isApiUrl(String uri) {
|
|
||||||
for (String endpoint : endpoints.keySet()){
|
|
||||||
if (endpoint.equals(uri)) return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private NanoHTTPD.Response routeContent(NanoHTTPD.IHTTPSession session) {
|
|
||||||
String url = session.getUri();
|
|
||||||
//add index page
|
|
||||||
String responseText = getHtmlPage(url);
|
|
||||||
if (responseText != null) {
|
|
||||||
return newFixedLengthResponse(responseText);
|
|
||||||
} else {
|
|
||||||
return ErrorResponses.response404;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public NanoHTTPD.Response getStatic(String uri) {
|
|
||||||
InputStream is = null;
|
|
||||||
String mimeType = parseMimeType(uri);
|
|
||||||
if (androidContext != null) {
|
|
||||||
try {
|
|
||||||
is = androidContext.getAssets().open(FOLDER_NAME + uri);
|
|
||||||
if (is.available() == 0) {
|
|
||||||
return ErrorResponses.response404;
|
|
||||||
}
|
|
||||||
return newFixedLengthResponse(
|
|
||||||
NanoHTTPD.Response.Status.OK,
|
|
||||||
mimeType,
|
|
||||||
is,
|
|
||||||
is.available());
|
|
||||||
} catch (IOException e) {
|
|
||||||
return ErrorResponses.response404;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ErrorResponses.response500;
|
|
||||||
}
|
|
||||||
|
|
||||||
private String parseMimeType(String url) {
|
|
||||||
String type = null;
|
|
||||||
if (url.endsWith(".js")) return "text/javascript";
|
|
||||||
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
|
|
||||||
if (extension != null) {
|
|
||||||
type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
|
|
||||||
}
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
|
|
||||||
private String readHTMLFromFile(String filename) {
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
try {
|
|
||||||
InputStream is = androidContext.getAssets().open(FOLDER_NAME + filename);
|
|
||||||
BufferedReader br = new BufferedReader(new InputStreamReader(is,
|
|
||||||
Charset.forName("UTF-8")));
|
|
||||||
String str;
|
|
||||||
while ((str = br.readLine()) != null) {
|
|
||||||
sb.append(str);
|
|
||||||
}
|
|
||||||
br.close();
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getHtmlPage(String name) {
|
|
||||||
String responseText = "";
|
|
||||||
if (androidContext != null) {
|
|
||||||
responseText = readHTMLFromFile(name);
|
|
||||||
}
|
|
||||||
if (responseText == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return responseText;
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getFavoritesJson() {
|
|
||||||
List<FavouritePoint> points = androidContext.getFavorites().getFavouritePoints();
|
|
||||||
StringBuilder text = new StringBuilder();
|
|
||||||
for (FavouritePoint p : points) {
|
|
||||||
String json = jsonFromFavorite(p);
|
|
||||||
text.append(json);
|
|
||||||
text.append(",");
|
|
||||||
}
|
|
||||||
return "[" + text.substring(0,text.length()-1) + "]";
|
|
||||||
}
|
|
||||||
|
|
||||||
private String jsonFromFavorite(FavouritePoint favouritePoint) {
|
|
||||||
return gson.toJson(favouritePoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
static class ErrorResponses {
|
|
||||||
static NanoHTTPD.Response response404 =
|
|
||||||
newFixedLengthResponse(NanoHTTPD.Response.Status.NOT_FOUND,
|
|
||||||
NanoHTTPD.MIME_PLAINTEXT, "404 Not Found");
|
|
||||||
|
|
||||||
static NanoHTTPD.Response response500 =
|
|
||||||
newFixedLengthResponse(NanoHTTPD.Response.Status.INTERNAL_ERROR,
|
|
||||||
NanoHTTPD.MIME_PLAINTEXT, "500 Internal Server Error");
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,34 +0,0 @@
|
||||||
package net.osmand.plus.server;
|
|
||||||
|
|
||||||
import net.osmand.plus.OsmandApplication;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import fi.iki.elonen.NanoHTTPD;
|
|
||||||
|
|
||||||
public class OsmAndHttpServer extends NanoHTTPD {
|
|
||||||
public static int PORT = 24990;
|
|
||||||
public static String HOSTNAME = "0.0.0.0";
|
|
||||||
|
|
||||||
private ServerSessionHandler sessionHandler = new ServerSessionHandler();
|
|
||||||
private OsmandApplication androidApplication;
|
|
||||||
|
|
||||||
public OsmandApplication getAndroidApplication() {
|
|
||||||
return androidApplication;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAndroidApplication(OsmandApplication androidApplication) {
|
|
||||||
this.androidApplication = androidApplication;
|
|
||||||
sessionHandler.setAndroidApplication(androidApplication);
|
|
||||||
}
|
|
||||||
|
|
||||||
public OsmAndHttpServer() throws IOException {
|
|
||||||
super(HOSTNAME,PORT);
|
|
||||||
start(NanoHTTPD.SOCKET_READ_TIMEOUT, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Response serve(IHTTPSession session) {
|
|
||||||
return sessionHandler.handle(session);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,24 +0,0 @@
|
||||||
package net.osmand.plus.server;
|
|
||||||
|
|
||||||
import net.osmand.plus.OsmandApplication;
|
|
||||||
|
|
||||||
import fi.iki.elonen.NanoHTTPD;
|
|
||||||
|
|
||||||
public class ServerSessionHandler {
|
|
||||||
private OsmandApplication androidApplication;
|
|
||||||
|
|
||||||
private ApiRouter router = new ApiRouter();
|
|
||||||
|
|
||||||
public OsmandApplication getAndroidApplication() {
|
|
||||||
return androidApplication;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAndroidApplication(OsmandApplication androidApplication) {
|
|
||||||
this.androidApplication = androidApplication;
|
|
||||||
router.setAndroidContext(androidApplication);
|
|
||||||
}
|
|
||||||
|
|
||||||
public NanoHTTPD.Response handle(NanoHTTPD.IHTTPSession session) {
|
|
||||||
return router.route(session);
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue