Blame view

go/src/themaru/vendor/github.com/gin-gonic/gin/render/html.go 2.5 KB
476d2547e   김태훈   태마루 시스템 설정 / 업데이트...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
  // Copyright 2014 Manu Martinez-Almeida.  All rights reserved.
  // Use of this source code is governed by a MIT style
  // license that can be found in the LICENSE file.
  
  package render
  
  import (
  	"html/template"
  	"net/http"
  )
  
  // Delims represents a set of Left and Right delimiters for HTML template rendering.
  type Delims struct {
  	// Left delimiter, defaults to {{.
  	Left string
  	// Right delimiter, defaults to }}.
  	Right string
  }
  
  // HTMLRender interface is to be implemented by HTMLProduction and HTMLDebug.
  type HTMLRender interface {
  	// Instance returns an HTML instance.
  	Instance(string, interface{}) Render
  }
  
  // HTMLProduction contains template reference and its delims.
  type HTMLProduction struct {
  	Template *template.Template
  	Delims   Delims
  }
  
  // HTMLDebug contains template delims and pattern and function with file list.
  type HTMLDebug struct {
  	Files   []string
  	Glob    string
  	Delims  Delims
  	FuncMap template.FuncMap
  }
  
  // HTML contains template reference and its name with given interface object.
  type HTML struct {
  	Template *template.Template
  	Name     string
  	Data     interface{}
  }
  
  var htmlContentType = []string{"text/html; charset=utf-8"}
  
  // Instance (HTMLProduction) returns an HTML instance which it realizes Render interface.
  func (r HTMLProduction) Instance(name string, data interface{}) Render {
  	return HTML{
  		Template: r.Template,
  		Name:     name,
  		Data:     data,
  	}
  }
  
  // Instance (HTMLDebug) returns an HTML instance which it realizes Render interface.
  func (r HTMLDebug) Instance(name string, data interface{}) Render {
  	return HTML{
  		Template: r.loadTemplate(),
  		Name:     name,
  		Data:     data,
  	}
  }
  func (r HTMLDebug) loadTemplate() *template.Template {
  	if r.FuncMap == nil {
  		r.FuncMap = template.FuncMap{}
  	}
  	if len(r.Files) > 0 {
  		return template.Must(template.New("").Delims(r.Delims.Left, r.Delims.Right).Funcs(r.FuncMap).ParseFiles(r.Files...))
  	}
  	if r.Glob != "" {
  		return template.Must(template.New("").Delims(r.Delims.Left, r.Delims.Right).Funcs(r.FuncMap).ParseGlob(r.Glob))
  	}
  	panic("the HTML debug render was created without files or glob pattern")
  }
  
  // Render (HTML) executes template and writes its result with custom ContentType for response.
  func (r HTML) Render(w http.ResponseWriter) error {
  	r.WriteContentType(w)
  
  	if r.Name == "" {
  		return r.Template.Execute(w, r.Data)
  	}
  	return r.Template.ExecuteTemplate(w, r.Name, r.Data)
  }
  
  // WriteContentType (HTML) writes HTML ContentType.
  func (r HTML) WriteContentType(w http.ResponseWriter) {
  	writeContentType(w, htmlContentType)
  }