From d4b3322077ef8a173df6bc90258609b65fe04c3d Mon Sep 17 00:00:00 2001 From: Leon Mika Date: Thu, 19 Jun 2025 14:14:46 +0200 Subject: [PATCH] Converted to a Go app --- fontello-f6bebbfe.zip | Bin 26987 -> 0 bytes go.mod | 22 +++++ go.sum | 37 ++++++++ main.go | 88 ++++++++++++++++++ models/question.go | 58 ++++++++++++ {fontello => public/fontello}/LICENSE.txt | 0 {fontello => public/fontello}/README.txt | 0 {fontello => public/fontello}/config.json | 0 .../fontello}/css/animation.css | 0 .../fontello}/css/fontello-codes.css | 0 .../fontello}/css/fontello-embedded.css | 0 .../fontello}/css/fontello-ie7-codes.css | 0 .../fontello}/css/fontello-ie7.css | 0 .../fontello}/css/fontello.css | 0 {fontello => public/fontello}/demo.html | 0 .../fontello}/font/fontello.eot | Bin .../fontello}/font/fontello.svg | 0 .../fontello}/font/fontello.ttf | Bin .../fontello}/font/fontello.woff | Bin .../fontello}/font/fontello.woff2 | Bin index.html => public/index.html | 0 .../scripts}/controllers/picker.js | 4 +- {scripts => public/scripts}/main.js | 0 style.css => public/style.css | 41 ++++++++ views/end.html | 3 + views/index.html | 5 + views/layout.html | 14 +++ views/question.html | 31 ++++++ 28 files changed, 302 insertions(+), 1 deletion(-) delete mode 100644 fontello-f6bebbfe.zip create mode 100644 go.mod create mode 100644 go.sum create mode 100644 main.go create mode 100644 models/question.go rename {fontello => public/fontello}/LICENSE.txt (100%) rename {fontello => public/fontello}/README.txt (100%) rename {fontello => public/fontello}/config.json (100%) rename {fontello => public/fontello}/css/animation.css (100%) rename {fontello => public/fontello}/css/fontello-codes.css (100%) rename {fontello => public/fontello}/css/fontello-embedded.css (100%) rename {fontello => public/fontello}/css/fontello-ie7-codes.css (100%) rename {fontello => public/fontello}/css/fontello-ie7.css (100%) rename {fontello => public/fontello}/css/fontello.css (100%) rename {fontello => public/fontello}/demo.html (100%) rename {fontello => public/fontello}/font/fontello.eot (100%) rename {fontello => public/fontello}/font/fontello.svg (100%) rename {fontello => public/fontello}/font/fontello.ttf (100%) rename {fontello => public/fontello}/font/fontello.woff (100%) rename {fontello => public/fontello}/font/fontello.woff2 (100%) rename index.html => public/index.html (100%) rename {scripts => public/scripts}/controllers/picker.js (85%) rename {scripts => public/scripts}/main.js (100%) rename style.css => public/style.css (73%) create mode 100644 views/end.html create mode 100644 views/index.html create mode 100644 views/layout.html create mode 100644 views/question.html diff --git a/fontello-f6bebbfe.zip b/fontello-f6bebbfe.zip deleted file mode 100644 index dc92fbc1bdc26cdb17857659e728c1d066913235..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26987 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

