diff options
author | 2022-06-09 12:51:19 +0200 | |
---|---|---|
committer | 2022-06-09 12:51:19 +0200 | |
commit | b43f9ceca9f7e02248f1d88245ede5267e8b72c8 (patch) | |
tree | 1d6b64603e74c45785bf44dde194315344843e1e /internal | |
parent | [chore] gitignore shell.nix (#639) (diff) | |
download | gotosocial-b43f9ceca9f7e02248f1d88245ede5267e8b72c8.tar.xz |
[frontend] Restructure Frontend Sources (#634)
* 🐸restructure frontend stuff, include admin and future user panel in main repo, properly deduplicate bundles for css+js across uses
* rename bundled to dist, caught by gitignore
* re-include status.css for profile template
* default to localhost
* serve frontend panels
* add todo message for abstraction
* refactor oauth registration flow
* oauth restructure
* update footer template
* change panel routes
* remove superfluous css imports
* write bundle to disk from test server, use forked budo-express
* wrap all page content in container
for robustness with addons etc injection other elements in body
* update documentation, goreleaser, Dockerfile
* update template meta tags
* add AGPL-3.0+ license header everywhere
* only attach update listener on EventEmitter
* cleaner config for various frontend bundles
* fix bundler script paths
* Merge commit 'd191931932b9293ce1be44ed08a1e69b9fcc1e25'
* fix up dockerfile, goreleaser
* go mod tidy
* add uglifyify
* move status hide/show js to frontend bundle
* fix stylesheet color( func regressions
* update contributing docs for new build path
* update goreleaser + docker building
* resolve dependency paths properly
* update package name
* use api errorhandler
Co-authored-by: tsmethurst <tobi.smethurst@protonmail.com>
Diffstat (limited to 'internal')
-rw-r--r-- | internal/web/base.go | 67 | ||||
-rw-r--r-- | internal/web/profile.go | 7 | ||||
-rw-r--r-- | internal/web/thread.go | 14 |
3 files changed, 71 insertions, 17 deletions
diff --git a/internal/web/base.go b/internal/web/base.go index a8d99619c..8e7e539f6 100644 --- a/internal/web/base.go +++ b/internal/web/base.go @@ -27,7 +27,6 @@ import ( "strings" "github.com/gin-gonic/gin" - "github.com/sirupsen/logrus" "github.com/superseriousbusiness/gotosocial/internal/api" "github.com/superseriousbusiness/gotosocial/internal/config" "github.com/superseriousbusiness/gotosocial/internal/gtserror" @@ -104,14 +103,10 @@ func New(processor processing.Processor) (api.ClientModule, error) { } func (m *Module) baseHandler(c *gin.Context) { - l := logrus.WithField("func", "BaseGETHandler") - l.Trace("serving index html") - host := config.GetHost() instance, err := m.processor.InstanceGet(c.Request.Context(), host) if err != nil { - l.Debugf("error getting instance from processor: %s", err) - c.JSON(http.StatusInternalServerError, gin.H{"error": "internal server error"}) + api.ErrorHandler(c, gtserror.NewErrorInternalError(err), m.processor.InstanceGet) return } @@ -120,16 +115,66 @@ func (m *Module) baseHandler(c *gin.Context) { }) } +// TODO: abstract the {admin, user}panel handlers in some way +func (m *Module) AdminPanelHandler(c *gin.Context) { + host := config.GetHost() + instance, err := m.processor.InstanceGet(c.Request.Context(), host) + if err != nil { + api.ErrorHandler(c, gtserror.NewErrorInternalError(err), m.processor.InstanceGet) + return + } + + c.HTML(http.StatusOK, "frontend.tmpl", gin.H{ + "instance": instance, + "stylesheets": []string{ + "/assets/Fork-Awesome/css/fork-awesome.min.css", + "/assets/dist/panels-admin-style.css", + }, + "javascript": []string{ + "/assets/dist/bundle.js", + "/assets/dist/admin-panel.js", + }, + }) +} + +func (m *Module) UserPanelHandler(c *gin.Context) { + host := config.GetHost() + instance, err := m.processor.InstanceGet(c.Request.Context(), host) + if err != nil { + api.ErrorHandler(c, gtserror.NewErrorInternalError(err), m.processor.InstanceGet) + return + } + + c.HTML(http.StatusOK, "frontend.tmpl", gin.H{ + "instance": instance, + "stylesheets": []string{ + "/assets/Fork-Awesome/css/fork-awesome.min.css", + "/assets/dist/_colors.css", + "/assets/dist/base.css", + "/assets/dist/panels-user-style.css", + }, + "javascript": []string{ + "/assets/dist/bundle.js", + "/assets/dist/user-panel.js", + }, + }) +} + // Route satisfies the RESTAPIModule interface func (m *Module) Route(s router.Router) error { // serve static files from assets dir at /assets s.AttachStaticFS("/assets", fileSystem{http.Dir(m.assetsPath)}) - // serve admin panel from within assets dir at /admin/ - // and redirect /admin to /admin/ - s.AttachStaticFS("/admin/", fileSystem{http.Dir(m.adminPath)}) - s.AttachHandler(http.MethodGet, "/admin", func(c *gin.Context) { - c.Redirect(http.StatusMovedPermanently, "/admin/") + s.AttachHandler(http.MethodGet, "/admin", m.AdminPanelHandler) + // redirect /admin/ to /admin + s.AttachHandler(http.MethodGet, "/admin/", func(c *gin.Context) { + c.Redirect(http.StatusMovedPermanently, "/admin") + }) + + s.AttachHandler(http.MethodGet, "/user", m.UserPanelHandler) + // redirect /settings/ to /settings + s.AttachHandler(http.MethodGet, "/user/", func(c *gin.Context) { + c.Redirect(http.StatusMovedPermanently, "/user") }) // serve front-page diff --git a/internal/web/profile.go b/internal/web/profile.go index 051d55d28..ce3fe645b 100644 --- a/internal/web/profile.go +++ b/internal/web/profile.go @@ -108,8 +108,11 @@ func (m *Module) profileGETHandler(c *gin.Context) { "statuses": statusResp.Items, "stylesheets": []string{ "/assets/Fork-Awesome/css/fork-awesome.min.css", - "/assets/status.css", - "/assets/profile.css", + "/assets/dist/status.css", + "/assets/dist/profile.css", + }, + "javascript": []string{ + "/assets/dist/frontend.js", }, }) } diff --git a/internal/web/thread.go b/internal/web/thread.go index 5e953ee06..3db4952c7 100644 --- a/internal/web/thread.go +++ b/internal/web/thread.go @@ -105,10 +105,16 @@ func (m *Module) threadGETHandler(c *gin.Context) { } c.HTML(http.StatusOK, "thread.tmpl", gin.H{ - "instance": instance, - "status": status, - "context": context, - "stylesheets": []string{"/assets/Fork-Awesome/css/fork-awesome.min.css", "/assets/status.css"}, + "instance": instance, + "status": status, + "context": context, + "stylesheets": []string{ + "/assets/Fork-Awesome/css/fork-awesome.min.css", + "/assets/dist/status.css", + }, + "javascript": []string{ + "/assets/dist/frontend.js", + }, }) } |