mirror of
https://github.com/ipfs/kubo.git
synced 2025-06-26 23:53:19 +08:00
Move dir-index-html + assets to a separate repo
License: MIT Signed-off-by: rht <rhtbot@gmail.com>
This commit is contained in:
@ -28,6 +28,11 @@ func SeedInitDocs(nd *core.IpfsNode) (*key.Key, error) {
|
||||
return addAssetList(nd, initDocPaths)
|
||||
}
|
||||
|
||||
var initDirIndex = []string{
|
||||
"../vendor/src/QmeNXKecZ7CQagtkQUJxG3yS7UcvU6puS777dQsx3amkS7/dir-index-html/knownIcons.txt",
|
||||
"../vendor/src/QmeNXKecZ7CQagtkQUJxG3yS7UcvU6puS777dQsx3amkS7/dir-index-html/dir-index.html",
|
||||
}
|
||||
|
||||
var initGwAssets = []string{
|
||||
"gw-assets/icons.css",
|
||||
"gw-assets/bootstrap.min.css",
|
||||
@ -70,7 +75,7 @@ func addAssetList(nd *core.IpfsNode, l []string) (*key.Key, error) {
|
||||
}
|
||||
|
||||
if err := nd.Pinning.Flush(); err != nil {
|
||||
return nil, fmt.Errorf("assets: Pinnig flush failed: %s", err)
|
||||
return nil, fmt.Errorf("assets: Pinning flush failed: %s", err)
|
||||
}
|
||||
|
||||
return &dkey, nil
|
||||
|
@ -9,49 +9,35 @@ import (
|
||||
|
||||
// TestEmbeddedDocs makes sure we don't forget to regenerate after documentation change
|
||||
func TestEmbeddedDocs(t *testing.T) {
|
||||
const wantCnt = 6
|
||||
if len(initDocPaths) < wantCnt {
|
||||
t.Fatalf("expected %d documents got %d", wantCnt, len(initDocPaths))
|
||||
testNFiles(initDocPaths, 6, t, "documents")
|
||||
}
|
||||
|
||||
func TestGatewayAssets(t *testing.T) {
|
||||
testNFiles(initGwAssets, 2, t, "assets")
|
||||
}
|
||||
|
||||
func TestDirIndex(t *testing.T) {
|
||||
testNFiles(initDirIndex, 2, t, "assets")
|
||||
}
|
||||
|
||||
func testNFiles(fs []string, wantCnt int, t *testing.T, ftype string) {
|
||||
if len(fs) < wantCnt {
|
||||
t.Fatalf("expected %d %s. got %d", wantCnt, ftype, len(fs))
|
||||
}
|
||||
|
||||
var wg sync.WaitGroup
|
||||
for _, f := range initDocPaths {
|
||||
for _, f := range fs {
|
||||
wg.Add(1)
|
||||
// compare asset
|
||||
go func(f string) {
|
||||
defer wg.Done()
|
||||
// load data from filesystem (git)
|
||||
vcsData, err := ioutil.ReadFile(f)
|
||||
if err != nil {
|
||||
t.Errorf("asset %s: could not read vcs file: %s", f, err)
|
||||
return
|
||||
}
|
||||
|
||||
// load data from emdedded source
|
||||
embdData, err := Asset(f)
|
||||
if err != nil {
|
||||
t.Errorf("asset %s: could not read vcs file: %s", f, err)
|
||||
return
|
||||
}
|
||||
|
||||
if !bytes.Equal(vcsData, embdData) {
|
||||
t.Errorf("asset %s: vcs and embedded data isnt equal", f)
|
||||
return
|
||||
}
|
||||
|
||||
t.Logf("checked %s", f)
|
||||
testOneFile(f, t)
|
||||
}(f)
|
||||
}
|
||||
wg.Wait()
|
||||
}
|
||||
|
||||
func TestGatewayAssets(t *testing.T) {
|
||||
const wantCnt = 2
|
||||
if len(initGwAssets) < wantCnt {
|
||||
t.Fatalf("expected %d assets. got %d", wantCnt, len(initDocPaths))
|
||||
}
|
||||
|
||||
for _, f := range initGwAssets {
|
||||
func testOneFile(f string, t *testing.T) {
|
||||
// load data from filesystem (git)
|
||||
vcsData, err := ioutil.ReadFile(f)
|
||||
if err != nil {
|
||||
@ -72,6 +58,4 @@ func TestGatewayAssets(t *testing.T) {
|
||||
}
|
||||
|
||||
t.Logf("checked %s", f)
|
||||
}
|
||||
|
||||
}
|
||||
|
File diff suppressed because one or more lines are too long
1
assets/gw-assets
Symbolic link
1
assets/gw-assets
Symbolic link
@ -0,0 +1 @@
|
||||
../vendor/src/QmeNXKecZ7CQagtkQUJxG3yS7UcvU6puS777dQsx3amkS7/dir-index-html/gw-assets
|
@ -1,8 +1,10 @@
|
||||
package corehttp
|
||||
|
||||
import (
|
||||
"github.com/ipfs/go-ipfs/assets"
|
||||
"html/template"
|
||||
"path"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// structs for directory listing
|
||||
@ -18,74 +20,21 @@ type directoryItem struct {
|
||||
Path string
|
||||
}
|
||||
|
||||
// Directory listing template
|
||||
var listingTemplate = template.Must(template.New("dir").Funcs(template.FuncMap{"iconFromExt": iconFromExt}).Parse(`
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<!-- TODO: seed these - maybe like the starter ex or the webui? -->
|
||||
<link rel="stylesheet" href="/ipfs/QmXB7PLRWH6bCiwrGh2MrBBjNkLv3mY3JdYXCikYZSwLED/bootstrap.min.css"/>
|
||||
<!-- helper to construct this is here: https://github.com/cryptix/exp/blob/master/imgesToCSSData/convert.go -->
|
||||
<link rel="stylesheet" href="/ipfs/QmXB7PLRWH6bCiwrGh2MrBBjNkLv3mY3JdYXCikYZSwLED/icons.css">
|
||||
<style>
|
||||
.narrow {width: 0px;}
|
||||
.padding { margin: 100px;}
|
||||
#header {
|
||||
background: #000;
|
||||
}
|
||||
#logo {
|
||||
height: 25px;
|
||||
margin: 10px;
|
||||
}
|
||||
.ipfs-icon {
|
||||
width:16px;
|
||||
}
|
||||
</style>
|
||||
<title>{{ .Path }}</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header" class="row">
|
||||
<div class="col-xs-2">
|
||||
<div id="logo" class="ipfs-logo"> </div>
|
||||
</div>
|
||||
</div>
|
||||
<br/>
|
||||
<div class="col-xs-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<strong>Index of {{ .Path }}</strong>
|
||||
</div>
|
||||
<table class="table table-striped">
|
||||
<tr>
|
||||
<td class="narrow">
|
||||
<div class="ipfs-icon ipfs-_blank"> </div>
|
||||
</td>
|
||||
<td class="padding">
|
||||
<a href="{{.BackLink}}">..</a>
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
{{ range .Listing }}
|
||||
<tr>
|
||||
<td>
|
||||
<div class="ipfs-icon {{iconFromExt .Name}}"> </div>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ .Path }}">{{ .Name }}</a>
|
||||
</td>
|
||||
<td>{{ .Size }} bytes</td>
|
||||
</tr>
|
||||
{{ end }}
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
`))
|
||||
var listingTemplate *template.Template
|
||||
|
||||
// helper to guess the type/icon for it by the extension name
|
||||
func iconFromExt(name string) string {
|
||||
func init() {
|
||||
assetPath := "../vendor/src/QmeNXKecZ7CQagtkQUJxG3yS7UcvU6puS777dQsx3amkS7/dir-index-html/"
|
||||
knownIconsBytes, err := assets.Asset(assetPath + "knownIcons.txt")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
knownIcons := make(map[string]struct{})
|
||||
for _, ext := range strings.Split(strings.TrimSuffix(string(knownIconsBytes), "\n"), "\n") {
|
||||
knownIcons[ext] = struct{}{}
|
||||
}
|
||||
|
||||
// helper to guess the type/icon for it by the extension name
|
||||
iconFromExt := func(name string) string {
|
||||
ext := path.Ext(name)
|
||||
_, ok := knownIcons[ext]
|
||||
if !ok {
|
||||
@ -93,68 +42,15 @@ func iconFromExt(name string) string {
|
||||
return "ipfs-_blank"
|
||||
}
|
||||
return "ipfs-" + ext[1:] // slice of the first dot
|
||||
}
|
||||
}
|
||||
|
||||
var knownIcons = map[string]bool{
|
||||
".aac": true,
|
||||
".aiff": true,
|
||||
".ai": true,
|
||||
".avi": true,
|
||||
".bmp": true,
|
||||
".c": true,
|
||||
".cpp": true,
|
||||
".css": true,
|
||||
".dat": true,
|
||||
".dmg": true,
|
||||
".doc": true,
|
||||
".dotx": true,
|
||||
".dwg": true,
|
||||
".dxf": true,
|
||||
".eps": true,
|
||||
".exe": true,
|
||||
".flv": true,
|
||||
".gif": true,
|
||||
".h": true,
|
||||
".hpp": true,
|
||||
".html": true,
|
||||
".ics": true,
|
||||
".iso": true,
|
||||
".java": true,
|
||||
".jpg": true,
|
||||
".js": true,
|
||||
".key": true,
|
||||
".less": true,
|
||||
".mid": true,
|
||||
".mp3": true,
|
||||
".mp4": true,
|
||||
".mpg": true,
|
||||
".odf": true,
|
||||
".ods": true,
|
||||
".odt": true,
|
||||
".otp": true,
|
||||
".ots": true,
|
||||
".ott": true,
|
||||
".pdf": true,
|
||||
".php": true,
|
||||
".png": true,
|
||||
".ppt": true,
|
||||
".psd": true,
|
||||
".py": true,
|
||||
".qt": true,
|
||||
".rar": true,
|
||||
".rb": true,
|
||||
".rtf": true,
|
||||
".sass": true,
|
||||
".scss": true,
|
||||
".sql": true,
|
||||
".tga": true,
|
||||
".tgz": true,
|
||||
".tiff": true,
|
||||
".txt": true,
|
||||
".wav": true,
|
||||
".xls": true,
|
||||
".xlsx": true,
|
||||
".xml": true,
|
||||
".yml": true,
|
||||
".zip": true,
|
||||
// Directory listing template
|
||||
dirIndexBytes, err := assets.Asset(assetPath + "dir-index.html")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
listingTemplate = template.Must(template.New("dir").Funcs(template.FuncMap{
|
||||
"iconFromExt": iconFromExt,
|
||||
}).Parse(string(dirIndexBytes)))
|
||||
}
|
||||
|
10
package.json
Normal file
10
package.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"name": "go-ipfs",
|
||||
"version": "1.0.0",
|
||||
"dependencies": [
|
||||
{
|
||||
"name": "dir-index-html",
|
||||
"hash": "QmeNXKecZ7CQagtkQUJxG3yS7UcvU6puS777dQsx3amkS7"
|
||||
}
|
||||
]
|
||||
}
|
@ -16,8 +16,8 @@ var log = logrus.New()
|
||||
// TODO: write custom TextFormatter (don't print module=name explicitly) and
|
||||
// fork logrus to add shortfile
|
||||
var LogFormats = map[string]*logrus.TextFormatter{
|
||||
"nocolor": &logrus.TextFormatter{DisableColors: true, FullTimestamp: true, TimestampFormat: "2006-01-02 15:04:05.000000", DisableSorting: true},
|
||||
"color": &logrus.TextFormatter{DisableColors: false, FullTimestamp: true, TimestampFormat: "15:04:05:000", DisableSorting: true},
|
||||
"nocolor": {DisableColors: true, FullTimestamp: true, TimestampFormat: "2006-01-02 15:04:05.000000", DisableSorting: true},
|
||||
"color": {DisableColors: false, FullTimestamp: true, TimestampFormat: "15:04:05:000", DisableSorting: true},
|
||||
}
|
||||
var defaultLogFormat = "color"
|
||||
|
||||
|
62
vendor/src/QmeNXKecZ7CQagtkQUJxG3yS7UcvU6puS777dQsx3amkS7/dir-index-html/dir-index.html
vendored
Normal file
62
vendor/src/QmeNXKecZ7CQagtkQUJxG3yS7UcvU6puS777dQsx3amkS7/dir-index-html/dir-index.html
vendored
Normal file
@ -0,0 +1,62 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<!-- TODO: seed these - maybe like the starter ex or the webui? -->
|
||||
<link rel="stylesheet" href="/ipfs/QmXB7PLRWH6bCiwrGh2MrBBjNkLv3mY3JdYXCikYZSwLED/bootstrap.min.css"/>
|
||||
<!-- helper to construct this is here: https://github.com/cryptix/exp/blob/master/imgesToCSSData/convert.go -->
|
||||
<link rel="stylesheet" href="/ipfs/QmXB7PLRWH6bCiwrGh2MrBBjNkLv3mY3JdYXCikYZSwLED/icons.css">
|
||||
<style>
|
||||
.narrow {width: 0px;}
|
||||
.padding { margin: 100px;}
|
||||
#header {
|
||||
background: #000;
|
||||
}
|
||||
#logo {
|
||||
height: 25px;
|
||||
margin: 10px;
|
||||
}
|
||||
.ipfs-icon {
|
||||
width:16px;
|
||||
}
|
||||
</style>
|
||||
<title>{{ .Path }}</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header" class="row">
|
||||
<div class="col-xs-2">
|
||||
<div id="logo" class="ipfs-logo"> </div>
|
||||
</div>
|
||||
</div>
|
||||
<br/>
|
||||
<div class="col-xs-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<strong>Index of {{ .Path }}</strong>
|
||||
</div>
|
||||
<table class="table table-striped">
|
||||
<tr>
|
||||
<td class="narrow">
|
||||
<div class="ipfs-icon ipfs-_blank"> </div>
|
||||
</td>
|
||||
<td class="padding">
|
||||
<a href="{{.BackLink}}">..</a>
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
{{ range .Listing }}
|
||||
<tr>
|
||||
<td>
|
||||
<div class="ipfs-icon {{iconFromExt .Name}}"> </div>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ .Path }}">{{ .Name }}</a>
|
||||
</td>
|
||||
<td>{{ .Size }} bytes</td>
|
||||
</tr>
|
||||
{{ end }}
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
61
vendor/src/QmeNXKecZ7CQagtkQUJxG3yS7UcvU6puS777dQsx3amkS7/dir-index-html/knownIcons.txt
vendored
Normal file
61
vendor/src/QmeNXKecZ7CQagtkQUJxG3yS7UcvU6puS777dQsx3amkS7/dir-index-html/knownIcons.txt
vendored
Normal file
@ -0,0 +1,61 @@
|
||||
.aac
|
||||
.aiff
|
||||
.ai
|
||||
.avi
|
||||
.bmp
|
||||
.c
|
||||
.cpp
|
||||
.css
|
||||
.dat
|
||||
.dmg
|
||||
.doc
|
||||
.dotx
|
||||
.dwg
|
||||
.dxf
|
||||
.eps
|
||||
.exe
|
||||
.flv
|
||||
.gif
|
||||
.h
|
||||
.hpp
|
||||
.html
|
||||
.ics
|
||||
.iso
|
||||
.java
|
||||
.jpg
|
||||
.js
|
||||
.key
|
||||
.less
|
||||
.mid
|
||||
.mp3
|
||||
.mp4
|
||||
.mpg
|
||||
.odf
|
||||
.ods
|
||||
.odt
|
||||
.otp
|
||||
.ots
|
||||
.ott
|
||||
.pdf
|
||||
.php
|
||||
.png
|
||||
.ppt
|
||||
.psd
|
||||
.py
|
||||
.qt
|
||||
.rar
|
||||
.rb
|
||||
.rtf
|
||||
.sass
|
||||
.scss
|
||||
.sql
|
||||
.tga
|
||||
.tgz
|
||||
.tiff
|
||||
.txt
|
||||
.wav
|
||||
.xls
|
||||
.xlsx
|
||||
.xml
|
||||
.yml
|
||||
.zip
|
4
vendor/src/QmeNXKecZ7CQagtkQUJxG3yS7UcvU6puS777dQsx3amkS7/dir-index-html/package.json
vendored
Normal file
4
vendor/src/QmeNXKecZ7CQagtkQUJxG3yS7UcvU6puS777dQsx3amkS7/dir-index-html/package.json
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "dir-index-html",
|
||||
"version": "1.0.0"
|
||||
}
|
Reference in New Issue
Block a user