svx7m=wSEPXUE6DOm;@ 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 len(questions.Questions) { + return c.SendStatus(http.StatusBadRequest) + } + + rq, err := questions.Questions[idx].Render() + if err != nil { + return err + } + + nextURL := prefix + "/end" + reachedEnd := true + if idx+1 < len(questions.Questions) { + nextURL = fmt.Sprintf("%v/%d", prefix, idx+2) + reachedEnd = true + } + + return c.Render("question", fiber.Map{ + "q": rq, + "nextURL": nextURL, + "reachedEnd": reachedEnd, + }) + }) + app.Static("/assets", "./public") + + log.Fatal(app.Listen(":3000")) +} diff --git a/models/question.go b/models/question.go new file mode 100644 index 0000000..cab122a --- /dev/null +++ b/models/question.go @@ -0,0 +1,58 @@ +package models + +import ( + "errors" + "math/rand" + + "lmika.dev/pkg/modash/moslice" +) + +type QuestionSet struct { + Questions []Question +} + +type Choice struct { + Text string + IsRight bool +} + +type Question struct { + Text string + Choices []Choice + Fact string +} + +func (q Question) Render() (RenderedQuestion, error) { + choices := moslice.MapIndex(q.Choices, func(c Choice, i int) RenderedChoice { + return RenderedChoice{ + ID: i + 1, + Text: c.Text, + } + }) + rand.Shuffle(len(choices), func(i, j int) { + choices[i], choices[j] = choices[j], choices[i] + }) + _, idx, ok := moslice.FindWithIndexWhere(q.Choices, func(c Choice) bool { return c.IsRight }) + if !ok { + return RenderedQuestion{}, errors.New("question does not have a right answer") + } + + return RenderedQuestion{ + Question: q.Text, + Fact: q.Fact, + Choices: choices, + RightChoice: idx + 1, + }, nil +} + +type RenderedChoice struct { + ID int + Text string +} + +type RenderedQuestion struct { + Question string + Fact string + Choices []RenderedChoice + RightChoice int +} diff --git a/fontello/LICENSE.txt b/public/fontello/LICENSE.txt similarity index 100% rename from fontello/LICENSE.txt rename to public/fontello/LICENSE.txt diff --git a/fontello/README.txt b/public/fontello/README.txt similarity index 100% rename from fontello/README.txt rename to public/fontello/README.txt diff --git a/fontello/config.json b/public/fontello/config.json similarity index 100% rename from fontello/config.json rename to public/fontello/config.json diff --git a/fontello/css/animation.css b/public/fontello/css/animation.css similarity index 100% rename from fontello/css/animation.css rename to public/fontello/css/animation.css diff --git a/fontello/css/fontello-codes.css b/public/fontello/css/fontello-codes.css similarity index 100% rename from fontello/css/fontello-codes.css rename to public/fontello/css/fontello-codes.css diff --git a/fontello/css/fontello-embedded.css b/public/fontello/css/fontello-embedded.css similarity index 100% rename from fontello/css/fontello-embedded.css rename to public/fontello/css/fontello-embedded.css diff --git a/fontello/css/fontello-ie7-codes.css b/public/fontello/css/fontello-ie7-codes.css similarity index 100% rename from fontello/css/fontello-ie7-codes.css rename to public/fontello/css/fontello-ie7-codes.css diff --git a/fontello/css/fontello-ie7.css b/public/fontello/css/fontello-ie7.css similarity index 100% rename from fontello/css/fontello-ie7.css rename to public/fontello/css/fontello-ie7.css diff --git a/fontello/css/fontello.css b/public/fontello/css/fontello.css similarity index 100% rename from fontello/css/fontello.css rename to public/fontello/css/fontello.css diff --git a/fontello/demo.html b/public/fontello/demo.html similarity index 100% rename from fontello/demo.html rename to public/fontello/demo.html diff --git a/fontello/font/fontello.eot b/public/fontello/font/fontello.eot similarity index 100% rename from fontello/font/fontello.eot rename to public/fontello/font/fontello.eot diff --git a/fontello/font/fontello.svg b/public/fontello/font/fontello.svg similarity index 100% rename from fontello/font/fontello.svg rename to public/fontello/font/fontello.svg diff --git a/fontello/font/fontello.ttf b/public/fontello/font/fontello.ttf similarity index 100% rename from fontello/font/fontello.ttf rename to public/fontello/font/fontello.ttf diff --git a/fontello/font/fontello.woff b/public/fontello/font/fontello.woff similarity index 100% rename from fontello/font/fontello.woff rename to public/fontello/font/fontello.woff diff --git a/fontello/font/fontello.woff2 b/public/fontello/font/fontello.woff2 similarity index 100% rename from fontello/font/fontello.woff2 rename to public/fontello/font/fontello.woff2 diff --git a/index.html b/public/index.html similarity index 100% rename from index.html rename to public/index.html diff --git a/scripts/controllers/picker.js b/public/scripts/controllers/picker.js similarity index 85% rename from scripts/controllers/picker.js rename to public/scripts/controllers/picker.js index 17e32ee..ba86c7b 100644 --- a/scripts/controllers/picker.js +++ b/public/scripts/controllers/picker.js @@ -1,7 +1,7 @@ import { Controller } from "https://unpkg.com/@hotwired/stimulus/dist/stimulus.js"; export default class extends Controller { - static targets = [ "radio" ]; + static targets = ["radio", "answerDetails"]; static values = { answer: String @@ -25,5 +25,7 @@ export default class extends Controller { } }); }, 1); + + this.answerDetailsTarget.classList.remove("hidden"); } }; \ No newline at end of file diff --git a/scripts/main.js b/public/scripts/main.js similarity index 100% rename from scripts/main.js rename to public/scripts/main.js diff --git a/style.css b/public/style.css similarity index 73% rename from style.css rename to public/style.css index a9cdc70..59cd86c 100644 --- a/style.css +++ b/public/style.css @@ -78,4 +78,45 @@ input[type=radio] { padding: 0; margin: 0; margin-inline-start: -1px; +} + +.hidden { + display: none !important; +} + +/** + * Page transition + */ +@view-transition { + navigation: auto; +} + + +@keyframes move-out { + from { + transform: translateX(0%); + } + + to { + transform: translateX(-100%); + } +} + +@keyframes move-in { + from { + transform: translateX(100%); + } + + to { + transform: translateX(0%); + } +} + +/* Apply the custom animation to the old and new page states */ +::view-transition-old(root) { + animation: 0.3s ease-in both move-out; +} + +::view-transition-new(root) { + animation: 0.3s ease-in both move-in; } \ No newline at end of file diff --git a/views/end.html b/views/end.html new file mode 100644 index 0000000..ea4de5e --- /dev/null +++ b/views/end.html @@ -0,0 +1,3 @@ +

Well Done

+ +

You reached the end

diff --git a/views/index.html b/views/index.html new file mode 100644 index 0000000..ed27459 --- /dev/null +++ b/views/index.html @@ -0,0 +1,5 @@ +

Welcome

+ +

Welcome to the quiz

+ +Lets go \ No newline at end of file diff --git a/views/layout.html b/views/layout.html new file mode 100644 index 0000000..9d05c07 --- /dev/null +++ b/views/layout.html @@ -0,0 +1,14 @@ + + + + + + + + + + + {{embed}} + + + \ No newline at end of file diff --git a/views/question.html b/views/question.html new file mode 100644 index 0000000..14b3bd4 --- /dev/null +++ b/views/question.html @@ -0,0 +1,31 @@ +
+ + +
+ +
+

{{.q.Question}}

+ + {{range .q.Choices}} + + {{end}} + + + + +
+ + \ No newline at end of file