mirror of
https://github.com/strongdm/comply
synced 2024-11-24 16:44:53 +00:00
101 lines
2.5 KiB
Go
101 lines
2.5 KiB
Go
package ace
|
|
|
|
import "html/template"
|
|
|
|
// Defaults
|
|
const (
|
|
defaultExtension = "ace"
|
|
defaultDelimLeft = "{{"
|
|
defaultDelimRight = "}}"
|
|
defaultAttributeNameClass = "class"
|
|
)
|
|
|
|
// Default NoCloseTagNames
|
|
var defaultNoCloseTagNames = []string{
|
|
"br",
|
|
"hr",
|
|
"img",
|
|
"input",
|
|
"link",
|
|
"meta",
|
|
}
|
|
|
|
// Options represents options for the template engine.
|
|
type Options struct {
|
|
// Extension represents an extension of files.
|
|
Extension string
|
|
// DelimLeft represents a left delimiter for the html template.
|
|
DelimLeft string
|
|
// DelimRight represents a right delimiter for the html template.
|
|
DelimRight string
|
|
// AttributeNameClass is the attribute name for classes.
|
|
AttributeNameClass string
|
|
// NoCloseTagNames defines a set of tags which should not be closed.
|
|
NoCloseTagNames []string
|
|
// DynamicReload represents a flag which means whether Ace reloads
|
|
// templates dynamically.
|
|
// This option should only be true in development.
|
|
DynamicReload bool
|
|
// BaseDir represents a base directory of the Ace templates.
|
|
BaseDir string
|
|
// Indent string used for indentation.
|
|
Indent string
|
|
formatter outputFormatter
|
|
// Asset loads and returns the asset for the given name.
|
|
// If this function is set, Ace load the template data from
|
|
// this function instead of the template files.
|
|
Asset func(name string) ([]byte, error)
|
|
// FuncMap represents a template.FuncMap which is set to
|
|
// the result template.
|
|
FuncMap template.FuncMap
|
|
}
|
|
|
|
// InitializeOptions initializes the options.
|
|
func InitializeOptions(opts *Options) *Options {
|
|
if opts == nil {
|
|
opts = &Options{}
|
|
}
|
|
|
|
if opts.Extension == "" {
|
|
opts.Extension = defaultExtension
|
|
}
|
|
|
|
if opts.DelimLeft == "" {
|
|
opts.DelimLeft = defaultDelimLeft
|
|
}
|
|
|
|
if opts.DelimRight == "" {
|
|
opts.DelimRight = defaultDelimRight
|
|
}
|
|
|
|
if opts.AttributeNameClass == "" {
|
|
opts.AttributeNameClass = defaultAttributeNameClass
|
|
}
|
|
if opts.NoCloseTagNames == nil {
|
|
opts.NoCloseTagNames = make([]string, len(defaultNoCloseTagNames))
|
|
copy(opts.NoCloseTagNames, defaultNoCloseTagNames)
|
|
}
|
|
|
|
if opts.Indent != "" {
|
|
opts.formatter = newFormatter(opts.Indent)
|
|
}
|
|
|
|
return opts
|
|
}
|
|
|
|
// AddNoCloseTagName appends name to .NoCloseTagNames set.
|
|
func (opts *Options) AddNoCloseTagName(name string) {
|
|
opts.NoCloseTagNames = append(opts.NoCloseTagNames, name)
|
|
}
|
|
|
|
// DeleteNoCloseTagName deletes name from .NoCloseTagNames set.
|
|
func (opts *Options) DeleteNoCloseTagName(name string) {
|
|
var newset []string
|
|
for _, n := range opts.NoCloseTagNames {
|
|
if n != name {
|
|
newset = append(newset, n)
|
|
}
|
|
}
|
|
opts.NoCloseTagNames = newset
|
|
}
|