import json, asyncdispatch, asynchttpserver, options, strutils, httpcore import nimhafas import types, translations import moustachu, moustachu_context import assets proc getPoint* (name: string): Future[Point] {.async} = let points = (await suggestions(SuggestionsParams( query: name, results: some(1), addresses: some(false), poi: some(false) ))) if points.len > 0: result = points[0] else: raise newException(notFoundException, "Zur Eingabe: \"" & name & "\" konnte nichts gefunden werden.") proc addTranslations* (old: JsonNode, new: JsonNode): JsonNode = for key, value in pairs(new): old.add("LABEL_" & key, value) return old template parseProduct* (data: untyped, form: untyped, name: string, new_name: string="") = if new_name != "": if form.hasKey(name) != true: data.add(new_name, %false) else: data.add(new_name, %true) else: if form.hasKey(name) != true: data.add(name, %false) else: data.add(name, %true) template languageHandler* () = let cookies = cookies(request) if cookies.hasKey("lang") and availableTranslations.contains(cookies["lang"]): lang = cookies["lang"] if requestParams.hasKey("lang") and availableTranslations.contains(requestParams["lang"]): lang = requestParams["lang"] setCookie("lang", lang, daysForward(90)) proc respError* (request: Request, httpCode: HttpCode, header: string, body: string) {.async.} = let response = render(readFile("templates/error.tpl"), %* { "HEAD": header, "BODY": body }) await request.respond(httpCode, response) proc respTemplate* (request: Request, httpCode: HttpCode, name: string, templateContext: JsonNode, lang: string="", headers: HttpHeaders=newHttpHeaders()) {.async.} = var templateContext = templateContext if lang != "": templateContext = templateContext.addTranslations(translations["global"][lang]) templateContext = templateContext.addTranslations(translations[name][lang]) var response: string if name == "search": response = render(templateSearch , templateContext) elif name == "journeys": response = render(templateJourneys, templateContext) elif name == "journey": response = render(templateJourney, templateContext) else: response = render(templateError, templateContext) await request.respond(httpCode, response, newHttpHeaders([("Content-Type", "text/html; charset=UTF-8")]))