Aleksmorshen commited on
Commit
7f3a24b
·
verified ·
1 Parent(s): 1d6508e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +61 -62
app.py CHANGED
@@ -116,12 +116,19 @@ html_template = '''
116
  .popup-form button:hover {
117
  background-color: #0056b3;
118
  }
119
- #search-input {
120
  margin: 20px;
 
 
 
 
 
121
  padding: 8px;
122
- width: calc(100% - 40px);
123
  border: 1px solid #ccc;
124
  border-radius: 5px;
 
 
125
  }
126
  #search-button {
127
  padding: 8px 12px;
@@ -130,18 +137,31 @@ html_template = '''
130
  border: none;
131
  border-radius: 5px;
132
  cursor: pointer;
 
133
  }
134
  #search-button:hover {
135
  background-color: #0056b3;
136
  }
137
  #search-results {
138
  margin: 20px;
 
 
 
 
 
 
 
 
 
 
 
 
139
  }
140
  </style>
141
  </head>
142
  <body>
143
  <h1>GeoGram</h1>
144
- <div>
145
  <input type="text" id="search-input" placeholder="Поиск по названию или описанию" />
146
  <button id="search-button">Поиск</button>
147
  </div>
@@ -244,62 +264,55 @@ html_template = '''
244
  });
245
 
246
  // Удаление метки
247
- function removeMarker(id) {
248
- fetch(`/remove_marker/${id}`, {
249
- method: 'DELETE'
 
 
 
 
250
  }).then(() => {
251
- location.reload();
252
  });
253
  }
254
 
255
- // Функция для поиска меток
256
- function searchMarkers(query) {
257
- fetch(`/search_markers?query=${encodeURIComponent(query)}`)
 
258
  .then(response => response.json())
259
  .then(data => {
260
- const resultsDiv = document.getElementById('search-results');
261
- resultsDiv.innerHTML = ''; // Очистить предыдущие результаты
262
- if (data.length > 0) {
263
- data.forEach(marker => {
264
- const resultItem = document.createElement('div');
265
- resultItem.innerHTML = `<b>${marker.name}</b>: ${marker.description} <button onclick="showMarker(${marker.id})">Показать на карте</button>`;
266
- resultsDiv.appendChild(resultItem);
267
- });
268
- } else {
269
- resultsDiv.innerHTML = '<p>Нет результатов</p>';
270
- }
271
- });
272
- }
273
 
274
- // Обработчик события для кнопки поиска
275
- document.getElementById('search-button').onclick = function() {
276
- const query = document.getElementById('search-input').value;
277
- searchMarkers(query);
278
- };
 
279
 
280
- // Функция для показа метки на карте
281
- function showMarker(markerId) {
282
- fetch(`/get_markers`)
283
- .then(response => response.json())
284
- .then(data => {
285
- const marker = data.find(m => m.id === markerId);
286
- if (marker) {
287
- map.setView([marker.latitude, marker.longitude], 13);
288
- L.marker([marker.latitude, marker.longitude]).addTo(map)
289
- .bindPopup(`<b>${marker.name}</b><p>${marker.description}</p><a href="https://t.me/${marker.telegram_link}" target="_blank">Перейти в Telegram</a>`);
290
  }
291
  });
292
- }
293
  </script>
294
  </body>
295
  </html>
296
  '''
297
 
 
298
  @app.route('/')
299
  def index():
300
  return render_template_string(html_template)
301
 
302
- @app.route('/get_markers', methods=['GET'])
 
303
  def get_markers():
304
  markers = get_all_markers()
305
  return jsonify([{
@@ -311,6 +324,7 @@ def get_markers():
311
  'longitude': marker[5]
312
  } for marker in markers])
313
 
 
314
  @app.route('/add_marker', methods=['POST'])
315
  def add_marker():
316
  data = request.json
@@ -318,6 +332,7 @@ def add_marker():
318
  description = data['description']
319
  telegram_link = data['telegram_link']
320
  latitude, longitude = data['position']
 
321
  marker_id = add_marker_to_db(name, description, telegram_link, latitude, longitude)
322
  return jsonify({
323
  'id': marker_id,
@@ -328,29 +343,13 @@ def add_marker():
328
  'longitude': longitude
329
  })
330
 
331
- @app.route('/remove_marker/<int:marker_id>', methods=['DELETE'])
332
- def remove_marker(marker_id):
 
 
 
333
  remove_marker_from_db(marker_id)
334
- return '', 204
335
-
336
- @app.route('/search_markers', methods=['GET'])
337
- def search_markers():
338
- query = request.args.get('query', '')
339
- conn = sqlite3.connect('markers.db')
340
- cursor = conn.cursor()
341
- cursor.execute('''SELECT id, name, description, telegram_link, latitude, longitude FROM markers
342
- WHERE name LIKE ? OR description LIKE ?''',
343
- (f'%{query}%', f'%{query}%'))
344
- markers = cursor.fetchall()
345
- conn.close()
346
- return jsonify([{
347
- 'id': marker[0],
348
- 'name': marker[1],
349
- 'description': marker[2],
350
- 'telegram_link': marker[3],
351
- 'latitude': marker[4],
352
- 'longitude': marker[5]
353
- } for marker in markers])
354
 
