add search
This commit is contained in:
@@ -40,6 +40,7 @@ import logging
|
||||
import multiprocessing as mp
|
||||
from collections import defaultdict
|
||||
from html import unescape
|
||||
from pathlib import Path
|
||||
from urllib.parse import urljoin, urlparse, urldefrag
|
||||
from urllib.robotparser import RobotFileParser
|
||||
from dotenv import load_dotenv
|
||||
@@ -54,7 +55,11 @@ try:
|
||||
except ImportError:
|
||||
BeautifulSoup = None
|
||||
|
||||
# .env zuerst aus dem Arbeitsverzeichnis laden (Standard), zusätzlich aus
|
||||
# dem Projektordner – so findet der Prozess die Konfiguration auch dann,
|
||||
# wenn er von woanders gestartet wird (z. B. via systemd).
|
||||
load_dotenv()
|
||||
load_dotenv(Path(__file__).resolve().parent / ".env")
|
||||
|
||||
|
||||
# ============================================================
|
||||
|
||||
+26
-2
@@ -198,10 +198,11 @@ function urlFor(page) {
|
||||
}
|
||||
|
||||
function render(data) {
|
||||
const query = data.query || "";
|
||||
meta.textContent = data.total
|
||||
? data.total + " Ergebnisse in " + data.took_ms + " ms"
|
||||
+ (data.pages > 1 ? " – Seite " + data.page + "/" + data.pages : "")
|
||||
: "Keine Ergebnisse für „" + data.query + "“";
|
||||
: "Keine Ergebnisse für „" + query + "“";
|
||||
|
||||
results.innerHTML = "";
|
||||
|
||||
@@ -271,8 +272,31 @@ function render(data) {
|
||||
}
|
||||
}
|
||||
|
||||
function showError(message) {
|
||||
meta.textContent = message;
|
||||
results.innerHTML = "";
|
||||
pagination.innerHTML = "";
|
||||
}
|
||||
|
||||
async function loadPage(page) {
|
||||
const response = await fetch(urlFor(page));
|
||||
let response;
|
||||
try {
|
||||
response = await fetch(urlFor(page));
|
||||
} catch (e) {
|
||||
showError("Suche fehlgeschlagen – Server nicht erreichbar.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!response.ok) {
|
||||
let message = "Suche fehlgeschlagen (HTTP " + response.status + ").";
|
||||
try {
|
||||
const err = await response.json();
|
||||
if (err && err.error) message = err.error;
|
||||
} catch (e) { /* Antwort war kein JSON */ }
|
||||
showError(message);
|
||||
return;
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
currentPage = data.page;
|
||||
render(data);
|
||||
|
||||
@@ -35,12 +35,17 @@ import os
|
||||
import re
|
||||
import time
|
||||
from dataclasses import dataclass, field
|
||||
from pathlib import Path
|
||||
from typing import List, Optional, Tuple
|
||||
|
||||
from dotenv import load_dotenv
|
||||
import psycopg2
|
||||
|
||||
# .env zuerst aus dem Arbeitsverzeichnis laden (Standard), zusätzlich aus
|
||||
# dem Projektordner – so findet der Prozess die Konfiguration auch dann,
|
||||
# wenn er von woanders gestartet wird (z. B. via systemd).
|
||||
load_dotenv()
|
||||
load_dotenv(Path(__file__).resolve().parent.parent / ".env")
|
||||
|
||||
# ============================================================
|
||||
# KONFIGURATION
|
||||
|
||||
Reference in New Issue
Block a user