@@ -10,6 +10,13 @@ $(document).ready(function () {
10
10
var defaultHomeZoom = 12 ;
11
11
var map , marker , deleted_lat , deleted_lon ;
12
12
13
+ const locationInput = {
14
+ dirty : true ,
15
+ request : null ,
16
+ countryName : "" ,
17
+ deletedText : null
18
+ } ;
19
+
13
20
if ( $ ( "#map" ) . length ) {
14
21
map = L . map ( "map" , {
15
22
attributionControl : false ,
@@ -73,6 +80,7 @@ $(document).ready(function () {
73
80
74
81
deleted_lat = null ;
75
82
deleted_lon = null ;
83
+ locationInput . deletedText = null ;
76
84
respondToHomeUpdate ( ) ;
77
85
} ) . on ( "moveend" , function ( ) {
78
86
var lat = $ ( "#home_lat" ) . val ( ) . trim ( ) ,
@@ -93,9 +101,26 @@ $(document).ready(function () {
93
101
$ ( "#home_lat, #home_lon" ) . on ( "input" , function ( ) {
94
102
deleted_lat = null ;
95
103
deleted_lon = null ;
104
+ locationInput . deletedText = null ;
96
105
respondToHomeUpdate ( ) ;
97
106
} ) ;
98
107
108
+ $ ( "#location_name" ) . on ( "input" , function ( ) {
109
+ locationInput . dirty = true ;
110
+ deleted_lat = null ;
111
+ deleted_lon = null ;
112
+ locationInput . deletedText = null ;
113
+
114
+ updateLocationWarning ( ) ;
115
+ respondToHomeUpdate ( false ) ;
116
+ } ) ;
117
+
118
+ $ ( "#location_default_name" ) . on ( "click" , function ( ) {
119
+ $ ( "#location_name" ) . val ( locationInput . countryName ) ;
120
+ $ ( "#location_name_warning" ) . addClass ( "d-none" ) ;
121
+ locationInput . dirty = false ;
122
+ } ) ;
123
+
99
124
$ ( "#home_show" ) . click ( function ( ) {
100
125
var lat = $ ( "#home_lat" ) . val ( ) ,
101
126
lon = $ ( "#home_lon" ) . val ( ) ;
@@ -104,24 +129,34 @@ $(document).ready(function () {
104
129
} ) ;
105
130
106
131
$ ( "#home_delete" ) . click ( function ( ) {
107
- var lat = $ ( "#home_lat" ) . val ( ) ,
108
- lon = $ ( "#home_lon" ) . val ( ) ;
132
+ let lat = $ ( "#home_lat" ) . val ( ) ,
133
+ lon = $ ( "#home_lon" ) . val ( ) ,
134
+ locationName = $ ( "#location_name" ) . val ( ) ;
109
135
110
- $ ( "#home_lat, #home_lon" ) . val ( "" ) ;
136
+ $ ( "#location_name_warning" ) . addClass ( "d-none" ) ;
137
+ $ ( "#home_lat, #home_lon, #location_name" ) . val ( "" ) ;
111
138
deleted_lat = lat ;
112
139
deleted_lon = lon ;
113
- respondToHomeUpdate ( ) ;
140
+ locationInput . deletedText = locationName ;
141
+
142
+ respondToHomeUpdate ( false ) ;
114
143
$ ( "#home_undelete" ) . trigger ( "focus" ) ;
115
144
} ) ;
116
145
117
146
$ ( "#home_undelete" ) . click ( function ( ) {
118
147
$ ( "#home_lat" ) . val ( deleted_lat ) ;
119
148
$ ( "#home_lon" ) . val ( deleted_lon ) ;
149
+ $ ( "#location_name" ) . val ( locationInput . deletedText ) ;
120
150
deleted_lat = null ;
121
151
deleted_lon = null ;
122
- respondToHomeUpdate ( ) ;
152
+ locationInput . deletedText = null ;
153
+
154
+ updateLocationWarning ( ) ;
155
+ respondToHomeUpdate ( false ) ;
123
156
$ ( "#home_delete" ) . trigger ( "focus" ) ;
124
157
} ) ;
158
+
159
+ updateHomeLocation ( ) ;
125
160
} else {
126
161
$ ( "[data-user]" ) . each ( function ( ) {
127
162
var user = $ ( this ) . data ( "user" ) ;
@@ -133,14 +168,18 @@ $(document).ready(function () {
133
168
}
134
169
}
135
170
136
- function respondToHomeUpdate ( ) {
137
- var lat = $ ( "#home_lat" ) . val ( ) . trim ( ) ,
171
+ function respondToHomeUpdate ( updateLocationName = true ) {
172
+ let lat = $ ( "#home_lat" ) . val ( ) . trim ( ) ,
138
173
lon = $ ( "#home_lon" ) . val ( ) . trim ( ) ,
174
+ locationName = $ ( "#location_name" ) . val ( ) . trim ( ) ,
139
175
location ;
140
176
141
177
try {
142
178
if ( lat && lon ) {
143
179
location = L . latLng ( lat , lon ) ;
180
+ if ( updateLocationName ) {
181
+ updateHomeLocation ( ) ;
182
+ }
144
183
}
145
184
$ ( "#home_lat, #home_lon" ) . removeClass ( "is-invalid" ) ;
146
185
} catch ( error ) {
@@ -150,8 +189,11 @@ $(document).ready(function () {
150
189
151
190
$ ( "#home_message" ) . toggleClass ( "invisible" , Boolean ( location ) ) ;
152
191
$ ( "#home_show" ) . prop ( "hidden" , ! location ) ;
153
- $ ( "#home_delete" ) . prop ( "hidden" , ! location ) ;
154
- $ ( "#home_undelete" ) . prop ( "hidden" , ! ( ! location && deleted_lat && deleted_lon ) ) ;
192
+ $ ( "#home_delete" ) . prop ( "hidden" , ! location && ! locationName ) ;
193
+ $ ( "#home_undelete" ) . prop ( "hidden" , ! (
194
+ ( ! location || ! locationName ) &&
195
+ ( ( deleted_lat && deleted_lon ) || locationInput . deletedText )
196
+ ) ) ;
155
197
if ( location ) {
156
198
marker . setLatLng ( [ lat , lon ] ) ;
157
199
marker . addTo ( map ) ;
@@ -178,6 +220,42 @@ $(document).ready(function () {
178
220
}
179
221
}
180
222
223
+ function updateHomeLocation ( ) {
224
+ const lat = $ ( "#home_lat" ) . val ( ) . trim ( ) ;
225
+ const lon = $ ( "#home_lon" ) . val ( ) . trim ( ) ;
226
+ if ( ! lat || ! lon ) {
227
+ return ;
228
+ }
229
+
230
+ const geocodeUrl = `${ OSM . NOMINATIM_URL } reverse?format=json&lat=${ lat } &lon=${ lon } ` ;
231
+
232
+ if ( locationInput . request ) locationInput . request . abort ( ) ;
233
+ locationInput . request = $ . getJSON ( geocodeUrl , function ( data ) {
234
+ locationInput . request = null ;
235
+
236
+ data . display_name = data . display_name || "" ;
237
+ const displayName = data . display_name . split ( "," ) ;
238
+ const locationName = displayName [ displayName . length - 1 ] . trim ( ) ;
239
+
240
+ locationInput . countryName = locationName ;
241
+ $ ( "#location_default_name" ) . text ( locationName ) ;
242
+ if ( locationInput . dirty ) {
243
+ updateLocationWarning ( ) ;
244
+ } else {
245
+ $ ( "#location_name" ) . val ( locationName ) ;
246
+ }
247
+ } ) ;
248
+ }
249
+
250
+ function updateLocationWarning ( ) {
251
+ const locationName = $ ( "#location_name" ) . val ( ) ;
252
+ if ( ! locationInput . dirty || locationName . includes ( locationInput . countryName ) ) {
253
+ $ ( "#location_name_warning" ) . addClass ( "d-none" ) ;
254
+ } else {
255
+ $ ( "#location_name_warning" ) . removeClass ( "d-none" ) ;
256
+ }
257
+ }
258
+
181
259
updateAuthUID ( ) ;
182
260
183
261
$ ( "select#user_auth_provider" ) . on ( "change" , updateAuthUID ) ;
0 commit comments