355
  if __name__ == '__main__':
356
  init_db()
 
116
  .popup-form button:hover {
117
  background-color: #0056b3;
118
  }
119
+ #search-container {
120
  margin: 20px;
121
+ display: flex;
122
+ justify-content: center;
123
+ align-items: center;
124
+ }
125
+ #search-input {
126
  padding: 8px;
127
+ width: 300px;
128
  border: 1px solid #ccc;
129
  border-radius: 5px;
130
+ margin-right: 10px;
131
+ font-size: 14px;
132
  }
133
  #search-button {
134
  padding: 8px 12px;
 
137
  border: none;
138
  border-radius: 5px;
139
  cursor: pointer;
140
+ font-size: 14px;
141
  }
142
  #search-button:hover {
143
  background-color: #0056b3;
144
  }
145
  #search-results {
146
  margin: 20px;
147
+ text-align: center;
148
+ }
149
+ .result-item {
150
+ background: #fff;
151
+ border: 1px solid #ccc;
152
+ border-radius: 5px;
153
+ margin: 10px;
154
+ padding: 10px;
155
+ transition: background 0.3s;
156
+ }
157
+ .result-item:hover {
158
+ background: #f0f0f0;
159
  }
160
  </style>
161
  </head>
162
  <body>
163
  <h1>GeoGram</h1>
164
+ <div id="search-container">
165
  <input type="text" id="search-input" placeholder="Поиск по названию или описанию" />
166
  <button id="search-button">Поиск</button>
167
  </div>
 
264
  });
265
 
266
  // Удаление метки
267
+ function removeMarker(markerId) {
268
+ fetch('/remove_marker', {
269
+ method: 'POST',
270
+ headers: {
271
+ 'Content-Type': 'application/json',
272
+ },
273
+ body: JSON.stringify({ id: markerId })
274
  }).then(() => {
275
+ location.reload(); // Обновление страницы для обновления маркеров
276
  });
277
  }
278
 
279
+ // Поиск по меткам
280
+ document.getElementById('search-button').addEventListener('click', function() {
281
+ const searchTerm = document.getElementById('search-input').value.toLowerCase();
282
+ fetch('/get_markers')
283
  .then(response => response.json())
284
  .then(data => {
285
+ const resultsContainer = document.getElementById('search-results');
286
+ resultsContainer.innerHTML = '';
287
+ const results = data.filter(marker =>
288
+ marker.name.toLowerCase().includes(searchTerm) ||
289
+ marker.description.toLowerCase().includes(searchTerm)
290
+ );
 
 
 
 
 
 
 
291
 
292
+ results.forEach(marker => {
293
+ const resultItem = document.createElement('div');
294
+ resultItem.classList.add('result-item');
295
+ resultItem.innerHTML = `<b>${marker.name}</b><p>${marker.description}</p><a href="https://t.me/${marker.telegram_link}" target="_blank">Перейти в Telegram</a>`;
296
+ resultsContainer.appendChild(resultItem);
297
+ });
298
 
299
+ if (results.length === 0) {
300
+ resultsContainer.innerHTML = '<p>Нет результатов</p>';
 
 
 
 
 
 
 
 
301
  }
302
  });
303
+ });
304
  </script>
305
  </body>
306
  </html>
307
  '''
308
 
309
+ # Маршрут для главной страницы
310
  @app.route('/')
311
  def index():
312
  return render_template_string(html_template)
313
 
314
+ # Маршрут для получения всех меток
315
+ @app.route('/get_markers')
316
  def get_markers():
317
  markers = get_all_markers()
318
  return jsonify([{
 
324
  'longitude': marker[5]
325
  } for marker in markers])
326
 
327
+ # Маршрут для добавления метки
328
  @app.route('/add_marker', methods=['POST'])
329
  def add_marker():
330
  data = request.json
 
332
  description = data['description']
333
  telegram_link = data['telegram_link']
334
  latitude, longitude = data['position']
335
+
336
  marker_id = add_marker_to_db(name, description, telegram_link, latitude, longitude)
337
  return jsonify({
338
  'id': marker_id,
 
343
  'longitude': longitude
344
  })
345
 
346
+ # Маршрут для удаления метки
347
+ @app.route('/remove_marker', methods=['POST'])
348
+ def remove_marker():
349
+ data = request.json
350
+ marker_id = data['id']
351
  remove_marker_from_db(marker_id)
352
+ return jsonify({'success': True})
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
353
 
354
  if __name__ == '__main__':
355
  init_db()