diff --git a/assets/js/matrix.js b/assets/js/matrix.js new file mode 100644 index 0000000..0c21bac --- /dev/null +++ b/assets/js/matrix.js @@ -0,0 +1,44 @@ +const canvas = document.getElementById('matrix-canvas'); +const ctx = canvas.getContext('2d'); + +canvas.width = window.innerWidth; +canvas.height = window.innerHeight; + +const letters = 'ABCDEFGHIJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZ1234567890'; +const fontSize = 16; +let columns = canvas.width / fontSize; + +const drops = []; +for (let x = 0; x < columns; x++) { + drops[x] = 1; +} + +function draw() { + ctx.fillStyle = 'rgba(0, 0, 0, 0.05)'; + ctx.fillRect(0, 0, canvas.width, canvas.height); + + ctx.fillStyle = '#0F0'; // green text + ctx.font = fontSize + 'px arial'; + + for (let i = 0; i < drops.length; i++) { + const text = letters.charAt(Math.floor(Math.random() * letters.length)); + ctx.fillText(text, i * fontSize, drops[i] * fontSize); + + if (drops[i] * fontSize > canvas.height && Math.random() > 0.975) { + drops[i] = 0; + } + drops[i]++; + } +} + +setInterval(draw, 33); + +window.addEventListener('resize', () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + columns = canvas.width / fontSize; + drops.length = 0; + for (let x = 0; x < columns; x++) { + drops[x] = 1; + } +}); diff --git a/http/controller.root.go b/http/controller.root.go new file mode 100644 index 0000000..6b79a8c --- /dev/null +++ b/http/controller.root.go @@ -0,0 +1,27 @@ +package http + +import ( + "net/http" + + "teletype_softwares/domain" + "teletype_softwares/lib/template_utils" +) + +type RootController struct { + service domain.SoftwareServiceInterface +} + +func NewRootController() *RootController { + return &RootController{} +} + +func (c *RootController) index(w http.ResponseWriter, r *http.Request) { + + tmpl, err := template_utils.GetTemplate("root_index", "http/views/shared/layout.html", "http/views/root/index.html") + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + tmpl.Execute(w, nil) +} diff --git a/http/http.go b/http/http.go index f4d8fa9..58ea278 100755 --- a/http/http.go +++ b/http/http.go @@ -11,6 +11,7 @@ func StartHttpServer(domainInstance domain.Domain) { NewSoftwareUpdaterController(domainInstance.SoftwareUpdaterService), NewDownloadController(domainInstance.DownloadService), NewPlayController(domainInstance.SoftwareService), + NewRootController(), ).Init() http_utils.StartGenericHTTPServer(http_utils.StartGenericHTTPServerContext{ diff --git a/http/router.go b/http/router.go index e9d15cb..0b358e2 100755 --- a/http/router.go +++ b/http/router.go @@ -2,6 +2,7 @@ package http import ( "github.com/go-chi/chi/v5" + "net/http" ) type Router struct { @@ -9,6 +10,7 @@ type Router struct { softwareUpdaterController *SoftwareUpdaterController downloadController *DownloadController playController *PlayController + rootController *RootController } func NewRouter( @@ -16,19 +18,22 @@ func NewRouter( softwareUpdaterController *SoftwareUpdaterController, downloadController *DownloadController, playController *PlayController, + rootController *RootController, ) *Router { return &Router{ softwareController: softwareController, softwareUpdaterController: softwareUpdaterController, downloadController: downloadController, playController: playController, + rootController: rootController, } } func (r *Router) Init() *chi.Mux { router := chi.NewRouter() - router.Get("/", r.softwareController.index) + router.Get("/", r.rootController.index) + router.Get("/softwares", r.softwareController.index) router.Get("/update", r.softwareUpdaterController.update) router.Get("/releases/{name}", r.softwareController.releases) router.Get("/download/{name}/source", r.downloadController.GetLatestSource) @@ -38,5 +43,8 @@ func (r *Router) Init() *chi.Mux { router.Get("/play/{name}", r.playController.Play) router.Get("/play/{name}/content*", r.playController.ServeContent) + fs := http.FileServer(http.Dir("assets")) + router.Handle("/assets/*", http.StripPrefix("/assets/", fs)) + return router } diff --git a/http/views/root/index.html b/http/views/root/index.html new file mode 100644 index 0000000..30647f0 --- /dev/null +++ b/http/views/root/index.html @@ -0,0 +1,13 @@ +{{define "content"}} +

Welcome

+ +

+ Welcome to Teletype Games! This site is dedicated to showcasing open-source indie games, + created with enthusiasm and as a hobby project. +

+

+ Explore our collection of unique games, navigate using the top menu to access the Home page, + discover more Softwares, or check out our Youtube channel. +

+ +{{end}} diff --git a/http/views/shared/layout.html b/http/views/shared/layout.html index 774c41c..465e183 100644 --- a/http/views/shared/layout.html +++ b/http/views/shared/layout.html @@ -56,13 +56,57 @@ .text-success { /* Ensure consistency for success text */ color: limegreen !important; } + .header-border, .content-border, .footer-border { + border: 3px solid limegreen !important; + } + .content-border { + background-color: #111; + padding: 1.5rem; + } + #matrix-canvas { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: -1; + } -
-

Teletype Games

+ + +
{{block "content" .}}{{end}}
+ + + + + +