mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-04 05:18:25 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			118 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2014 Dustin Webber
 | 
						|
// Copyright 2015 The Macaron Authors
 | 
						|
//
 | 
						|
// Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
// you may not use this file except in compliance with the License.
 | 
						|
// You may obtain a copy of the License at
 | 
						|
//
 | 
						|
//     http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
//
 | 
						|
// Unless required by applicable law or agreed to in writing, software
 | 
						|
// distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
// See the License for the specific language governing permissions and
 | 
						|
// limitations under the License.
 | 
						|
 | 
						|
// Package bindata is a helper module that allows to use in-memory static and template files for Macaron.
 | 
						|
package bindata
 | 
						|
 | 
						|
import (
 | 
						|
	"bytes"
 | 
						|
	"fmt"
 | 
						|
	"io"
 | 
						|
	"os"
 | 
						|
 | 
						|
	"github.com/elazarl/go-bindata-assetfs"
 | 
						|
	"gopkg.in/macaron.v1"
 | 
						|
)
 | 
						|
 | 
						|
const _VERSION = "0.1.1"
 | 
						|
 | 
						|
func Version() string {
 | 
						|
	return _VERSION
 | 
						|
}
 | 
						|
 | 
						|
type (
 | 
						|
	templateFileSystem struct {
 | 
						|
		files []macaron.TemplateFile
 | 
						|
	}
 | 
						|
 | 
						|
	templateFile struct {
 | 
						|
		name string
 | 
						|
		data []byte
 | 
						|
		ext  string
 | 
						|
	}
 | 
						|
 | 
						|
	Options struct {
 | 
						|
		// Asset should return content of file in path if exists
 | 
						|
		Asset func(path string) ([]byte, error)
 | 
						|
		// AssetDir should return list of files in the path
 | 
						|
		AssetDir func(path string) ([]string, error)
 | 
						|
		// AssetInfo should return the info of file in path if exists
 | 
						|
		AssetInfo func(path string) (os.FileInfo, error)
 | 
						|
		// AssetNames should return list of all asset names
 | 
						|
		AssetNames func() []string
 | 
						|
		// Prefix would be prepended to http requests
 | 
						|
		Prefix string
 | 
						|
	}
 | 
						|
)
 | 
						|
 | 
						|
func Static(opt Options) *assetfs.AssetFS {
 | 
						|
	fs := &assetfs.AssetFS{
 | 
						|
		Asset:     opt.Asset,
 | 
						|
		AssetDir:  opt.AssetDir,
 | 
						|
		AssetInfo: opt.AssetInfo,
 | 
						|
		Prefix:    opt.Prefix,
 | 
						|
	}
 | 
						|
 | 
						|
	return fs
 | 
						|
}
 | 
						|
 | 
						|
func (templates templateFileSystem) ListFiles() []macaron.TemplateFile {
 | 
						|
	return templates.files
 | 
						|
}
 | 
						|
 | 
						|
func (templates templateFileSystem) Get(name string) (io.Reader, error) {
 | 
						|
	for i := range templates.files {
 | 
						|
		if templates.files[i].Name()+templates.files[i].Ext() == name {
 | 
						|
			return bytes.NewReader(templates.files[i].Data()), nil
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return nil, fmt.Errorf("file '%s' not found", name)
 | 
						|
}
 | 
						|
 | 
						|
func (f *templateFile) Name() string {
 | 
						|
	return f.name
 | 
						|
}
 | 
						|
 | 
						|
func (f *templateFile) Data() []byte {
 | 
						|
	return f.data
 | 
						|
}
 | 
						|
 | 
						|
func (f *templateFile) Ext() string {
 | 
						|
	return f.ext
 | 
						|
}
 | 
						|
 | 
						|
func Templates(opt Options) templateFileSystem {
 | 
						|
	fs := templateFileSystem{}
 | 
						|
	fs.files = make([]macaron.TemplateFile, 0, 10)
 | 
						|
 | 
						|
	list := opt.AssetNames()
 | 
						|
 | 
						|
	for _, key := range list {
 | 
						|
		ext := macaron.GetExt(key)
 | 
						|
 | 
						|
		data, err := opt.Asset(key)
 | 
						|
 | 
						|
		if err != nil {
 | 
						|
			continue
 | 
						|
		}
 | 
						|
 | 
						|
		name := (key[0 : len(key)-len(ext)])
 | 
						|
 | 
						|
		fs.files = append(fs.files, &templateFile{name, data, ext})
 | 
						|
	}
 | 
						|
 | 
						|
	return fs
 | 
						|
}
 |