From b46d8767b2fca24a3cfb53167ad59bf7dc32b921 Mon Sep 17 00:00:00 2001 From: manerakai Date: Wed, 30 Aug 2023 13:58:10 +0000 Subject: [PATCH] Added html template git-svn-id: file:///srv/svn/repo/mai/trunk@16 e410bdd4-646f-c54f-a7ce-fffcc4f439ae --- web/go.mod | 1 + web/go.sum | 6 ++ web/main.go | 74 +++++++++++++- web/static/LICENSE | 3 + web/static/favicon.ico | Bin 0 -> 22348 bytes web/static/favicon.svg | 144 ++++++++++++++++++++++++++ web/static/favicon128x128.png | Bin 0 -> 5616 bytes web/static/script.js | 17 ++++ web/static/style.css | 183 ++++++++++++++++++++++++++++++++++ web/views/index.html | 69 +++++++++++++ 10 files changed, 495 insertions(+), 2 deletions(-) create mode 100644 web/static/LICENSE create mode 100644 web/static/favicon.ico create mode 100644 web/static/favicon.svg create mode 100644 web/static/favicon128x128.png create mode 100644 web/static/script.js create mode 100644 web/static/style.css create mode 100644 web/views/index.html diff --git a/web/go.mod b/web/go.mod index 5ef9dc7..6f5cf9a 100644 --- a/web/go.mod +++ b/web/go.mod @@ -5,6 +5,7 @@ go 1.16 require ( codeberg.org/SimpleWeb/SimplyTranslate/engines v0.0.0 github.com/gofiber/fiber/v2 v2.49.0 // indirect + github.com/gofiber/template/html/v2 v2.0.5 ) replace codeberg.org/SimpleWeb/SimplyTranslate/engines v0.0.0 => ../engines diff --git a/web/go.sum b/web/go.sum index b6a6e0e..ecfb273 100644 --- a/web/go.sum +++ b/web/go.sum @@ -6,6 +6,12 @@ github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x0 github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA= github.com/gofiber/fiber/v2 v2.49.0 h1:xBVG2c66GDcWfww56xHvMn52Q0XX7UrSvjj6MD8/5EE= github.com/gofiber/fiber/v2 v2.49.0/go.mod h1:oxpt7wQaEYgdDmq7nMxCGhilYicBLFnZ+jQSJcQDlSE= +github.com/gofiber/template v1.8.2 h1:PIv9s/7Uq6m+Fm2MDNd20pAFFKt5wWs7ZBd8iV9pWwk= +github.com/gofiber/template v1.8.2/go.mod h1:bs/2n0pSNPOkRa5VJ8zTIvedcI/lEYxzV3+YPXdBvq8= +github.com/gofiber/template/html/v2 v2.0.5 h1:BKLJ6Qr940NjntbGmpO3zVa4nFNGDCi/IfUiDB9OC20= +github.com/gofiber/template/html/v2 v2.0.5/go.mod h1:RCF14eLeQDCSUPp0IGc2wbSSDv6yt+V54XB/+Unz+LM= +github.com/gofiber/utils v1.1.0 h1:vdEBpn7AzIUJRhe+CiTOJdUcTg4Q9RK+pEa0KPbLdrM= +github.com/gofiber/utils v1.1.0/go.mod h1:poZpsnhBykfnY1Mc0KeEa6mSHrS3dV0+oBWyeQmb2e0= github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= diff --git a/web/main.go b/web/main.go index 427e330..2b8dad2 100644 --- a/web/main.go +++ b/web/main.go @@ -3,10 +3,14 @@ package main import ( "codeberg.org/SimpleWeb/SimplyTranslate/engines" "github.com/gofiber/fiber/v2" + "github.com/gofiber/template/html/v2" ) func main() { - app := fiber.New() + engine := html.New("./views", ".html") + app := fiber.New(fiber.Config{ + Views: engine, + }) app.All("/api/translate", func(c *fiber.Ctx) error { from := "" @@ -26,7 +30,7 @@ func main() { } else { return c.SendStatus(400) } - if engine == "" { + if _, ok := engines.Engines[engine]; !ok || engine == "" { engine = "google" } if to == "" { @@ -39,5 +43,71 @@ func main() { } }) + app.Get("/api/source_languages", func(c *fiber.Ctx) error { + engine := c.Query("engine") + if _, ok := engines.Engines[engine]; !ok || engine == "" { + engine = "google" + } + if result, err := engines.Engines[engine].SourceLanguages(); err != nil { + return c.SendStatus(500) + } else { + return c.JSON(result) + } + }) + + app.Get("/api/target_languages", func(c *fiber.Ctx) error { + engine := c.Query("engine") + if _, ok := engines.Engines[engine]; !ok || engine == "" { + engine = "google" + } + if result, err := engines.Engines[engine].TargetLanguages(); err != nil { + return c.SendStatus(500) + } else { + return c.JSON(result) + } + }) + + app.All("/", func(c *fiber.Ctx) error { + engine := c.Query("engine") + if _, ok := engines.Engines[engine]; !ok || engine == "" { + engine = "google" + } + targetLanguages, err := engines.Engines[engine].TargetLanguages() + if err != nil { + return c.SendStatus(500) + } + sourceLanguages, err := engines.Engines[engine].SourceLanguages() + if err != nil { + return c.SendStatus(500) + } + originalText := "" + translatedText := "" + from := "" + to := "" + + if c.Method() == "POST" { + from = + c.FormValue("from") + to = c.FormValue("to") + originalText = c.FormValue("text") + if result, err := engines.Engines[engine].Translate(originalText, from, to); err != nil { + return c.SendStatus(500) + } else { + translatedText = result.TranslatedText + } + } + return c.Render("index", fiber.Map{ + "Engine": engine, + "SourceLanguages": targetLanguages, + "TargetLanguages": sourceLanguages, + "OriginalText": originalText, + "TranslatedText": translatedText, + "From": from, + "To": to, + }) + }) + + app.Static("/static", "./static") + app.Listen(":3000") } diff --git a/web/static/LICENSE b/web/static/LICENSE new file mode 100644 index 0000000..690ed1a --- /dev/null +++ b/web/static/LICENSE @@ -0,0 +1,3 @@ +favicon.ico, favicon.svg, favicon128x128.png + Created by "joelchrono12" (https://https://joelchrono12.ml/) + Creative Commons Attribution 4.0 International License (CC BY 4.0) diff --git a/web/static/favicon.ico b/web/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..74c58f49715c5606cb97f20084430827a99cec5c GIT binary patch literal 22348 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 literal 0 HcmV?d00001 diff --git a/web/static/favicon.svg b/web/static/favicon.svg new file mode 100644 index 0000000..ee20376 --- /dev/null +++ b/web/static/favicon.svg @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/static/favicon128x128.png b/web/static/favicon128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..910eb63895c5de7d8e1592bc31bc760806e8bc78 GIT binary patch literal 5616 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 i1~lq_4&~Ylq$yYCMeeg%byT+&psb)FUoHC~ + + + + SimplyTranslate + + + + + + + + + + +
+

SimplyTranslate

+
+ +
+ + + +
+
+ +
+ +
+ +
+ +
+ +
+
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+ +
+ + + + \ No newline at end of file