1// Copyright 2020 The Gitea Authors. All rights reserved. 2// Use of this source code is governed by a MIT-style 3// license that can be found in the LICENSE file. 4 5package templates 6 7import ( 8 "os" 9 "strings" 10 "time" 11 12 "code.gitea.io/gitea/modules/log" 13 "code.gitea.io/gitea/modules/setting" 14 "code.gitea.io/gitea/modules/util" 15 16 "github.com/unrolled/render" 17) 18 19// Vars represents variables to be render in golang templates 20type Vars map[string]interface{} 21 22// Merge merges another vars to the current, another Vars will override the current 23func (vars Vars) Merge(another map[string]interface{}) Vars { 24 for k, v := range another { 25 vars[k] = v 26 } 27 return vars 28} 29 30// BaseVars returns all basic vars 31func BaseVars() Vars { 32 var startTime = time.Now() 33 return map[string]interface{}{ 34 "IsLandingPageHome": setting.LandingPageURL == setting.LandingPageHome, 35 "IsLandingPageExplore": setting.LandingPageURL == setting.LandingPageExplore, 36 "IsLandingPageOrganizations": setting.LandingPageURL == setting.LandingPageOrganizations, 37 38 "ShowRegistrationButton": setting.Service.ShowRegistrationButton, 39 "ShowMilestonesDashboardPage": setting.Service.ShowMilestonesDashboardPage, 40 "ShowFooterBranding": setting.ShowFooterBranding, 41 "ShowFooterVersion": setting.ShowFooterVersion, 42 43 "EnableSwagger": setting.API.EnableSwagger, 44 "EnableOpenIDSignIn": setting.Service.EnableOpenIDSignIn, 45 "PageStartTime": startTime, 46 } 47} 48 49func getDirAssetNames(dir string) []string { 50 var tmpls []string 51 f, err := os.Stat(dir) 52 if err != nil { 53 if os.IsNotExist(err) { 54 return tmpls 55 } 56 log.Warn("Unable to check if templates dir %s is a directory. Error: %v", dir, err) 57 return tmpls 58 } 59 if !f.IsDir() { 60 log.Warn("Templates dir %s is a not directory.", dir) 61 return tmpls 62 } 63 64 files, err := util.StatDir(dir) 65 if err != nil { 66 log.Warn("Failed to read %s templates dir. %v", dir, err) 67 return tmpls 68 } 69 for _, filePath := range files { 70 if strings.HasPrefix(filePath, "mail/") { 71 continue 72 } 73 74 if !strings.HasSuffix(filePath, ".tmpl") { 75 continue 76 } 77 78 tmpls = append(tmpls, "templates/"+filePath) 79 } 80 return tmpls 81} 82 83// HTMLRenderer returns a render. 84func HTMLRenderer() *render.Render { 85 return render.New(render.Options{ 86 Extensions: []string{".tmpl"}, 87 Directory: "templates", 88 Funcs: NewFuncMap(), 89 Asset: GetAsset, 90 AssetNames: GetAssetNames, 91 IsDevelopment: !setting.IsProd, 92 DisableHTTPErrorRendering: true, 93 }) 94} 95