2014-12-10 17:59:38 +01:00
|
|
|
|
package assets
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
|
|
|
|
"io/ioutil"
|
|
|
|
|
"os"
|
|
|
|
|
"path"
|
|
|
|
|
"path/filepath"
|
|
|
|
|
"strings"
|
|
|
|
|
"time"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type asset struct {
|
|
|
|
|
bytes []byte
|
|
|
|
|
info os.FileInfo
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type bindata_file_info struct {
|
|
|
|
|
name string
|
|
|
|
|
size int64
|
|
|
|
|
mode os.FileMode
|
|
|
|
|
modTime time.Time
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (fi bindata_file_info) Name() string {
|
|
|
|
|
return fi.name
|
|
|
|
|
}
|
|
|
|
|
func (fi bindata_file_info) Size() int64 {
|
|
|
|
|
return fi.size
|
|
|
|
|
}
|
|
|
|
|
func (fi bindata_file_info) Mode() os.FileMode {
|
|
|
|
|
return fi.mode
|
|
|
|
|
}
|
|
|
|
|
func (fi bindata_file_info) ModTime() time.Time {
|
|
|
|
|
return fi.modTime
|
|
|
|
|
}
|
|
|
|
|
func (fi bindata_file_info) IsDir() bool {
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
func (fi bindata_file_info) Sys() interface{} {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-06 14:59:15 +01:00
|
|
|
|
var _text_png = []byte("\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc0\x00\x00\x00\x80\b\x03\x00\x00\x00jZ\x96Y\x00\x00\x00\x06PLTE\x00\x00\x00\xff\xff\xff\xa5ٟ\xdd\x00\x00\x00\x01tRNS\x00@\xe6\xd8f\x00\x00\a\xb2IDATx\x9c\xec\x1c\x89v#!\b\xf2\xe6\xff\u007f\x99MT\xe4\xf4\x984m\x8e\r\xbb\xb5\x13\x83\x1c\xe2\x01\x8c\xf6\x02o\x0e_\x05n\x80\x83\x9aX?j\x1b\xf1w\xda\xde\xe0\x02x\x05iu\xfd\x87\xf5\xa1Է\xb2}\x8b\x86<\xb6\xf2\xb9`,\x80t\xfb\xd7>\xd0\x15J)ߒ\xd5\xe0/`\xd0Gҗ\x87\xae.\xf2\xa3\xb2g\x11\x9e|c\xaa\xa8\xfb\x12D\x1a\xbb\x90\xf0\xba}\xb8\xfep\xdda\xeb\xd9\x06\xa8x2\xeaU5E\xa8Yc\xa9ǽ\xa2k\xeaYoq\r+\x807\xe4f\x01C\xa2\x97T\xdb\xe0\xed\u007f\xed\x17~ڑ\xc40\xdd\x05\x19\xceM\xacR\xa2\xebZ3Yqcp\x8f֜X\xf3\xe3U\b\xd5\a\x94\xaa\xb6\ue532Y\x80ʘQ\x16P\x1asi\xd8R\xa7O\x9dy\xaf#%\x11\x05a)\xd3\x00\x9am\x1b\xf4QK\u00ad\xe3P\xab&e\x01QR\x9e\x9d\xea)\u05f8r\x9f]\xcbG\xad\x10\x94\x00\x00v\xd5V\xe8}\x12\xb7\xe9.\xebh\xedJ\xb7\"=\x02N\xcd\abTLF\xc0\r\x0e[\xad\xf7\x81V\xde*ȱ\xff\x912\xfb\x8d\x93\x01\xcc\xca\xf4\xe5#\xd9\a\x1c\x03Wa\xec\xf3\x03ر\x03ْT}\xdepo\x15\x9a\x8b\xf4\xe09\xf0\xf9\xf0u\xa7\x9f\r\x1f\xa6\xc0b\x0e\x87\xcd\xe5\x05\xc0x\xa3\xfd\xb1|\x90\xc2:mg\xdc\xe9\xb2b\x83P\xeb{#U\xa2\xc93\xb2+\x12\x19\xf4=\xb6\xfeƸA\xa1\x0e\xb5ؽ\x13/%:^+CH\xfb\xc4EAcS\b\x02DbN\xd8\xdbO2\a\x9aWz\xf5\xed\x8a{\xe7\tu\x1f\x1d\x9cߔ\xc9O\xfeA>\x1a\x93\xe7h\xae\xb3\xe4K\xe5\xf3[\x05\xa8nr\xa47\xbd\x12'`\x1a\x9b\x11\xae\x03\x1aP\xa6N\xe4T\x8eqB\xd3\x18\x84*bA\xa58\xc4P?*\xa2\\\xa0G4\xde9\x8a<I诬\xd4)\xeb\xf1\x93y\xc0YM\x90\x17\x9d/d\xa0\xbaEm&\x0f:\xba\x8e4\xd5e\tZ\bh\x81\x92\xb1\xa2Q\x8a\xcd5=Y5\xbac\xa7V\x98H\xa1G\b\b\xbd\xab\xdc\x04\x82V9p\xd2\xc1\x18Op\xf4d\xed\t\x9b\xb8P\xf8~\x9f\xf9K\xc9$\xaes\x00{\xef:\xe3\xa9h\x9e\x9d\xf5\xb6\xd4j%\xd3y\xad⸒\xaf\x99Ο\x9a[\x10\r\xf5\xccE;\xa7\xbc~h\xba\xab\xadx\xde\x04QB\xdfC\xdc\x1e\xfdl\xe1i\"3M\x82B\xa9Ix\x8d~\x9f\x85|\xe5\x9c,\xdb?\x84\x87\x11zI\xf80g\xee\r\xe1\xab\xc0\xb3a\xbc\x13\xbf\x0eh\xbf\a\xd5F\\\xe0\xd0U\xc5MjH(\x19B\xce\xcc \xa7\x89\xc4\xcbg7\x03U\x12\x90k:\x1dM\xd3<\x03i|\x95\x1b\xe7\xb2\xf2\xd5\"Ss\xecL\xb6\xd1\xfd\xf4\x12\xe3V\xee\x1d\xaf\x80\x89\xed?\xa0\xa7\x06\xde\u05cf\x1c1\xe0X\x17CW\xf0\xe7K\xdb\xf4\x9c\xc7@\xd2\xf3\x10\xea\x03\x18O\x9d\xf2\x96;t\x1a\xd3\xea̹\xbc\xae&I\x8a\xc2eJm\x0f\x8cSH\x81\xdd\uf09dĘ\x85\t\x12\xa1\xca\xe0]\x02aF\x13k\x12\xdfs1\tM\xd21w\xb0\xedH\x01\x0e\"\xc1\xfb\xd8\xc6\xed3S[\xc8\xcf\x03|\xb2\x92\xc2V<`\x19\xcc\xe0\x02m\xf1\xa1\x1f\f\xa4\xfd\x013\xc3L\x12\xcb\x1bm/\xb9\xecu\xe2o\xebtJ\x83\x04\xd7v:9\vO\xe1\xa0\xd1\x18E\x1e\xf6\xf2\xbeG\xb5\xe3\xb5´\xb5C[\u007f\xbb\U000dc025\x99\x1a\xe8\xef|\xed}{\x86\x96\xb2i\xea%\x81\xb7\xb9?\x03\xfc\xec\xc0\xe4^x{o\xf4\xab\xc0\xb3\xe1r\xef:\x84\xe6\xd7/\x83\xe4\xb6\x13~\x98>\x86\xafƹ\x18t\x18\xbbB\x9dEU\xa5\xcaS]\xf6vQ\\{\x1a\u007f\xb8\"\xab\xe3Bo\x11R\x06\xd0Iɣg6\xc5m\xd6.g\xe2,\xa08\x1a\xfd\x17\x19\x14$L\xc2\xc8z\xeaG\xea\xb1\a\xa8\xab\x90r\x13&A\xa0\xce$ې\xae\a\x8f\xa0\x03\xc3QH\xa9\xea%P\xb4!e\x8fQ;\x02\xda\xf5\xc2͵\x03̷\f\xa6\xd7\xcd\x1b\x80ɻ\xb7\xa4y\xac\xdf\fh\x14i\xc3=0;\xa4:\x9d\xcc;\x06\xdc>\x00(47[l\xa0\r&q\xa6\xf3x\xb9\x9aj\xd0]\xf4H\xbb\xbft)\x04\xf4\x04\xa0\xed\x80\xe40©x@N\x9b\x89qMrCS\xa7\xec\x8dOkK\xbe-\xd7c\xe5\xe2O\x19\xd6W\xa3\xd4\xe7\xc9\xe3\x96g\x9d\x8d1\x95\xcbV\x9b\xa8c^\x93\x9d\xf8$U\x9aWd\x8d\xceD\xe8\xe7H\u007f\x06|\x807\xfa\xe6\xf0U\xe0\xd9\xf0U\xe0\xd9\xf0U\xe0\xd9\xf0U\xe0\xd9\xf0U\xe0\xd9\xf0U\xe0\xd9\xf0U\xe0\xd9\xf0U\xe0\xd9\xf0\xbf(\xc0I\xed;\x00Cv\x01͙\xcaGq49xԵ\xea\xa7f*\xfb\xddK9\xb4\xedr;\xfd~\xa6dA\x01\xd43\xba6\xe6ĵ\x88`\x9a\x9b\xd7\x03\xc3\x1e@\xc3'(\x00^\xb1(\v8l\xb4(ir\aѿ\xbf7)`e\x8c\xbc\xc3,%\x937\x06}\x8a\x17#\xa6\x9c\xb2N\xe8\xf0\xb3b\x99\xf3\x8f\n\x18\x9bk\xeec2,\x88\x98Y\xcb\x16\xc4L\x944Ģ\x88\x88\xd1\xc0L\x17\xe3\x9d\r\xdd\xed\xde\xe0\xfaCH\xee\xf2\xab\ahw4P]\xa6\xf4I\\N\xc1\xf6\xdcv\xa9HҤ\xfc*\x038\x1f깲ڡYc\xab\xef\U000d42d4\x18Rܮ\xbb3\xcb\xc5\x13\xe0\x00\xa6\x1eC\r\xa4\r<WH,P\xbe\xb5\xa3@\x9b\xa3\x9bq\xf2\x8e\xac\x0f\x109Z\xa2\x93\xee\xfd\xe4\xe1\xf2\xa0Om<\xfd\x12S\x1c>\xe2\xc1\xb70z]?\xe1\xa7/\xb3\x94\xa2-\x8e\xe0מ\xd8\xc5\x10f\x84\xfd8Z'\x02f\xbe\
|
2014-12-10 17:59:38 +01:00
|
|
|
|
|
|
|
|
|
func text_png_bytes() ([]byte, error) {
|
2015-01-06 14:59:15 +01:00
|
|
|
|
return _text_png, nil
|
2014-12-10 17:59:38 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func text_png() (*asset, error) {
|
|
|
|
|
bytes, err := text_png_bytes()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-18 13:11:03 +01:00
|
|
|
|
info := bindata_file_info{name: "text.png", size: 2058, mode: os.FileMode(420), modTime: time.Unix(1420820510, 0)}
|
2014-12-10 17:59:38 +01:00
|
|
|
|
a := &asset{bytes: bytes, info: info}
|
|
|
|
|
return a, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Asset loads and returns the asset for the given name.
|
|
|
|
|
// It returns an error if the asset could not be found or
|
|
|
|
|
// could not be loaded.
|
|
|
|
|
func Asset(name string) ([]byte, error) {
|
|
|
|
|
cannonicalName := strings.Replace(name, "\\", "/", -1)
|
|
|
|
|
if f, ok := _bindata[cannonicalName]; ok {
|
|
|
|
|
a, err := f()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err)
|
|
|
|
|
}
|
|
|
|
|
return a.bytes, nil
|
|
|
|
|
}
|
|
|
|
|
return nil, fmt.Errorf("Asset %s not found", name)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// AssetInfo loads and returns the asset info for the given name.
|
|
|
|
|
// It returns an error if the asset could not be found or
|
|
|
|
|
// could not be loaded.
|
|
|
|
|
func AssetInfo(name string) (os.FileInfo, error) {
|
|
|
|
|
cannonicalName := strings.Replace(name, "\\", "/", -1)
|
|
|
|
|
if f, ok := _bindata[cannonicalName]; ok {
|
|
|
|
|
a, err := f()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err)
|
|
|
|
|
}
|
|
|
|
|
return a.info, nil
|
|
|
|
|
}
|
|
|
|
|
return nil, fmt.Errorf("AssetInfo %s not found", name)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// AssetNames returns the names of the assets.
|
|
|
|
|
func AssetNames() []string {
|
|
|
|
|
names := make([]string, 0, len(_bindata))
|
|
|
|
|
for name := range _bindata {
|
|
|
|
|
names = append(names, name)
|
|
|
|
|
}
|
|
|
|
|
return names
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// _bindata is a table, holding each asset generator, mapped to its name.
|
|
|
|
|
var _bindata = map[string]func() (*asset, error){
|
|
|
|
|
"text.png": text_png,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// AssetDir returns the file names below a certain
|
|
|
|
|
// directory embedded in the file by go-bindata.
|
|
|
|
|
// For example if you run go-bindata on data/... and data contains the
|
|
|
|
|
// following hierarchy:
|
|
|
|
|
// data/
|
|
|
|
|
// foo.txt
|
|
|
|
|
// img/
|
|
|
|
|
// a.png
|
|
|
|
|
// b.png
|
|
|
|
|
// then AssetDir("data") would return []string{"foo.txt", "img"}
|
|
|
|
|
// AssetDir("data/img") would return []string{"a.png", "b.png"}
|
|
|
|
|
// AssetDir("foo.txt") and AssetDir("notexist") would return an error
|
|
|
|
|
// AssetDir("") will return []string{"data"}.
|
|
|
|
|
func AssetDir(name string) ([]string, error) {
|
|
|
|
|
node := _bintree
|
|
|
|
|
if len(name) != 0 {
|
|
|
|
|
cannonicalName := strings.Replace(name, "\\", "/", -1)
|
|
|
|
|
pathList := strings.Split(cannonicalName, "/")
|
|
|
|
|
for _, p := range pathList {
|
|
|
|
|
node = node.Children[p]
|
|
|
|
|
if node == nil {
|
|
|
|
|
return nil, fmt.Errorf("Asset %s not found", name)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if node.Func != nil {
|
|
|
|
|
return nil, fmt.Errorf("Asset %s not found", name)
|
|
|
|
|
}
|
|
|
|
|
rv := make([]string, 0, len(node.Children))
|
|
|
|
|
for name := range node.Children {
|
|
|
|
|
rv = append(rv, name)
|
|
|
|
|
}
|
|
|
|
|
return rv, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type _bintree_t struct {
|
|
|
|
|
Func func() (*asset, error)
|
|
|
|
|
Children map[string]*_bintree_t
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var _bintree = &_bintree_t{nil, map[string]*_bintree_t{
|
|
|
|
|
"text.png": &_bintree_t{text_png, map[string]*_bintree_t{}},
|
|
|
|
|
}}
|
|
|
|
|
|
|
|
|
|
// Restore an asset under the given directory
|
|
|
|
|
func RestoreAsset(dir, name string) error {
|
|
|
|
|
data, err := Asset(name)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
info, err := AssetInfo(name)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
err = os.MkdirAll(_filePath(dir, path.Dir(name)), os.FileMode(0755))
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode())
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime())
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Restore assets under the given directory recursively
|
|
|
|
|
func RestoreAssets(dir, name string) error {
|
|
|
|
|
children, err := AssetDir(name)
|
|
|
|
|
if err != nil { // File
|
|
|
|
|
return RestoreAsset(dir, name)
|
|
|
|
|
} else { // Dir
|
|
|
|
|
for _, child := range children {
|
|
|
|
|
err = RestoreAssets(dir, path.Join(name, child))
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func _filePath(dir, name string) string {
|
|
|
|
|
cannonicalName := strings.Replace(name, "\\", "/", -1)
|
|
|
|
|
return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...)
|
|
|
|
|
}
|