94 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package frontend
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"io/ioutil"
 | |
| 	"net/http"
 | |
| 
 | |
| 	"html/template"
 | |
| 
 | |
| 	"github.com/gin-gonic/gin"
 | |
| 	"github.com/rakyll/statik/fs"
 | |
| 
 | |
| 	"github.com/tweag/gerrit-queue/gerrit"
 | |
| 	"github.com/tweag/gerrit-queue/misc"
 | |
| 	_ "github.com/tweag/gerrit-queue/statik" // register static assets
 | |
| 	"github.com/tweag/gerrit-queue/submitqueue"
 | |
| )
 | |
| 
 | |
| //loadTemplate loads a list of templates, relative to the statikFS root, and a FuncMap, and returns a template object
 | |
| func loadTemplate(templateNames []string, funcMap template.FuncMap) (*template.Template, error) {
 | |
| 	if len(templateNames) == 0 {
 | |
| 		return nil, fmt.Errorf("templateNames can't be empty")
 | |
| 	}
 | |
| 	tmpl := template.New(templateNames[0]).Funcs(funcMap)
 | |
| 	statikFS, err := fs.New()
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 
 | |
| 	for _, templateName := range templateNames {
 | |
| 		r, err := statikFS.Open("/" + templateName)
 | |
| 		if err != nil {
 | |
| 			return nil, err
 | |
| 		}
 | |
| 		defer r.Close()
 | |
| 		contents, err := ioutil.ReadAll(r)
 | |
| 		if err != nil {
 | |
| 			return nil, err
 | |
| 		}
 | |
| 		tmpl, err = tmpl.Parse(string(contents))
 | |
| 		if err != nil {
 | |
| 			return nil, err
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return tmpl, nil
 | |
| }
 | |
| 
 | |
| // MakeFrontend returns a http.Handler
 | |
| func MakeFrontend(rotatingLogHandler *misc.RotatingLogHandler, gerritClient *gerrit.Client, runner *submitqueue.Runner) http.Handler {
 | |
| 	router := gin.Default()
 | |
| 
 | |
| 	projectName := gerritClient.GetProjectName()
 | |
| 	branchName := gerritClient.GetBranchName()
 | |
| 
 | |
| 	router.GET("/", func(c *gin.Context) {
 | |
| 		var wipSerie *gerrit.Serie = nil
 | |
| 		HEAD := ""
 | |
| 		currentlyRunning := runner.IsCurrentlyRunning()
 | |
| 
 | |
| 		// don't trigger operations requiring a lock
 | |
| 		if !currentlyRunning {
 | |
| 			wipSerie = runner.GetWIPSerie()
 | |
| 			HEAD = gerritClient.GetHEAD()
 | |
| 		}
 | |
| 
 | |
| 		funcMap := template.FuncMap{
 | |
| 			"changesetURL": func(changeset *gerrit.Changeset) string {
 | |
| 				return gerritClient.GetChangesetURL(changeset)
 | |
| 			},
 | |
| 		}
 | |
| 
 | |
| 		tmpl := template.Must(loadTemplate([]string{
 | |
| 			"submit-queue.tmpl.html",
 | |
| 			"serie.tmpl.html",
 | |
| 			"changeset.tmpl.html",
 | |
| 		}, funcMap))
 | |
| 
 | |
| 		tmpl.ExecuteTemplate(c.Writer, "submit-queue.tmpl.html", gin.H{
 | |
| 			// Config
 | |
| 			"projectName": projectName,
 | |
| 			"branchName":  branchName,
 | |
| 
 | |
| 			// State
 | |
| 			"currentlyRunning": currentlyRunning,
 | |
| 			"wipSerie":         wipSerie,
 | |
| 			"HEAD":             HEAD,
 | |
| 
 | |
| 			// History
 | |
| 			"memory": rotatingLogHandler,
 | |
| 		})
 | |
| 	})
 | |
| 	return router
 | |
| }
 |