From a6649f4e01d428b6b97fdbc785a2de387f457fac Mon Sep 17 00:00:00 2001
From: Christian Pointner <equinox@helsinki.at>
Date: Sat, 30 Jun 2018 02:37:56 +0200
Subject: [PATCH] file listing almost works now

---
 cmd/tank/bindata_assetfs.go |  8 +++----
 cmd/tank/ui/index.html      | 37 ++++++++++++++++++++++++++++--
 cmd/tank/ui/js/main.js      | 45 ++++++++++++++++++++++++++++++-------
 3 files changed, 76 insertions(+), 14 deletions(-)

diff --git a/cmd/tank/bindata_assetfs.go b/cmd/tank/bindata_assetfs.go
index d99e1f1..9e3b0d5 100644
--- a/cmd/tank/bindata_assetfs.go
+++ b/cmd/tank/bindata_assetfs.go
@@ -75,7 +75,7 @@ func (fi bindataFileInfo) Sys() interface{} {
 	return nil
 }
 
-var _uiIndexHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x56\x4d\x8f\xe4\x34\x10\xbd\xcf\xaf\xa8\xf5\x01\x81\xb4\x8e\x69\xe6\xb2\x5a\x9c\x48\x23\x96\x8f\x95\x40\x8c\x60\x40\xe2\xb4\xaa\x24\x35\x1d\x4f\x3b\x76\xb0\x2b\x69\xfa\xdf\x23\x27\xd3\x5f\xe9\x9e\x99\x46\xc0\x6a\x2f\xdd\xb1\xeb\xbd\x72\xea\xe5\xd9\x2e\xfd\xea\xdd\xcf\xdf\xdc\xfd\x71\xfb\x2d\xfc\x70\xf7\xd3\x8f\xc5\x95\x6e\xb8\xb5\xc5\x15\xe8\x86\xb0\x2e\xae\x00\x34\x1b\xb6\x54\xdc\xfc\xf6\xcb\x0d\xdc\xa1\x5b\xbd\x85\xf7\x6d\xe7\x03\xc3\x67\x70\x6b\x71\x63\x4d\xe4\xa8\xd5\x04\x4a\xf0\x96\x18\xa1\x6a\x30\x44\xe2\x5c\xf4\x7c\x2f\xdf\x88\x7d\xc0\x61\x4b\xb9\x18\x0c\xad\x53\x0e\x01\x95\x77\x4c\x8e\x73\xb1\x36\x35\x37\x79\x4d\x83\xa9\x48\x8e\x83\xd7\x60\x9c\x61\x83\x56\xc6\x0a\x2d\xe5\x8b\xd7\x10\x9b\x60\xdc\x4a\xb2\x97\xf7\x86\x73\xe7\x45\x71\x95\x32\x5b\xe3\x56\xd0\x04\xba\xcf\x45\x15\xa3\x2a\xbd\xe7\xc8\x01\x3b\x19\x28\x3d\x67\xad\x71\x59\x15\xa3\x80\x40\x36\x17\x91\x37\x96\x62\x43\xc4\xd3\x7b\x3d\xc5\xfe\x67\xb4\x16\x9f\x41\x6b\xf5\xa8\xa6\x2e\x7d\xbd\x49\x74\xd0\xb5\x19\xa0\xb2\x18\x63\x2e\x92\x08\x68\x1c\x85\x31\xf3\x36\x68\xea\x5c\x24\xda\x7e\xfa\x98\x15\xfc\x7a\x1f\x98\x27\xb4\xf2\x2b\x51\x68\x55\x9b\xe1\x19\xc8\x9b\x43\x3e\x80\x6e\x16\xfb\xcf\xac\x55\xb3\x98\x45\xaf\x0b\x6d\x8a\x93\x8f\x0f\xef\x90\x5a\xef\xb4\x32\x85\x56\xcd\xf5\x31\xa7\x2b\x34\x3e\x8a\xd4\x30\x77\xf1\xad\x52\x4b\xc3\x16\xcb\x2c\x52\x18\xfa\x98\x21\x2b\xec\xd9\x07\xac\x8d\x57\x8c\x6e\x25\x80\x31\x2c\x93\x75\x3e\x94\x36\x8d\x8b\x0b\x89\x5a\x61\xa1\x55\x77\x58\xee\x0b\xe5\x9f\x28\x34\x1b\xfd\x9f\x5a\x6f\x7c\x0f\xad\x59\x36\x0c\x6b\x74\x0c\xec\x81\x71\x45\x80\x60\xbd\x5f\x01\x32\x70\x43\xb0\xd3\x4e\x61\x67\xd4\xb0\x50\x62\x9b\xb1\xc4\x7a\x49\x30\xfe\xca\x2e\x98\x16\xc3\x46\x14\x37\xb7\xef\x93\x08\xff\x91\x00\x8f\xcf\x33\x43\x26\xff\x7e\x2c\x3b\x6e\xd7\xa4\x10\x7c\x38\x8e\xcd\xa3\xb2\xa5\x18\x71\x49\x3b\x81\xd0\x52\x60\x18\x7f\x65\x8d\x6e\x49\x41\x40\xf0\x96\x1e\x23\x27\xd9\x66\xaf\x76\x46\xbb\x4f\xd8\x4c\x87\x61\xe3\xba\x9e\xe5\x32\xf8\xbe\x83\xb6\x94\xd7\x67\x75\x3b\xc5\xca\x2e\x50\x47\xae\x9e\xc3\x01\x74\xec\xd0\x9d\x63\x30\xfd\xc5\xa2\xf8\x3e\x3d\x6b\x95\x40\x2f\x6a\x9a\x92\x91\xa5\x8a\x77\xb5\xf4\x91\x7d\x2b\xa7\x49\x31\x7e\xce\x31\xf7\xaf\xd3\xc4\x49\xc2\x09\x58\x5c\xe9\x57\x52\x5e\x54\x15\x76\x4f\x14\x55\xf6\xcc\x7e\x57\x56\xc9\x0e\x4a\x76\xd2\xf7\x6c\x8d\x23\x19\xa9\xf2\xae\x4e\x9b\x0a\x78\xd3\x51\x2e\x26\xb8\x28\x6e\xea\x5a\xab\x69\x70\xb6\x5a\x29\x3f\x11\x13\x2d\x5e\x36\xd1\xe2\xcb\x03\xc5\x7f\x37\xb4\xbe\x80\x72\xc1\x81\x71\x7c\x74\xec\x6f\x32\x53\xd7\xe4\xee\xa8\xed\x2c\x32\xc5\xa3\x9b\x6e\xbb\x02\x86\x1a\xc6\xb7\xd9\xc2\xce\x9f\x34\x09\x27\xe7\x37\x23\x80\xee\xed\x16\xe1\x70\x00\x87\x83\x64\x2c\x23\x1c\xc0\xc7\x89\xd9\xde\xb1\xe6\x80\x25\x0d\x53\x7b\xe2\x3b\x3c\x44\x8c\xf7\x3e\x56\x6c\x06\x9a\xf4\x4b\xf9\x27\xc3\x7e\x67\x6c\xaa\x6c\xfc\x3b\x3e\x89\x93\x26\xd6\xfc\xfb\x85\xe7\x2b\xee\x3a\x30\x51\x1c\x34\x63\xcf\xae\xac\x55\x6f\x2f\xf0\xd7\xa8\xda\xf1\x69\x3f\xf5\x00\x59\x96\x81\xf5\x58\x1b\xb7\x84\x2c\xcb\x8e\xee\xfc\x97\xed\x10\xab\x60\x3a\x86\x18\xaa\x5c\x3c\x44\xf5\xf0\x67\x4f\x61\x33\x76\x5a\x0f\x31\x99\x6b\x8a\x17\xe7\xb0\xfb\xc6\xac\xec\x5d\x6d\xe9\x32\xd6\xd8\x97\x3d\x89\x9a\x76\x77\x3a\xc9\xd4\x03\x0e\x38\xcd\x6e\x2b\x4e\xd4\x0f\xa9\x07\xfd\xfc\x8b\xaf\xa7\x3a\x76\x19\xb4\x9a\x1a\x39\xad\xa6\x76\xf9\xef\x00\x00\x00\xff\xff\x2e\xfe\xa7\x2c\x46\x0b\x00\x00")
+var _uiIndexHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x57\x5f\x8f\xdc\x34\x10\x7f\xbf\x4f\x31\x35\x12\x02\xa9\x5e\x73\xf4\xa5\x2a\x4e\xa4\x13\x2d\x50\x09\xc4\x89\x1e\x48\x3c\x55\x4e\x3c\xb7\xf1\xad\x63\x07\x7b\xb2\xc7\x7e\x7b\xe4\xe4\xb2\x9b\x64\xb3\xb7\x8b\xf8\xa3\xbe\x24\xb6\xe7\x37\x63\xcf\xcf\x63\xcf\x58\xbe\x78\xfb\xf3\xb7\x77\xbf\xdf\xbe\x83\x1f\xee\x7e\xfa\x31\xbf\x92\x15\xd5\x36\xbf\x02\x59\xa1\xd2\xf9\x15\x80\x24\x43\x16\xf3\x9b\x5f\x7f\xb9\x81\x3b\xe5\x36\x6f\xe0\x7d\xdd\xf8\x40\xf0\x39\xdc\x5a\xb5\xb3\x26\x52\x94\xa2\x07\x25\x78\x8d\xa4\xa0\xac\x54\x88\x48\x19\x6b\xe9\x9e\xbf\x66\x07\x81\x53\x35\x66\x6c\x6b\xf0\x31\xd9\x60\x50\x7a\x47\xe8\x28\x63\x8f\x46\x53\x95\x69\xdc\x9a\x12\x79\xd7\x79\x09\xc6\x19\x32\xca\xf2\x58\x2a\x8b\xd9\xf5\x4b\x88\x55\x30\x6e\xc3\xc9\xf3\x7b\x43\x99\xf3\x2c\xbf\x4a\x96\xad\x71\x1b\xa8\x02\xde\x67\xac\x8c\x51\x14\xde\x53\xa4\xa0\x1a\x1e\x30\xb5\x57\xb5\x71\xab\x32\x46\x06\x01\x6d\xc6\x22\xed\x2c\xc6\x0a\x91\xfa\x75\x9d\xd2\xfe\x7b\x6a\xb5\x7a\x06\x2d\xc5\x13\x9b\xb2\xf0\x7a\x97\xd4\x41\x6a\xb3\x85\xd2\xaa\x18\x33\x96\x48\x50\xc6\x61\xe8\x2c\x0f\x42\xa3\x33\x96\xd4\x0e\xc3\x53\xad\xe0\x1f\x0f\x82\xb9\x41\xcb\xbf\x66\xb9\x14\xda\x6c\x9f\x81\xbc\x1e\xeb\x03\xc8\xea\xfa\xb0\xcd\x52\x54\xd7\x33\xe9\xab\x5c\x9a\xfc\x68\xf3\xe1\xad\xc2\xda\x3b\x29\x4c\x2e\x45\xf5\x6a\xaa\xd3\xe4\x52\x3d\x91\x54\x11\x35\xf1\x8d\x10\x6b\x43\x56\x15\xab\x88\x61\xdb\xc6\x95\x22\xa1\x5a\xf2\x41\x69\xe3\x05\x29\xb7\x61\x40\x2a\xac\x53\xe8\x7c\x2c\x6c\xea\xe7\x17\x2a\x4a\xa1\x72\x29\x9a\xb1\xbb\x67\xdc\x3f\x62\x68\xd6\xfb\x2f\xb9\xde\xf9\x16\x6a\xb3\xae\x08\x1e\x95\x23\x20\x0f\xa4\x36\x08\x0a\xac\xf7\x1b\x50\x04\x54\x21\xec\xb9\x13\xaa\x31\x62\x7b\x2d\xd8\x60\xb1\x50\x7a\x8d\xd0\x7d\x79\x13\x4c\xad\xc2\x8e\xe5\x37\xb7\xef\x13\x09\xff\x12\x01\x4f\xed\x59\x40\xa6\xf8\xfd\xbf\xc2\x71\x98\x13\x43\xf0\x61\x2a\x9b\x4b\x79\x8d\x31\xaa\x35\xee\x09\x52\x16\x03\x41\xf7\xe5\x5a\xb9\x35\x06\x06\xc1\x5b\x7c\x92\x1c\x59\x9b\x2d\x6d\x81\xbb\x4f\x38\x98\xc6\x62\xe3\x9a\x96\xf8\x3a\xf8\xb6\x81\xba\xe0\xaf\x16\x79\x3b\xc6\xf2\x26\x60\x83\x4e\xcf\xe1\x00\x32\x36\xca\x2d\x69\x10\xfe\x49\x2c\xff\x3e\xb5\xa5\x48\xa0\xb3\x9c\x26\x63\x68\xb1\xa4\xbd\x2f\x6d\x24\x5f\xf3\x7e\x90\x75\xdb\xd9\xd9\xfe\xd0\x0f\x1c\x19\xec\x81\xf9\x95\x7c\xc1\xf9\x65\x6e\xa9\xe6\x84\x57\x45\x4b\xe4\xf7\x7e\x15\xe4\xa0\x20\xc7\x7d\x4b\xd6\x38\xe4\x11\x4b\xef\x74\x3a\x55\x40\xbb\x06\x33\xd6\xc3\x59\x7e\xa3\xb5\x14\x7d\x67\xd9\x5d\xce\x3f\x91\x30\xba\x3e\x1f\x46\xd7\x5f\x8d\x38\xff\xcd\xe0\xe3\x05\x2a\x17\x5c\x19\xd3\xcb\xe3\x90\xcb\x8c\xd6\xe8\xee\xb0\x6e\xac\x22\x8c\x93\x5c\x37\xcc\xa0\x82\x86\x6e\x35\x03\x6c\xf9\xae\x49\x38\x3e\xcf\x8d\x00\xb2\xb5\x03\xc2\xa9\x2d\x38\xb5\xe5\xa4\x8a\x08\x23\x78\x37\x30\x3b\x3d\xd6\x8c\xb4\xb8\x21\xac\x8f\x22\x4f\x8d\x11\x5d\xe6\x57\x25\x99\x2d\xf6\xfc\x25\xfb\x7d\xc8\x7e\x67\x6c\xf2\xac\xfb\x4d\xef\xe2\xc4\x89\x35\xff\x7c\xe2\xf9\x8c\xfb\x1a\x8c\xe5\xa3\x72\xec\xd9\x99\xa5\x68\xed\x05\xf1\xd5\xb1\x36\xbd\xef\xfb\x2a\x60\xb5\x5a\x81\xf5\x4a\x1b\xb7\x86\xd5\x6a\x35\xc9\xfa\xa7\x33\x08\xa9\xc2\xe2\x60\xbb\xef\x74\x5f\x1e\x29\x98\x06\x35\xdc\x27\xd2\x16\xf6\x9d\x86\x4a\x74\x3f\x10\xa6\xde\x51\x05\xb1\xf4\xe9\x94\x96\xde\xb2\xfc\x33\x29\xa8\x7a\x16\x71\x13\xc8\x44\x3a\x0f\xb3\x45\x5b\x9f\x45\xdd\xa5\xca\xf7\x2c\xea\x83\x6f\x43\x79\x1e\x76\x53\x92\x49\xb5\xd4\x04\x26\xc5\xc8\xe3\x24\x1b\xf3\x21\xa9\x2b\x29\xa5\xa0\x7d\x69\xd9\x81\x12\xb5\xcb\xdc\x27\x9e\x97\x68\x0e\x13\x8e\xf5\x18\xfe\x5e\xb3\x61\x99\xdd\xad\x23\x05\xe9\xd3\xe8\x9e\xde\xb3\xa8\xc4\xee\x39\x50\x47\xee\x39\x50\xcf\xed\x12\xea\x64\x96\x4c\x77\x7d\x9f\x23\xf7\x2d\x1e\xeb\xa1\x44\xe8\xfa\x47\x47\xf1\x29\x63\x4c\xf2\x01\x68\x13\x13\xb7\x3a\x63\x43\x8b\xcd\x73\xca\x3e\x97\x74\x11\xce\x51\x1b\x62\xf9\x3b\x6d\xe8\x54\x22\x59\x9c\x68\x66\xb4\xaf\x69\x7a\x8b\x1a\x2d\xa6\xad\x7c\xdb\xfd\x17\xad\x1e\xa7\xa1\x11\x39\xa3\xf8\x9a\x04\xce\xf8\x12\x8f\x65\x30\x0d\x41\x0c\x65\xc6\x1e\xa2\x78\xf8\xa3\xc5\xb0\xeb\x5e\x48\x0f\x31\x31\xdf\xcb\xf3\x25\xec\xe1\x41\x55\xb4\x4e\x5b\xbc\x4c\xab\x7b\x4f\x9d\x44\xf5\xdc\xa4\x0a\x44\x3c\xa8\xad\xea\x47\x87\x1d\x4b\xaa\x1f\xd3\xdb\xf1\x8b\x2f\xbf\xe9\xfd\xd8\x5b\x90\xa2\x3f\x25\x52\xf4\xcf\xdc\xbf\x02\x00\x00\xff\xff\x46\xbc\x93\x59\xfe\x0e\x00\x00")
 
 func uiIndexHtmlBytes() ([]byte, error) {
 	return bindataRead(
@@ -90,7 +90,7 @@ func uiIndexHtml() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "ui/index.html", size: 2886, mode: os.FileMode(436), modTime: time.Unix(1530314972, 0)}
+	info := bindataFileInfo{name: "ui/index.html", size: 3838, mode: os.FileMode(436), modTime: time.Unix(1530318934, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -195,7 +195,7 @@ func uiJsJqueryMinJs() (*asset, error) {
 	return a, nil
 }
 
-var _uiJsMainJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x58\x4b\x6f\x1b\xb7\x13\xbf\xeb\x53\xf0\xaf\x18\x58\xee\xdf\x32\x85\xf6\x68\x55\x39\xb4\x68\x0a\x14\x41\x6b\xc0\x45\x2e\x86\x21\x30\xbb\xb3\x12\x6b\x8a\xdc\x92\x94\x1c\xc1\xd1\x77\x2f\xf8\xdc\x97\x1e\x16\x9a\x06\x8d\x0f\x96\xc8\x19\xce\x83\x33\xf3\x9b\xa1\xb2\x8d\x06\xa4\x8d\x62\x85\xc9\x66\xa3\xd1\x96\x2a\xb4\xa6\x4c\xa0\xb9\xff\xf8\xfc\x19\xbd\xec\x67\xa3\xd1\xf4\xff\xfd\x3f\xb4\x96\x25\x70\x8d\xd0\x80\x32\xf5\x62\x96\x4a\x6e\x6a\x8d\xe6\x48\x6c\x38\x9f\x8d\x46\x56\x1e\xf9\xc5\x6e\xbe\x67\xda\xa0\x39\xaa\x36\xa2\x30\x4c\x0a\x9c\xa3\x97\x11\x42\x66\xc5\x34\xb9\xb2\xff\xd1\x1c\x5d\x61\xfb\x25\x9f\xc5\xfd\x24\xcc\x5a\xb3\x1f\x48\x23\xb5\x92\x46\x9a\x5d\x0d\xa4\x02\x53\xac\x86\xd2\xad\x45\x1a\x78\x85\xe6\x4e\xa0\x15\x6c\x97\x84\x53\x6d\x16\xa0\x94\x54\x8d\xa5\x08\x5d\x91\x25\x98\x5f\xef\x7f\xff\x0d\xa3\xf1\x94\xd6\x6c\xba\xfd\x6e\xea\x4d\x18\x4f\x1a\xc9\x25\x35\xd4\x4b\x0f\xc2\x92\x95\x0f\x8f\x33\xb7\x5b\x49\x85\xad\xe6\x27\xd8\x21\x26\x90\x3d\x40\x14\xe8\x0d\x37\x3a\x1e\xec\x1c\x7d\x68\x73\x3c\x3c\xc1\xee\x91\x08\xba\x86\x47\x6b\x1b\x3c\xa3\xc6\x69\x3c\x60\xcc\xbd\xc6\x7d\x63\x8d\xbb\x4b\x62\x14\x5b\x2e\x41\xe1\x6c\x53\x97\xd4\x40\xe6\xf8\xf6\x39\xa9\x28\xe3\x38\xb9\xf2\xe7\x5f\x9f\x56\x6a\x82\x0c\x7c\x32\xf7\x86\x9a\x8d\x9e\x20\x77\x29\xd1\x4a\x56\xe1\x70\x49\x73\x34\x1e\xf7\x6c\x77\x14\x3c\x2e\xa4\x10\xe0\xc4\xa1\x5a\xc9\x8f\x1c\xd6\xe3\x68\x14\x02\xae\xe1\xd0\x21\xaf\xa4\x31\x7d\x9f\x9f\x09\x6f\x0c\x55\xb2\xbc\x65\xa6\xf3\xb7\x13\x50\xf7\x39\xeb\x24\x57\x73\x21\x8e\x98\x0d\x14\xb6\x85\x33\xa1\xcd\x2b\xb2\xd3\xc6\x08\xcd\x91\xe5\x76\xdf\x13\xa1\x50\x40\x0d\x94\x91\x16\x96\x89\xec\x43\x92\xc8\x61\x99\xc8\x15\xe3\xd0\x64\x93\xdb\xaa\x39\xdd\x71\xa6\x4d\xdc\xee\x9a\xde\x2f\x83\x45\x94\xf0\x2f\x15\xc3\x74\x8c\xae\xfd\x49\x77\x03\xd7\x68\x3c\x75\x1a\x4f\x16\x49\xd7\xab\x4b\x6a\xc4\x9d\x24\xf5\x46\xaf\x70\xaa\x86\x77\x8c\xc3\x81\x62\x78\x65\x35\xdc\x38\x91\xdf\x5c\x4d\x0c\xe2\xdc\x4e\x8b\xaf\x17\xeb\xa4\xf5\x64\xbc\xfb\x29\x7b\x59\xcc\xd3\xe9\x5e\xdc\xef\xc2\xfe\x3f\x88\x7d\x12\xfd\x2d\xc5\xdf\xe6\xfb\x09\x84\x62\x09\x4c\x58\xd9\xe9\x9d\x71\xdb\x2d\xbe\x10\x3e\x69\xb9\x51\x45\x02\x3e\xbf\x4a\xc4\x35\x18\x6a\x63\x13\xc9\x71\xdd\xf2\x25\xc6\xf0\xbf\xe2\x0f\x08\xa3\x98\xc3\x26\x47\x0e\x4b\x6f\xf0\x81\x01\x68\xcb\xe0\xf9\xdc\xfc\x63\xbb\xd7\x07\x06\xcf\xc7\xc6\xa0\x40\x4b\xee\xbb\xa1\xaa\xe5\xbf\x5b\xdb\x61\xcc\x7e\xba\x0a\x6d\xae\xe0\x83\xd3\xef\x8b\xea\x70\xa1\xfb\x3e\xe5\x85\xe4\x44\x8a\x34\x04\x4c\xfa\x28\x11\x12\x50\x81\x28\x41\x2d\x5c\x61\x85\xa2\x38\x2c\xc7\xf7\xce\x33\x62\x7c\x3a\x27\x39\xc3\xbe\x6e\x3d\x68\x61\x59\x4b\xfb\x10\xc7\xae\x70\xf6\x26\x74\x6c\xb2\x62\x25\x58\xb9\xc1\xeb\x70\xc0\x72\xb8\x8b\xb9\x07\x0e\x85\xc9\x82\xe9\x99\xac\xad\x98\x6c\xe2\xf8\x72\xa2\x60\x2d\xb7\xe0\xcd\xb2\x3b\x84\xd6\x35\x88\x12\x5f\xe1\xec\x07\xcf\xfa\x36\x9b\xa0\x97\x2d\xe5\x1b\xb8\xcd\x16\x0b\x21\x05\x2c\x16\x99\x07\x82\xdb\xac\x58\x49\xa9\x81\x10\x92\xed\xf3\xdc\x5a\x50\x49\x85\x1c\x98\x39\x5c\x64\xa2\x15\xb8\x30\xd5\xc5\xbb\x39\xab\xcd\x4a\x08\x7a\xec\xd7\xbd\x87\xb2\xfd\xab\x6f\x6e\x30\x1c\xf5\xae\xee\x66\x0d\x5a\xd3\x25\x64\x39\xb1\x4a\x70\xf6\xb3\x3b\xe0\x7a\x08\x13\x4b\x9f\xb2\xce\x4c\x26\x96\xb7\x28\x43\xd7\x6d\x67\x9a\x8e\x91\xf7\xe2\xa1\x57\xf2\x19\x87\x08\xa7\xd4\x3f\x96\xf6\x17\xa6\x7c\x1c\xbd\xdc\x9e\x55\xba\x62\x65\x09\xe2\x0f\x58\xd7\x9c\x1a\xd0\xc8\x5f\x72\x5c\x67\x39\x29\xb8\x14\x80\x63\xa0\x7f\xe2\x54\x6b\x9c\xf5\x98\x8e\x55\x4c\xd8\x82\xc2\xbc\x0b\x63\x4a\xd4\x4e\x2a\x26\x4a\x9c\xbd\x29\xa8\x2a\xef\x1b\x0e\x9f\x65\xcd\xb1\xbb\x56\xb7\x3b\x7e\xf4\xae\xdb\x7a\xec\x71\x4b\xfc\x51\x96\x3b\x34\x0f\x3d\x2b\x9d\x2b\xd9\x96\x58\xea\xcd\x47\x59\xee\x82\xe9\x2d\x1b\x5d\x3d\x16\x9c\x15\x4f\x47\xea\x31\x31\xd2\xb2\x0c\xb7\x41\x0b\xc3\xb6\xe1\x2d\x80\xfa\x96\x77\x2f\x6e\xc0\x5a\x85\x74\x68\x4d\x98\x38\x50\xa3\x0f\x3e\xbb\xc6\x84\x10\x2e\x69\x69\x33\xcb\x8f\x6e\x84\x8c\x5b\xa8\xd2\x57\xfb\x0a\x3f\x1a\xe6\xd3\xbe\x78\x7f\x2f\xf1\x23\x0d\x03\xe7\x7d\x69\x46\x12\xeb\x4f\x70\xe7\x04\xda\x86\x21\xf3\x0c\x58\xb6\x2e\xf2\x18\xe8\x0e\xe6\x96\x33\x22\x7b\x3e\x7d\x49\x2c\x0f\x00\x90\x0a\xdd\x82\xb2\x59\x73\x1c\x53\x7e\x00\xf7\x87\x01\xeb\xc8\xfb\xe4\x10\xd6\xa3\x7e\x39\xf5\xca\xc2\xeb\xb7\xb0\x5a\x2b\x78\x1b\x11\xce\x8e\xb2\x44\x1b\xc5\xc4\x92\x55\xbb\x96\xeb\xfe\x31\x31\x71\xf0\x34\x41\xdf\xe7\xf9\x2b\x2d\x3e\x31\x69\x7f\x0d\xab\x93\xfa\xcb\x2d\xbf\xb4\x39\x5c\x8c\xfc\x07\x46\xa4\x42\x0a\xa3\x24\xe7\xa0\x0e\xcf\x49\xd1\x16\x37\xd3\x2f\x98\x60\x26\x58\xd5\xfc\x78\xd4\xf9\xd9\xe3\x7d\x1a\x4c\x06\xd3\xd5\x80\xcf\x12\x70\x68\xc0\x2e\x61\xfd\x77\x5f\xef\x38\x0e\x07\xdd\x89\xc1\x63\xd0\x8a\x8a\x65\x67\x46\x82\x2d\x08\x13\xab\x22\x35\xb8\x45\x78\xf6\x3b\x2a\x31\x54\x2d\xc1\x10\xd7\xc8\x67\xf1\x7d\xd0\xe2\xfb\xdf\x1c\x35\xc3\x44\xf3\x58\x48\xd2\xd0\x3c\x1a\x18\x7e\x0a\x6a\xce\x86\x47\x13\xea\xf6\xd5\x8e\xc3\x8d\xb3\x79\x87\xf9\x10\x4a\xf7\x5e\x1e\xfd\x3a\x86\x75\x6d\x76\xb8\xff\xfe\x18\xfd\x1d\x00\x00\xff\xff\x10\xef\x04\x67\x29\x14\x00\x00")
+var _uiJsMainJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x18\x59\x6f\xdb\x36\xf8\x79\xfe\x15\xdf\xdc\x00\x92\x16\x97\xde\xf6\x18\xd7\x05\x76\x75\xd8\x50\xac\x05\x52\xec\x25\x08\x0c\x46\xfa\x6c\x73\xa5\x28\x8d\xa2\x9d\x1a\xad\xff\xfb\xc0\x53\xa7\xaf\x2d\x1b\xd6\x3c\xc4\x22\xbf\x9b\xdf\x49\x46\x9b\x0a\xa1\x52\x92\xa5\x2a\x9a\x8d\x46\x5b\x2a\x21\xa7\x4c\xc0\xdc\xfe\x7c\xfa\x04\x1f\xf7\xb3\xd1\x68\xfa\x55\xf7\x0f\xf2\x22\x43\x5e\x01\xf4\x20\x53\xcb\x66\x25\x8b\x4d\x59\xc1\x1c\xc4\x86\xf3\xd9\x68\xa4\xf9\x91\x9f\xf5\xe6\x6b\x56\x29\x98\xc3\x72\x23\x52\xc5\x0a\x11\x27\xf0\x71\x04\xa0\xd6\xac\x22\x57\xfa\x3f\xcc\xe1\x2a\xd6\x1f\xc9\xcc\xef\x07\x66\x5a\x9b\x7d\x8f\x1b\x29\x65\xa1\x0a\xb5\x2b\x91\x2c\x51\xa5\xeb\x3e\x77\xad\x51\x85\x7c\x09\x73\xc3\x50\x33\xd6\x4b\xc2\x69\xa5\x16\x28\x65\x21\x6b\x4d\x01\xae\xc8\x0a\xd5\xaf\xb7\x6f\x7e\x8b\x61\x3c\xa5\x25\x9b\x6e\xbf\x99\x5a\x15\xc6\x93\x9a\x73\x46\x15\xb5\xdc\x1d\xb3\xa0\xe5\xdd\xfd\xcc\xec\x2e\x0b\x19\x6b\xc9\xef\x71\x07\x4c\x80\x26\x20\x12\xab\x0d\x57\x95\x27\x6c\x91\xde\x35\x31\xee\xde\xe3\xee\x9e\x08\x9a\xe3\xbd\xd6\x0d\x1f\xa1\x36\x3a\xee\x21\x26\x56\xe2\xbe\xd6\xc6\x9c\x25\x51\x92\xad\x56\x28\xe3\x68\x53\x66\x54\x61\x64\xf0\xf6\x09\x59\x52\xc6\xe3\x60\xca\x1f\x7f\x7e\x58\xcb\x09\x28\xfc\xa0\x6e\x15\x55\x9b\x6a\x02\xe6\x50\xbc\x96\x6c\x19\xbb\x43\x9a\xc3\x78\xdc\xd1\xdd\x40\xe2\x71\x5a\x08\x81\x86\x1d\x94\xb2\x78\xe0\x98\x8f\xbd\x52\x80\xbc\xc2\x21\x22\x2b\xa4\x56\x7d\x9f\x9c\x70\xaf\x77\x55\xd0\xbc\xa1\xa6\xb1\xb7\xe5\x50\xf3\x3b\x6b\x05\x57\x7d\x20\x06\x18\xf5\x04\x36\x99\x33\x51\xa9\x33\xa2\x53\xfb\x08\xe6\xa0\xb1\xcd\x77\x00\xa4\x12\xa9\xc2\xcc\xc3\xdc\x32\x80\xad\x4b\x02\xd8\x2d\x03\x78\xc9\x38\xd6\xd1\x64\xb6\x4a\x4e\x77\x9c\x55\xca\x6f\xb7\x55\xef\xa6\xc1\xc2\x73\xf8\x97\x92\x61\x3a\x86\x6b\x4b\x69\x4e\xe0\x1a\xc6\x53\x23\xf1\x68\x92\xb4\xad\xba\x24\x47\x0c\x25\x29\x37\xd5\x3a\x0e\xd9\xf0\x8a\x71\x1c\x48\x86\x33\xb3\xe1\xb9\x61\xf9\xd9\xe5\x44\xcf\xcf\xcd\xb0\xf8\xef\x7c\x1d\xa4\x1e\xf5\x77\x37\x64\x2f\xf3\x79\xa0\xee\xf8\xfd\xad\xdb\xff\x07\xbe\x0f\xac\x3f\x27\xff\xeb\x78\x3f\x52\xa1\x58\x28\x26\x2c\x6b\xf5\x4e\xbf\x6d\x16\x4f\x54\x9f\xaa\x62\x23\xd3\x50\xf8\xec\x2a\x00\x73\x54\x54\xfb\xc6\x83\xfd\xba\x61\x8b\xf7\xe1\xff\xc5\x1e\x14\x4a\x32\x53\x9b\x0c\xd8\x2d\xad\xc2\x03\x03\xd0\x96\xe1\xe3\xa9\xf9\x47\x77\xaf\xdf\x19\x3e\x1e\x1a\x83\x1c\x2c\x98\x6f\x86\xaa\x86\xfd\x66\xad\x87\x31\xfd\x6b\x32\x74\x20\x9f\x6d\x3b\xb2\xb8\x09\x29\x44\xe8\xf5\x93\x6e\x31\x70\x71\x26\x51\x64\x28\x17\x26\x7f\x5c\xec\x0f\xf3\xb1\x2d\xf2\x04\x1b\x1b\xb5\x81\x4f\xbf\x7d\x6b\x23\x1b\x25\xab\x21\xbd\x5f\xae\xae\xe2\xe8\x99\x6b\xcc\x64\xcd\x32\xd4\x7c\x9d\xd5\x8e\x40\x63\x98\xb3\xbd\x45\x8e\xa9\x8a\x9c\xea\x51\x51\x6a\x36\xd1\xc4\xe0\x25\x44\x62\x5e\x6c\xd1\xaa\xa5\x77\x08\x2d\x4b\x14\x59\x7c\x15\x47\x2f\x2c\xea\xcb\x68\x02\x1f\xb7\x94\x6f\xf0\x26\x5a\x2c\x44\x21\x70\xb1\x88\x6c\xbe\xdf\x44\xe9\xba\x28\x2a\x24\x84\x44\xfb\x24\xd1\x1a\x2c\x0b\x09\xa6\x66\x99\xf2\xc7\x44\xc3\x3f\x6e\x78\xf3\x67\x73\x52\x9a\xe6\xe0\xe4\xe8\xcf\xbd\xad\x58\xfb\xb3\x4f\xae\x37\x03\x75\x8e\xee\x79\x8e\x55\x45\x57\x18\x25\x44\x0b\x89\xa3\x9f\x0c\x81\x69\x15\x4c\xac\x6c\x64\x1a\x35\x99\x58\xdd\x40\x04\xd7\x4d\x63\xea\xc6\x90\x74\xfc\x51\xad\x8b\xc7\xd8\x79\x38\x44\xf8\xa1\xe8\xbe\x30\xb2\xfd\x84\x65\xf6\xb4\xd0\x35\xcb\x32\x14\xef\x30\x2f\x39\x55\x58\x81\x3d\x64\xbf\x8e\x12\x92\xf2\x42\x60\xec\x1d\xfd\x03\xa7\x55\x15\x47\x1d\xa4\x43\x19\xe3\xb6\x30\x55\xaf\xdc\x34\xe2\xa5\x93\x25\x13\x59\x1c\x3d\x4b\xa9\xcc\x6e\x6b\x0c\x1b\x65\x35\xd9\xdb\x46\x53\x3b\x4c\xfa\xb6\xdd\x61\x34\xb9\x06\x7e\x5f\x64\x3b\x98\xbb\xd6\x14\xe8\x32\xb6\x25\x1a\xfa\xfc\xa1\xc8\x76\x4e\xf5\x86\x8e\x26\x1f\x53\xce\xd2\xf7\x07\xf2\x31\x20\xd2\x2c\x73\xa7\x41\x53\xc5\xb6\x6e\xe4\x87\xae\xe6\xed\x83\xeb\xa1\x2e\x5d\x38\x34\x06\xc9\xd8\x41\xbd\x0d\x36\xba\xc6\x84\x10\x5e\xd0\x4c\x47\x96\x9d\xd0\x08\x19\x37\xaa\x4a\x57\xec\x19\x76\xd4\xc8\xc7\x6d\xb1\xf6\x5e\x62\x47\xe8\xf9\xa7\x6d\xa9\x27\x0f\x6d\x8f\x33\xe7\x48\xb5\x75\xb3\xe4\x89\x62\x69\x0f\xd2\x4b\x3d\x5a\x7c\x7b\x63\xca\x09\xd6\xb5\x6d\x67\xb1\xff\x3b\xb5\xdd\x15\x84\x90\xf8\xba\x48\xab\x9c\xc7\x3e\x05\x7a\xe5\x7f\xb8\x80\xf5\xae\x25\x3a\xe4\x4f\xd6\x7f\x4d\xd5\xec\xa7\xcd\x2b\x80\xdf\x6f\x58\x69\xaf\x0b\x13\x70\x57\xb5\x2f\x9a\xe4\x4e\x11\x6b\x98\x16\x6e\xcd\x68\xa1\x9c\x6f\xce\xe0\xf4\x7d\xdc\xa4\xa6\x54\xdd\x23\x4a\x89\x2f\x7d\xb9\xd6\xe3\x37\xa9\x94\x64\x62\xc5\x96\xbb\xa6\x45\x41\xd0\xc4\xd4\xdb\x09\x7c\x9b\x24\x67\xea\x78\x69\xcf\xb8\xb8\x21\xf4\x5c\xf1\xa4\xc5\xdf\xf8\xf2\x54\xf1\xef\x20\x1d\xd0\xab\x77\x36\xc3\x77\x26\x45\x1f\xcc\xa4\xdd\xae\xee\x63\xa5\xfd\x66\xcb\x5b\x98\x08\x18\xcc\xe1\xeb\x19\x30\x78\xd1\xea\xa3\x28\x56\x6a\x3d\x03\x76\x7d\xed\x33\xcb\x47\xf1\x50\x04\x77\xa2\xf7\x8e\xdd\xd7\xa1\x0b\x81\xaa\x15\xb8\x60\x95\xf4\xb3\x46\xc0\xb1\x91\xdb\x9a\x28\x5e\xd5\x52\x9f\xd6\x29\x7e\x09\x4a\xd6\x6e\x99\xf5\x05\x9f\x71\xea\x9d\x3e\x6a\xd8\xff\x92\x0d\x04\x24\xcb\x92\x03\xe8\xdf\x49\xc5\x2a\x35\x40\xe2\x6f\x1f\x84\x1a\x8c\x83\xf4\xfc\x61\x93\x1f\x25\xd7\x08\x87\xa8\xdf\x31\xc5\x87\x12\x28\x50\x2b\x8d\x70\x88\xfa\xd6\xdc\x9f\x06\xc8\xed\xc5\xca\xe0\xe8\x71\x31\x31\x9e\x9f\x4e\xe1\xdd\x9b\x1f\xdf\xdc\x00\xcb\x4b\x8e\x39\x0a\x65\x62\x04\x32\xe4\xa8\xf0\xd0\x95\x25\x2d\x84\x92\x05\xe7\x28\x87\xef\x2d\xde\x23\x26\x2c\x17\x4c\x30\xe5\x7c\x53\x3f\xe6\xb6\x9e\x21\x5f\x87\x1b\x44\xef\xb6\xd3\xc3\x33\x01\xee\x26\x65\x53\xd3\xed\xb7\x6d\xcc\xb1\x9f\xe2\xdb\xa3\xbd\x1d\x16\xd6\x54\xac\x5a\x97\x19\xdc\xa2\x50\xcd\xa4\x32\x44\x0b\xf7\x0c\x67\xa0\x44\x51\xb9\x42\x45\xcc\xc4\x3d\xf3\xf7\xf5\x06\xde\x97\x73\xa8\xa7\xfe\xfa\xf2\x1e\xb8\xc1\xdc\x2b\xe8\x9e\x66\x6b\x5a\xf7\x88\x01\xed\x01\xb8\x65\x70\x6d\x6c\xd2\x42\x1e\x1a\xa7\x3a\x2f\x01\xdd\x06\x8b\x79\xa9\x76\x71\xf7\x3d\x60\xf4\x57\x00\x00\x00\xff\xff\xc1\x01\x63\x58\xb9\x17\x00\x00")
 
 func uiJsMainJsBytes() ([]byte, error) {
 	return bindataRead(
@@ -210,7 +210,7 @@ func uiJsMainJs() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "ui/js/main.js", size: 5161, mode: os.FileMode(436), modTime: time.Unix(1530314730, 0)}
+	info := bindataFileInfo{name: "ui/js/main.js", size: 6073, mode: os.FileMode(436), modTime: time.Unix(1530319032, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
diff --git a/cmd/tank/ui/index.html b/cmd/tank/ui/index.html
index 5b34b48..5deaf10 100644
--- a/cmd/tank/ui/index.html
+++ b/cmd/tank/ui/index.html
@@ -50,9 +50,11 @@
              </div>
              <select class="custom-select" id="groupSelect">
              </select>
-<!--             <div class="input-group-append">
+<!--
+             <div class="input-group-append">
                <button class="btn btn-outline-secondary" type="button">Add</button>
-             </div>-->
+             </div>
+-->
            </div>
          </div>
          <div class="col-2"></div>
@@ -81,6 +83,37 @@
          <h3>... loading ...</h3>
        </div>
      </div>
+
+     <table class="table table-striped filesTemplate">
+       <thead>
+         <tr>
+           <th scope="col">#</th>
+           <th scope="col">Artist</th>
+           <th scope="col">Album</th>
+           <th scope="col">Title</th>
+           <th scope="col">Source</th>
+           <th scope="col">Action</th>
+         </tr>
+       </thead>
+       <tbody></tbody>
+     </table>
+
+     <table class="fileTemplate">
+       <tr>
+         <td class="fileId" scope="row"></td>
+         <td class="fileArtist"></td>
+         <td class="fileAlbum"></td>
+         <td class="fileTitle"></td>
+         <td class="fileSource"></td>
+         <td>
+           <div class="btn-group btn-group-sm" role="group">
+             <button type="button" disabled="disabled" class="btn btn-secondary file-edit">Edit</button>
+             <button type="button" class="btn btn-danger file-delete">Delete</button>
+           </div>
+         </td>
+       </tr>
+     </table>
+
    </div>
 
    <script src="js/jquery.min.js"></script>
diff --git a/cmd/tank/ui/js/main.js b/cmd/tank/ui/js/main.js
index a48f2c5..c40ad21 100644
--- a/cmd/tank/ui/js/main.js
+++ b/cmd/tank/ui/js/main.js
@@ -106,8 +106,6 @@ var groupListView = null;
 main.GroupListView = function(model) {
   this.model = model;
 
-  this.groupViews = [];
-
   var self = this;
   $(this.model).on('update', function() {
     self.render_list();
@@ -159,10 +157,10 @@ main.GroupView = function(model) {
   });
 
   $(this.model).on('update-files', function() {
-    self.render_files();
+    self.render_files(cardBody);
   });
   $(this.model).on('update-playlists', function() {
-    self.render_playlists();
+    self.render_playlists(cardBody);
   });
   $(this.model).on('error', function() {
     self.render_error();
@@ -171,14 +169,17 @@ main.GroupView = function(model) {
   $('#groupView').html(this.$el);
 };
 
-main.GroupView.prototype.render_files = function() {
+main.GroupView.prototype.render_files = function(body) {
   $('#error').hide();
-  this.$el.find('div.card-body').html($('<pre>').text(JSON.stringify(this.model.files, null, 2)));
+
+  var fileListView = new main.FileListView(this.model.files, this);
+	fileListView.render();
+  body.html(fileListView.$el);
 };
 
-main.GroupView.prototype.render_playlists = function() {
+main.GroupView.prototype.render_playlists = function(body) {
   $('#error').hide();
-  this.$el.find('div.card-body').html($('<pre>').text(JSON.stringify(this.model.playlists, null, 2)));
+  body.html($('<pre>').text(JSON.stringify(this.model.playlists, null, 2)));
 };
 
 main.GroupView.prototype.render_error = function() {
@@ -186,6 +187,34 @@ main.GroupView.prototype.render_error = function() {
   $('#error').show();
 };
 
+main.FileListView = function(model) {
+  this.model = model;
+  this.$el = $('#hiddenTemplates .filesTemplate').clone().removeClass('filesTemplate');
+};
+
+main.FileListView.prototype.render = function() {
+  var table = this.$el.find("tbody");
+  for (var i = 0; i < this.model.length; i++) {
+    var fileView = new main.FileView(this.model[i], this);
+	  fileView.render();
+    table.append(fileView.$el);
+  }
+};
+
+main.FileView = function(model) {
+  this.model = model;
+  this.$el = $('#hiddenTemplates .fileTemplate tr').clone();
+};
+
+main.FileView.prototype.render = function() {
+  this.$el.find('.fileId').text(this.model.id)
+  this.$el.find('.fileArtist').text(this.model.metadata.artist)
+  this.$el.find('.fileAlbum').text(this.model.metadata.album)
+  this.$el.find('.fileTitle').text(this.model.metadata.title)
+  this.$el.find('.fileSource').text(this.model.source.filename)
+    // TODO: implement file delete
+};
+
 /***************** controller  *****************/
 
 function main_init() {
-- 
GitLab