From d27e48fefc0566497909642d0257d937af36455d Mon Sep 17 00:00:00 2001 From: Fornax Date: Tue, 19 Feb 2019 23:10:04 +0100 Subject: [PATCH] Standardize file viewer template data and fix opengraph funcs --- res/static/script/compiled/home.js | 2 +- res/template/file_viewer.html | 2 +- webcontroller/file_viewer.go | 64 ++++++++++++++++-------------- webcontroller/list_viewer.go | 29 ++++++-------- webcontroller/opengraph.go | 38 +++++++++--------- webcontroller/template_data.go | 5 ++- 6 files changed, 71 insertions(+), 69 deletions(-) diff --git a/res/static/script/compiled/home.js b/res/static/script/compiled/home.js index 9ae98e0..3150e4a 100644 --- a/res/static/script/compiled/home.js +++ b/res/static/script/compiled/home.js @@ -300,7 +300,7 @@ var UploadWorker = /** @class */ (function () { }; UploadWorker.prototype.newFile = function () { var file = this.manager.grabFile(); - if (file === undefined) { + if (file === undefined) { // No more files in the queue. We're finished this.uploading = false; console.debug("No files left in queue"); return; // Stop the thread diff --git a/res/template/file_viewer.html b/res/template/file_viewer.html index 2350ad5..7818d88 100644 --- a/res/template/file_viewer.html +++ b/res/template/file_viewer.html @@ -178,7 +178,7 @@ {{template "analytics"}} diff --git a/webcontroller/file_viewer.go b/webcontroller/file_viewer.go index 9b759cc..e4fdd8b 100644 --- a/webcontroller/file_viewer.go +++ b/webcontroller/file_viewer.go @@ -2,7 +2,6 @@ package webcontroller import ( "fmt" - "html/template" "net/http" "strings" @@ -11,10 +10,15 @@ import ( "github.com/julienschmidt/httprouter" ) +type viewerData struct { + Type string // file or list + APIResponse interface{} +} + // ServeFileViewer controller for GET /u/:id func (wc *WebController) serveFileViewer(w http.ResponseWriter, r *http.Request, p httprouter.Params) { if p.ByName("id") == "demo" { - wc.serveFileViewerDemo(w) // Required for a-ads.com quality check + wc.serveFileViewerDemo(w, r) // Required for a-ads.com quality check return } @@ -42,34 +46,29 @@ func (wc *WebController) serveFileViewer(w http.ResponseWriter, r *http.Request, return } - var ogData OGData + templateData := wc.newTemplateData(w, r) + templateData.OGData = OpenGraphFromFile(*finfo[0]) var err error if list { - listdata := map[string]interface{}{ - "data": finfo, - "date_created": "now", - "title": "Concatenation of files", - "date_lastview": "now", - "views": 0, + templateData.Title = fmt.Sprintf("%d files in Pixeldrain", len(finfo)) + templateData.Other = viewerData{ + Type: "list", + APIResponse: map[string]interface{}{ + "data": finfo, + "date_created": "now", + "title": "Concatenation of files", + "date_lastview": "now", + "views": 0, + }, } - err = wc.templates.Get().ExecuteTemplate(w, "file_viewer", map[string]interface{}{ - "Title": fmt.Sprintf("%d files in Pixeldrain", len(finfo)), - "UserStyle": userStyle(r), - "APIResponse": listdata, - "Type": "list", - "OGData": ogData.FromFile(*finfo[0]), - "APIEndpoint": template.URL(wc.conf.APIURLExternal), - }) } else { - err = wc.templates.Get().ExecuteTemplate(w, "file_viewer", map[string]interface{}{ - "Title": fmt.Sprintf("%s ~ Pixeldrain file", finfo[0].Name), - "UserStyle": userStyle(r), - "APIResponse": finfo[0], - "Type": "file", - "OGData": ogData.FromFile(*finfo[0]), - "APIEndpoint": template.URL(wc.conf.APIURLExternal), - }) + templateData.Title = fmt.Sprintf("%s ~ Pixeldrain file", finfo[0].Name) + templateData.Other = viewerData{ + Type: "file", + APIResponse: finfo[0], + } } + err = wc.templates.Get().ExecuteTemplate(w, "file_viewer", templateData) if err != nil { log.Error("Error executing template file_viewer: %s", err) } @@ -78,9 +77,11 @@ func (wc *WebController) serveFileViewer(w http.ResponseWriter, r *http.Request, // ServeFileViewerDemo is a dummy API response that responds with info about a // non-existent demo file. This is required by the a-ads ad network to allow for // automatic checking of the presence of the ad unit on this page. -func (wc *WebController) serveFileViewerDemo(w http.ResponseWriter) { - wc.templates.Get().ExecuteTemplate(w, "file_viewer", map[string]interface{}{ - "APIResponse": map[string]interface{}{ +func (wc *WebController) serveFileViewerDemo(w http.ResponseWriter, r *http.Request) { + templateData := wc.newTemplateData(w, r) + templateData.Other = viewerData{ + Type: "file", + APIResponse: map[string]interface{}{ "id": "demo", "name": "Demo file", "date_upload": "2017-01-01 12:34:56", @@ -92,6 +93,9 @@ func (wc *WebController) serveFileViewerDemo(w http.ResponseWriter) { "mime_image": "/res/img/mime/text.png", "thumbnail": "/res/img/mime/text.png", }, - "Type": "file", - }) + } + err := wc.templates.Get().ExecuteTemplate(w, "file_viewer", templateData) + if err != nil { + log.Error("Error rendering demo file: %s", err) + } } diff --git a/webcontroller/list_viewer.go b/webcontroller/list_viewer.go index 8b982aa..c63991c 100644 --- a/webcontroller/list_viewer.go +++ b/webcontroller/list_viewer.go @@ -2,7 +2,6 @@ package webcontroller import ( "fmt" - "html/template" "net/http" "fornaxian.com/pixeldrain-web/pixelapi" @@ -23,22 +22,20 @@ func (wc *WebController) serveListViewer(w http.ResponseWriter, r *http.Request, return } - var ogData OGData - listdata := map[string]interface{}{ - "id": list.ID, - "data": list.Files, - "date_created": list.DateCreated, - "title": list.Title, - "views": 0, + var templateData = wc.newTemplateData(w, r) + templateData.Title = fmt.Sprintf("%s ~ Pixeldrain list", list.Title) + templateData.OGData = OpenGraphFromList(*list) + templateData.Other = viewerData{ + Type: "list", + APIResponse: map[string]interface{}{ + "id": list.ID, + "data": list.Files, + "date_created": list.DateCreated, + "title": list.Title, + "views": 0, + }, } - err = wc.templates.Get().ExecuteTemplate(w, "file_viewer", map[string]interface{}{ - "Title": fmt.Sprintf("%s ~ Pixeldrain list", list.Title), - "UserStyle": userStyle(r), - "APIResponse": listdata, - "Type": "list", - "OGData": ogData.FromList(*list), - "APIEndpoint": template.URL(wc.conf.APIURLExternal), - }) + err = wc.templates.Get().ExecuteTemplate(w, "file_viewer", templateData) if err != nil { log.Error("Error executing template file_viewer: %s", err) } diff --git a/webcontroller/opengraph.go b/webcontroller/opengraph.go index 9214dd5..c0f7127 100644 --- a/webcontroller/opengraph.go +++ b/webcontroller/opengraph.go @@ -15,26 +15,24 @@ type OGData struct { Image string } -// FromFile populates the OGData object from FileInfo. It returns itself for -// compactness. -func (d *OGData) FromFile(f pixelapi.FileInfo) *OGData { - d.Title = f.Name - d.Type = "website" - d.SiteName = "Pixeldrain" - d.Description = "View " + f.Name + " on Pixeldrain" - d.URL = "/u/" + f.ID - d.Image = "/api/file/" + f.ID + "/thumbnail" - return d +// OpenGraphFromFile populates the OGData object from FileInfo +func OpenGraphFromFile(f pixelapi.FileInfo) (og OGData) { + og.Title = f.Name + og.Type = "website" + og.SiteName = "Pixeldrain" + og.Description = "View " + f.Name + " on Pixeldrain" + og.URL = "/u/" + f.ID + og.Image = "/api/file/" + f.ID + "/thumbnail" + return og } -// FromList populated the OGData object from a List. It returns itself for -// compactness. -func (d *OGData) FromList(l pixelapi.List) *OGData { - d.Title = l.Title - d.Type = "website" - d.SiteName = "Pixeldrain" - d.Description = "View " + l.Title + " on Pixeldrain" - d.URL = "/l/" + l.ID - d.Image = "/api/file/" + l.Files[0].ID + "/thumbnail" - return d +// OpenGraphFromList populates the OGData object from a List +func OpenGraphFromList(l pixelapi.List) (og OGData) { + og.Title = l.Title + og.Type = "website" + og.SiteName = "Pixeldrain" + og.Description = "View " + l.Title + " on Pixeldrain" + og.URL = "/l/" + l.ID + og.Image = "/api/file/" + l.Files[0].ID + "/thumbnail" + return og } diff --git a/webcontroller/template_data.go b/webcontroller/template_data.go index ffdd5f5..8749db7 100644 --- a/webcontroller/template_data.go +++ b/webcontroller/template_data.go @@ -21,7 +21,10 @@ type TemplateData struct { Other interface{} URLQuery url.Values - Title string + + // Only used on file viewer page + Title string + OGData OGData } func (wc *WebController) newTemplateData(w http.ResponseWriter, r *http.Request) *TemplateData {