diff --git a/cmd/tank/bindata_assetfs.go b/cmd/tank/bindata_assetfs.go index da59381d6a6ad5c8da6f3191e99dbf61a4c95b1e..703dd3c0b1fea2f421e2ab93342960cb038ed654 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\x4b\x6f\xe3\x36\x10\xbe\xfb\x57\x4c\x79\x28\x5a\x20\x34\xe1\xe6\x12\xa4\x94\x00\xa3\x29\xda\x00\x2d\x1a\xb4\xe9\x61\x4f\xc1\x48\x9a\x58\xb4\x29\x52\x4b\x8e\xec\xf5\xbf\x5f\x50\x8a\xdf\xce\x63\x81\xdd\x60\x2f\x02\xc9\xef\x61\xcd\xc7\x31\x46\xfa\x87\x9b\x7f\x7e\xbb\xff\x70\xf7\x3b\xfc\x79\xff\xf7\x5f\xf9\x48\xd7\xdc\xd8\x7c\x04\xba\x26\xac\xf2\x11\x80\x66\xc3\x96\xf2\xe9\xff\xff\x4e\xe1\x1e\xdd\xe2\x1a\x6e\x9b\xd6\x07\x86\x1f\xe1\xce\xe2\xda\x9a\xc8\x51\xab\x81\x94\xe8\x0d\x31\x42\x59\x63\x88\xc4\x99\xe8\xf8\x51\x5e\x89\x1d\xe0\xb0\xa1\x4c\x2c\x0d\xad\x92\x87\x80\xd2\x3b\x26\xc7\x99\x58\x99\x8a\xeb\xac\xa2\xa5\x29\x49\xf6\x9b\x0b\x30\xce\xb0\x41\x2b\x63\x89\x96\xb2\xc9\x05\xc4\x3a\x18\xb7\x90\xec\xe5\xa3\xe1\xcc\x79\x91\x8f\x92\xb3\x35\x6e\x01\x75\xa0\xc7\x4c\x94\x31\xaa\xc2\x7b\x8e\x1c\xb0\x95\x81\xd2\x7a\xdc\x18\x37\x2e\x63\x14\x10\xc8\x66\x22\xf2\xda\x52\xac\x89\x78\x78\xaf\xe7\xd4\x5f\x26\x6b\xf0\x05\xb6\x56\x4f\x69\xea\xc2\x57\xeb\x24\x07\x5d\x99\x25\x94\x16\x63\xcc\x44\x0a\x01\x8d\xa3\xd0\x3b\x6f\x40\x53\x65\x22\xc9\x76\xc7\x87\xaa\xe0\x57\x3b\xe0\xd8\xd0\xca\x5f\x44\xae\x55\x65\x96\x2f\x50\xae\xf6\xf5\x00\xba\x9e\xec\xae\x59\xab\x7a\x72\x84\x5e\xe6\xda\xe4\x27\x97\x0f\x37\x48\x8d\x77\x5a\x99\x5c\xab\xfa\xf2\x50\xd3\xe6\x1a\x9f\x42\xaa\x99\xdb\x78\xad\xd4\xcc\xb0\xc5\x62\x1c\x29\x2c\xbb\x38\x46\x56\xd8\xb1\x0f\x58\x19\xaf\x18\xdd\x42\x00\x63\x98\xa5\xd6\x79\x28\x6c\xda\xe7\x6f\x14\x6a\x85\xb9\x56\xed\x7e\xb9\xaf\x94\x7f\x92\xd0\xd1\xee\x5b\x66\xbd\xf6\x1d\x34\x66\x56\x33\xac\xd0\x31\xb0\x07\xc6\x05\x01\x82\xf5\x7e\x01\xc8\xc0\x35\xc1\x36\x3b\x85\xad\x51\xcb\x89\x12\x1b\xc7\x02\xab\x19\x41\xff\x94\x6d\x30\x0d\x86\xb5\xc8\xa7\x77\xb7\x29\x84\xaf\x14\xc0\xc1\x7a\xd3\x8f\xa9\x7d\xdf\xab\x1b\x37\xbf\x49\x21\xf8\x70\x88\x1d\xa3\xb2\xa1\x18\x71\x46\xdb\x7c\xd0\x52\x60\xe8\x9f\xb2\x42\x37\xa3\x20\x20\x78\x4b\x4f\xc8\x89\xdb\xd1\xab\x9d\x89\xee\x3b\xee\xa5\x7d\xd8\xb8\xb6\x63\x39\x0b\xbe\x6b\xa1\x29\xe4\xe5\xd9\xdc\x4e\xb9\xb2\x0d\xd4\x92\xab\x8e\xe9\x00\x3a\xb6\xe8\xce\x29\x98\x3e\xb1\xc8\xff\x48\x6b\xad\x12\xe9\xd5\x4c\x93\x19\x59\x2a\x79\x5b\x4b\x17\xd9\x37\x72\x38\x14\xfd\x75\xf6\xde\xff\x0d\x07\x27\x86\x03\xf1\x8d\x15\x61\xfb\x4c\x41\x45\xc7\xec\xb7\x25\x15\xec\xa0\x60\x27\x7d\xc7\xd6\x38\x92\x91\x4a\xef\xaa\xf4\x7f\x02\x5e\xb7\x94\x89\x81\x2e\xf2\x69\x55\x69\x35\x6c\xde\xb7\x7b\x76\xeb\xbd\x55\x2c\x83\x69\x19\x62\x28\x33\x31\x8f\x6a\xfe\xb1\xa3\xb0\xee\x27\xd6\x3c\x26\xb3\x01\x3f\xcb\xdd\x0d\xb8\xa2\x73\x95\xa5\xb7\xa9\xfa\xf9\xf6\x2c\x6b\x88\x2a\xb5\x84\x9a\xe3\x12\x87\xd3\x4d\xf6\x49\xfa\x90\x66\xf9\x4f\x3f\xff\x3a\x94\xb1\x75\xd0\x6a\x18\x88\x5a\x0d\x9f\x1d\x9f\x03\x00\x00\xff\xff\xfa\xee\xd6\x27\x8e\x08\x00\x00") +var _uiIndexHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x56\x5d\x6f\xec\x34\x10\x7d\xef\xaf\x18\xfc\x80\x40\xba\x89\x59\xfa\x72\x75\x71\x22\x55\x5c\x3e\xae\x04\xa2\x82\x82\xc4\xd3\xd5\x24\x9e\x6e\xdc\x75\xec\x60\x4f\xb2\xec\xbf\x47\x4e\xba\x5f\xd9\x6d\xbb\x88\x0f\xf5\x65\x37\xf6\x9c\x33\xce\x9c\x1c\xdb\xa3\x3e\x79\xff\xd3\xd7\x77\xbf\xdf\x7e\x03\xdf\xdf\xfd\xf8\x43\x79\xa5\x1a\x6e\x6d\x79\x05\xaa\x21\xd4\xe5\x15\x80\x62\xc3\x96\xca\x9b\x5f\x7f\xbe\x81\x3b\x74\xab\x77\xf0\xa1\xed\x7c\x60\xf8\x14\x6e\x2d\x6e\xac\x89\x1c\x95\x9c\x40\x09\xde\x12\x23\xd4\x0d\x86\x48\x5c\x88\x9e\xef\xb3\xb7\x62\x1f\x70\xd8\x52\x21\x06\x43\xeb\x94\x43\x40\xed\x1d\x93\xe3\x42\xac\x8d\xe6\xa6\xd0\x34\x98\x9a\xb2\x71\xf0\x06\x8c\x33\x6c\xd0\x66\xb1\x46\x4b\xc5\xe2\x0d\xc4\x26\x18\xb7\xca\xd8\x67\xf7\x86\x0b\xe7\x45\x79\x95\x32\x5b\xe3\x56\xd0\x04\xba\x2f\x44\x1d\xa3\xac\xbc\xe7\xc8\x01\xbb\x2c\x50\x7a\xce\x5b\xe3\xf2\x3a\x46\x01\x81\x6c\x21\x22\x6f\x2c\xc5\x86\x88\xa7\xf7\x7a\x8a\xfd\xf7\x68\x2d\x3e\x83\x56\xf2\x51\x4d\x55\x79\xbd\x49\x74\x50\xda\x0c\x50\x5b\x8c\xb1\x10\x49\x04\x34\x8e\xc2\x98\x79\x1b\x34\xba\x10\x89\xb6\x9f\x3e\x66\x05\xbf\xde\x07\xe6\x09\x6d\xf6\xa5\x28\x95\xd4\x66\x78\x06\xf2\xf6\x90\x0f\xa0\x9a\xc5\xfe\x33\x2b\xd9\x2c\x66\xd1\xeb\x52\x99\xf2\xe4\xe3\xc3\x7b\xa4\xd6\x3b\x25\x4d\xa9\x64\x73\x7d\xcc\xe9\x4a\x85\x8f\x22\x35\xcc\x5d\x7c\x27\xe5\xd2\xb0\xc5\x2a\x8f\x14\x86\x3e\xe6\xc8\x12\x7b\xf6\x01\xb5\xf1\x92\xd1\xad\x04\x30\x86\x65\xb2\xce\xc7\xca\xa6\x71\x79\x21\x51\x49\x2c\x95\xec\x0e\xcb\x7d\xa1\xfc\x13\x85\x66\xa3\xff\x52\xeb\x8d\xef\xa1\x35\xcb\x86\x61\x8d\x8e\x81\x3d\x30\xae\x08\x10\xac\xf7\x2b\x40\x06\x6e\x08\x76\xda\x49\xec\x8c\x1c\x16\x52\x6c\x33\x56\xa8\x97\x04\xe3\x6f\xd6\x05\xd3\x62\xd8\x88\xf2\xe6\xf6\x43\x12\xe1\x5f\x12\xe0\xf1\x79\x66\xc8\xe4\xdf\xff\xcb\x8e\xdb\x35\x29\x04\x1f\x8e\x63\xf3\x68\xd6\x52\x8c\xb8\xa4\x9d\x40\x68\x29\x30\x8c\xbf\x99\x46\xb7\xa4\x20\x20\x78\x4b\x8f\x91\x93\x6c\xb3\x57\x3b\xa3\xdd\x2b\x36\xd3\x61\xd8\xb8\xae\xe7\x6c\x19\x7c\xdf\x41\x5b\x65\xd7\x67\x75\x3b\xc5\x66\x5d\xa0\x8e\x9c\x9e\xc3\x01\x54\xec\xd0\x9d\x63\x30\xfd\xc9\xa2\xfc\x2e\x3d\x2b\x99\x40\x2f\x6a\x9a\x92\x91\xa5\x9a\x77\xb5\xf4\x91\x7d\x9b\x4d\x93\x62\xfc\x9c\x63\xee\x5f\xa6\x89\x93\x84\x13\xf0\xc2\x8a\xb0\x7b\xa2\xa0\xaa\x67\xf6\xbb\x92\x2a\x76\x50\xb1\xcb\x7c\xcf\xd6\x38\xca\x22\xd5\xde\xe9\xb4\xa1\x80\x37\x1d\x15\x62\x82\x8b\xf2\x46\x6b\x25\xa7\xc1\x2b\x76\xcf\xe2\x65\xf7\x2c\xbe\x38\x90\xfa\x37\x43\xeb\x0b\x28\x17\x9c\x14\xc7\x67\xc6\xfe\x0a\x33\x5a\x93\xbb\xa3\xb6\xb3\xc8\x14\x8f\xae\xb8\xed\x0a\x18\x34\x8c\x6f\xb3\x85\x9d\x3f\x62\x12\x2e\x9b\x5f\x89\x00\xaa\xb7\x5b\x84\xc3\x01\x1c\x0e\x19\x63\x15\xe1\x00\x3e\x4e\xcc\x36\x8d\x35\x07\xac\xcc\x30\xb5\x27\x86\xc3\x43\xc4\x78\xe1\x63\xcd\x66\xa0\x49\xbf\x94\x7f\x72\xea\xb7\xc6\xa6\xca\xc6\xbf\xe3\x23\x38\x69\x62\xcd\x3f\x5f\x78\xbe\xe2\xae\xf5\x12\xe5\x41\x17\xf6\xec\xca\x4a\xf6\xf6\x02\x7f\x8d\xaa\x1d\x1f\xf3\xd3\xe5\x9f\xe7\x39\x58\x8f\xda\xb8\x25\xe4\x79\x7e\x74\xd9\xbf\x6c\x87\x58\x07\xd3\x31\xc4\x50\x17\xe2\x21\xca\x87\x3f\x7a\x0a\x9b\xb1\xc5\x7a\x88\xc9\x5c\x53\xbc\x3c\x87\xdd\x77\x64\x55\xef\xb4\xa5\xcb\x58\x63\x43\xf6\x24\x6a\xda\xda\xe9\x08\x93\x0f\x38\xe0\x34\xbb\xad\x38\x51\x3f\xa6\xe6\xf3\xb3\xcf\xbf\x9a\xea\xd8\x65\x50\x72\xea\xe0\x94\x9c\xfa\xe4\xbf\x02\x00\x00\xff\xff\x96\x61\x35\x57\x3f\x0b\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: 2190, mode: os.FileMode(436), modTime: time.Unix(1530306597, 0)} + info := bindataFileInfo{name: "ui/index.html", size: 2879, mode: os.FileMode(436), modTime: time.Unix(1530312813, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -135,7 +135,7 @@ func uiCssBootstrapMinCss() (*asset, error) { return a, nil } -var _uiCssMainCss = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4c\x8c\x51\xaa\xc2\x30\x10\x45\xff\xb3\x8a\x0b\xfd\x7d\x81\x27\x08\x42\x5c\x4d\xd2\x19\xd3\x60\x3b\xb7\xc4\x88\x14\x71\xef\xd2\x56\xd0\xcf\x3b\x73\xce\x49\x94\xe5\x0f\x3d\xad\xc5\x62\x5a\xf1\x74\x40\x8a\xfd\x35\x57\xde\x4d\x7c\xcf\x91\x35\xa0\x53\xd5\xb3\x03\xa6\x58\x73\xb1\x80\xff\x75\xcc\x51\xa4\x58\xde\xd6\xcb\xb9\x6e\xd0\x28\x9f\xc2\xce\xf9\xc6\x39\xe0\xa4\xd3\x57\xf5\x89\xad\x71\x0a\x38\xae\xd7\x1f\x6b\x38\x6c\xe2\x85\xd6\xfc\x43\x4b\x1e\x5a\x40\xe2\x28\x3b\xa4\xb5\x72\x2f\x4b\xb9\xcd\x63\x5c\x02\x8c\xa6\xeb\xf3\x1d\x00\x00\xff\xff\x1e\x91\xce\x10\xc1\x00\x00\x00") +var _uiCssMainCss = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8c\x4d\x6a\x03\x31\x0c\x46\xf7\x3e\x85\x60\xb6\x35\xb4\x50\x28\xb8\xd7\xc8\x05\xec\x91\xe2\x31\xb1\x25\xa3\x51\x08\x43\xc8\xdd\xc3\xfc\x40\xb2\xc8\xf2\x49\xef\x7d\x49\x70\xf9\x82\x51\xd8\x62\x61\x52\xb8\x3b\x80\x14\xc7\x4b\x56\xb9\x32\xfa\x51\xaa\x68\x80\x81\x88\xfe\x1d\x40\x8b\x9a\x0b\x07\xf8\x5e\xa1\x47\xc4\xc2\x79\xa3\x87\x73\xc3\x44\x11\x8f\x85\xdd\xf3\x26\x3d\xc0\x1f\xb5\x57\xea\x93\x98\x49\x0b\xf0\xbb\x5e\xdf\xaa\xe9\x67\x0b\xcf\xc2\xe6\x6f\x54\xf2\x64\x01\x92\x54\x3c\xa4\x82\x48\x7c\xa2\xd6\x6b\x34\x9a\x37\x15\xcb\xdc\x6b\x5c\x02\xb0\x30\xed\x1a\xa9\x8a\x7e\x7e\x3e\x03\x00\x00\xff\xff\x56\x76\x00\x09\xe8\x00\x00\x00") func uiCssMainCssBytes() ([]byte, error) { return bindataRead( @@ -150,7 +150,7 @@ func uiCssMainCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "ui/css/main.css", size: 193, mode: os.FileMode(436), modTime: time.Unix(1530306053, 0)} + info := bindataFileInfo{name: "ui/css/main.css", size: 232, mode: os.FileMode(436), modTime: time.Unix(1530308842, 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\x8c\x55\x4b\x4f\xe3\x30\x10\xbe\xe7\x57\x8c\xba\x95\xe2\x2c\xc5\x85\xeb\x86\x70\x5d\x69\x85\x76\x0f\x48\x5c\x10\x42\xa6\x9d\x34\x5e\x5c\x3b\x6b\x3b\x2d\x08\xfa\xdf\x57\x7e\xe4\xd1\xa4\x2c\xdb\x43\x13\x7b\x66\xbe\xf9\xe6\x99\xb4\x31\x08\xc6\x6a\xbe\xb2\x69\x9e\x24\x3b\xa6\x61\xcb\xb8\x84\x22\x3c\xde\xdf\xe1\xed\x90\x27\xc9\xf2\xeb\xf8\x07\x5b\xb5\x46\x61\x00\x26\x92\x65\x80\xd9\x68\xd5\xd4\x06\x0a\x90\x8d\x10\x79\x92\x38\x3c\xfa\xdd\x5d\xde\x70\x63\xa1\x80\xb2\x91\x2b\xcb\x95\x24\xeb\x0c\xde\x12\x00\x5b\x71\x43\xe7\xee\x1f\x0a\x98\x13\xf7\x92\xe5\xed\x7d\x87\x76\xff\x90\x27\x87\x09\x1c\xad\xb5\xb2\xca\xbe\xd6\x48\x4b\xb4\xab\x6a\x08\x1f\xd0\x1d\x25\x83\xa2\x84\xc2\x03\x3a\x60\x77\xa4\x82\x19\xfb\x88\x5a\x2b\xdd\x53\x05\x98\xd3\x0d\xda\x1f\xb7\xbf\x7e\x12\x98\x2d\x59\xcd\x97\xbb\xcb\x65\xa0\x30\x5b\x0c\x88\x33\xcb\x02\x7a\x04\x3b\x62\xe9\x6e\x4b\xa5\x89\xf3\xfc\x8c\xaf\xc0\x25\x38\x03\xaa\xd1\x34\xc2\x9a\xd6\xf0\xc8\x94\xd6\x8d\xa9\x88\xc4\x3d\xf4\xf1\x91\xa1\xd5\xfd\x33\xbe\x3e\x64\x59\x40\x3f\x8c\x3d\x53\xa3\xb4\x25\x1d\x3f\xb6\x80\xa7\xde\x0d\x2f\x09\xa3\x92\x6d\x11\xae\xe0\xc9\xbf\x64\xa0\xd1\x36\x5a\xc2\xf9\x65\x3e\x51\xba\x1e\x2b\x75\x3a\xf1\x7c\x11\x38\x44\x2e\x9e\x85\xaf\x1e\xb5\x9a\x6f\x36\xa8\x49\xda\xd4\x6b\x66\x31\xf5\x1a\x87\x8c\x96\x8c\x8b\x9e\xdc\xef\x3f\x2f\x95\x5e\x80\xc5\x17\x7b\x6b\x99\x6d\xcc\x02\x7c\x19\x5a\xc2\xbc\x24\xb1\x2c\x05\xcc\x66\xa3\x6c\x79\x09\x99\xad\x94\x94\xe8\xe1\xa0\xd6\xea\x49\xe0\x76\xd6\xa6\x06\x50\x18\x3c\x65\x14\x9c\xf4\x09\x74\x01\xfc\xb3\xa1\xda\xe6\xe8\x98\x0f\x68\xfa\x78\x8f\x5a\xc8\x3f\xf3\xa3\x76\xee\x13\xe2\x85\xe9\xc4\xe1\x10\x9c\x4b\x63\x07\xd8\xbe\x14\x05\xb8\x5b\xff\xde\x21\xaf\x34\x32\x8b\xeb\x56\x16\x8f\x9d\x38\xa4\xbe\x13\xc7\x63\x70\x7c\x62\x98\x77\x1c\xf7\x9f\xcd\xb2\x4b\xcb\x1d\xc7\xfd\x47\x23\x1d\x65\x5d\x24\x7e\x41\x0c\x42\xf1\x67\xb7\x58\xdc\xd3\x4f\x59\x3f\xd9\x77\xde\x7f\x98\x9b\xd3\xc3\x1a\x16\x42\x00\xc9\xa8\x92\x5d\x77\x2d\xc6\x93\x1e\xab\xad\x51\xae\x51\x3f\x0a\x6e\x2c\x89\x1d\x78\x1a\x27\x14\xe5\x13\x98\xd0\x3b\x1d\xce\xb4\x61\x5c\x04\x83\xa6\x19\x78\x9f\xee\xa2\x39\x49\xbf\xc4\x56\xa0\x15\x5f\xa3\xc3\x8d\x51\x47\x03\xa7\xe1\x13\x73\x8b\x02\x57\x36\x8d\xd4\x53\x55\x3b\x98\x74\xe1\xf5\x32\xaa\x71\xab\x76\xad\x79\xa9\x34\xf8\x65\xc3\xa1\x80\x8b\x1c\x38\x5c\x0d\x12\xdf\x6e\x08\x81\x72\x63\xab\x1c\xf8\xd9\x59\x1b\xa7\xc3\xa2\xac\xae\x51\xae\xc9\x9c\xa4\x57\xc1\xc9\x75\xba\x80\xb7\x1d\x13\x0d\x7e\x9b\xa0\xdc\xf3\x07\xdf\x8d\x61\x7c\x3f\x96\x1f\xc2\xa6\x3a\xfc\x77\xbe\x26\xb3\x36\x4a\xd8\xf9\x16\x8d\x61\x1b\x4c\x33\xea\x3c\x0f\x6a\x39\x98\xc2\x6c\x94\x62\x53\xa9\x3d\x89\x45\x3b\xd5\xfc\x2b\x25\xad\x56\x42\xa0\x3e\x3d\x01\x2d\x19\xbf\x93\x1f\xb9\xe4\x36\xd2\xea\x3f\x71\x47\x0b\xfb\xa6\x6b\xb9\xc9\xdc\x4c\xf4\x9c\x80\x04\x9c\xde\xc2\x84\x8f\x98\xe7\x9c\xfc\x0d\x00\x00\xff\xff\x19\xb6\x6a\x98\xa2\x07\x00\x00") +var _uiJsMainJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x18\xdb\x8e\x1a\x37\xf4\x9d\xaf\x38\x25\x2b\xcd\x4c\x43\x8c\xda\xc7\xa5\x34\x52\x2f\xa9\x54\x45\x4d\xa4\x8d\xf2\x12\x45\xc8\x99\x39\x80\xbb\xc6\x9e\xda\x86\x0d\xda\xf0\xef\x95\xaf\x73\x83\x65\x51\xbb\x55\xb3\x0f\x0b\xf6\xb9\xdf\x8f\xc9\xb6\x1a\x41\x1b\xc5\x4a\x93\xcd\x46\xa3\x1d\x55\xb0\xa1\x4c\xc0\xdc\x7f\x7c\xf9\x02\xf7\x87\xd9\x68\x34\xfd\xb6\xff\x07\x1b\x59\x21\xd7\x00\x03\xc8\xd4\xb3\x59\x29\xb9\xad\x35\xcc\x41\x6c\x39\x9f\x8d\x46\x96\x1f\xf9\xcd\x5e\xbe\x66\xda\xc0\x1c\x96\x5b\x51\x1a\x26\x45\x5e\xc0\xfd\x08\xc0\xac\x99\x26\x57\xf6\x3f\xcc\xe1\x2a\xb7\x5f\x8a\x59\xbc\x4f\xcc\xac\x36\x87\x01\x37\x52\x2b\x69\xa4\xd9\xd7\x48\x96\x68\xca\xf5\x90\xbb\xd5\x48\x23\x5f\xc2\xdc\x31\xb4\x8c\xed\x91\x70\xaa\xcd\x02\x95\x92\xaa\xd1\x14\xe0\x8a\xac\xd0\xfc\x7e\xf3\xe6\x8f\x1c\xc6\x53\x5a\xb3\xe9\xee\xbb\xa9\x57\x61\x3c\x69\x38\x57\xd4\x50\xcf\x3d\x30\x4b\x5a\x7e\xf8\x38\x73\xb7\x4b\xa9\x72\x2b\xf9\x16\xf7\xc0\x04\x58\x02\xa2\x50\x6f\xb9\xd1\x91\xb0\x43\xfa\xa1\x8d\xf1\xe1\x16\xf7\x1f\x89\xa0\x1b\xfc\x68\x75\xc3\x3b\x68\x8c\xce\x07\x88\x85\x97\x78\x68\xb4\x71\xbe\x24\x46\xb1\xd5\x0a\x55\x9e\x6d\xeb\x8a\x1a\xcc\x1c\xde\xa1\x20\x4b\xca\x78\x9e\x4c\xf9\xf3\xaf\xcf\x6b\x35\x01\x83\x9f\xcd\x8d\xa1\x66\xab\x27\xe0\x9c\x12\xb5\x64\xcb\x3c\x38\x69\x0e\xe3\x71\x4f\x77\x07\xc9\xc7\xa5\x14\x02\x1d\x3b\xa8\x95\xfc\xc4\x71\x33\x8e\x4a\x01\x72\x8d\xc7\x88\xbc\x90\x46\xf5\x43\x71\x26\xbc\x31\x54\x49\xf3\x96\x9a\xce\xde\x4e\x40\xdd\xe7\xac\x93\x5c\x8d\x43\x1c\x30\x1b\x08\x6c\x33\x67\x42\x9b\x47\x64\xa7\x8d\x11\xcc\xc1\x62\xbb\xef\x09\x50\x2a\xa4\x06\xab\x08\x0b\xc7\x04\xf6\x21\x49\xe0\x70\x4c\xe0\x25\xe3\xd8\x64\x93\xbb\xaa\x39\xdd\x73\xa6\x4d\xbc\xee\xaa\xde\x2f\x83\x45\xe4\xf0\x44\xc5\x30\x1d\xc3\x73\x4f\xe9\x3c\xf0\x1c\xc6\x53\x27\xf1\xc1\x22\xe9\x5a\x75\x49\x8d\x38\x4a\x52\x6f\xf5\x3a\x4f\xd5\xf0\x8a\x71\x3c\x52\x0c\x8f\xac\x86\x17\x8e\xe5\x57\x57\x13\x83\x38\xb7\xd3\xe2\xbf\x8b\x75\x92\xfa\x60\xbc\xfb\x29\x7b\x59\xcc\x13\x75\x2f\xee\x6f\xc3\xfd\x3f\x88\x7d\x62\xfd\x35\xc5\xdf\xe6\xfb\x03\x1d\x8a\xa5\x66\xc2\xaa\xce\xec\x8c\xd7\xee\xf0\x2f\xf5\x27\x2d\xb7\xaa\x4c\x8d\xcf\x9f\x12\x70\x83\x86\xda\xd8\x44\x70\x3c\xb7\x6c\x89\x31\xfc\xbf\xd8\x83\xc2\x28\xe6\x7a\x93\x03\x87\xa3\x57\xf8\xc8\x02\xb4\x63\x78\x77\x6e\xff\xb1\xd3\xeb\x3d\xc3\xbb\x53\x6b\x50\x80\x25\xf3\xdd\x52\xd5\xb2\xdf\x9d\xed\x32\x66\x3f\x5d\x85\x36\x2e\x78\xef\xe4\xfb\xa2\x3a\x5e\xe8\x7e\x4e\x79\x26\x05\x91\x22\x2d\x01\x93\x7e\x97\x08\x09\xa8\x50\x54\xa8\x16\xae\xb0\x42\x51\x1c\xe7\xe3\x67\xe7\x19\x36\x3e\x9d\x13\x9f\xe1\x5c\xb7\x16\xb4\x7a\x59\x4b\xfa\xb0\x8f\x5d\xe5\xd9\xb3\x30\xb1\xc9\x9a\x55\x68\xf9\x06\xab\x03\x81\xc5\x70\x8e\xb9\x41\x8e\xa5\xc9\x82\xea\x99\xac\x2d\x9b\x6c\xe2\xf0\x0a\xa2\x70\x23\x77\xe8\xd5\xb2\x37\x84\xd6\x35\x8a\x2a\xbf\xca\xb3\x1f\x3c\xea\x8f\xd9\x04\xee\x77\x94\x6f\xf1\x3a\x5b\x2c\x84\x14\xb8\x58\x64\xbe\x11\x5c\x67\xe5\x5a\x4a\x8d\x84\x90\xec\x50\x14\x56\x83\xa5\x54\xe0\x9a\x99\xeb\x8b\x4c\xb4\x02\x17\xb6\xba\xe8\x9b\xb3\xd2\x2c\x87\x20\xc7\x7e\x3d\xf8\x56\x76\x78\xb4\xe7\x06\xcb\x51\xcf\x75\x2f\x36\xa8\x35\x5d\x61\x56\x10\x2b\x24\xcf\x7e\x75\x04\x6e\x86\x30\xb1\xf2\x29\xeb\xd4\x64\x62\x75\x0d\x19\x3c\x6f\x1b\xd3\x4c\x8c\xa2\x17\x0f\xbd\x96\x77\x79\x88\x70\x4a\xfd\x53\x69\x7f\x61\xca\xc7\xd5\xcb\xdd\x59\xa1\x6b\x56\x55\x28\xde\xe1\xa6\xe6\xd4\xa0\x06\xef\xe4\x78\xce\x0a\x52\x72\x29\x30\x8f\x81\xfe\x99\x53\xad\xf3\xac\x87\x74\xaa\x62\xc2\x15\x96\xe6\x55\x58\x53\xa2\x74\xb2\x64\xa2\xca\xb3\x67\x25\x55\xd5\x4d\x83\xe1\xb3\xac\x21\x7b\xdb\x9a\x76\xa7\x49\xdf\x76\x47\x8f\x25\xb7\xc0\x9f\x64\xb5\x87\x79\x98\x59\x89\xae\x62\x3b\x62\xa1\x2f\x3e\xc9\x6a\x1f\x54\x07\x98\x4e\xe1\xdd\x9b\x5f\xde\x5c\xc3\xdd\x7a\x0f\x95\x44\xed\xc4\x81\x14\x7c\x0f\x77\x52\xdd\x82\x14\x25\xbe\x7c\xf9\xd2\xcf\xfb\xa8\xae\x2b\xde\x92\xb3\xf2\xf6\x44\xf1\x26\x44\x5a\x55\xc1\x75\xb4\x34\x6c\x17\x1e\x0e\xd0\x37\xb3\xeb\xe5\x01\xea\x32\xe4\x4e\x6b\x1d\xcd\x03\x34\x1a\xec\x53\x71\x4c\x08\xe1\x92\x56\x36\x0d\xfd\x9e\x47\xc8\xb8\xd5\x82\xfa\x62\x1f\x61\x47\x83\xfc\xb0\x2d\xde\xde\x4b\xec\x48\x9b\xc3\x79\x5b\x9a\xfd\xc5\xda\x13\xcc\x79\xa0\x35\x87\x8d\xf4\x4c\x67\x6d\x39\xf2\x54\x87\x1e\x2c\x39\x67\x58\xf6\x6c\x7a\xba\xc6\x7f\xbc\x75\x9d\x78\xa9\x1c\xeb\xfa\xd0\x2f\xac\x5e\x81\xf8\x20\xd8\x25\x96\x68\xa3\x98\x58\xb1\xe5\xbe\x65\x87\x7f\x46\x4c\x5c\x63\x9a\xc0\xf7\x45\x1c\x13\xcf\x52\xd7\xb2\xb2\xcc\x86\xe7\x51\xcc\x23\x4d\x78\x60\x09\x7f\x0a\x33\x92\xb8\x27\x30\xe5\xd2\x41\x72\xf1\x94\x38\xb2\x4e\x95\x52\x18\x25\x39\x47\x75\x7c\xa7\x8a\xba\xb8\xfd\x7f\xc1\x04\x33\x41\xab\xe6\x87\xa6\xce\x4f\x24\xaf\xd3\x12\x33\xd8\xc4\x06\x78\x16\x90\x87\x61\xed\xca\xd3\x7f\xf7\xe5\x9e\x77\xdd\x1a\xb7\x0b\xdf\x82\xd6\x54\xac\x3a\xfb\x14\xee\x50\x98\x58\x14\x69\x18\x2e\xc2\x4f\x04\x0e\x4a\x0c\x55\x2b\x34\xc4\x0d\xfd\x59\x7c\x4b\xb4\xf0\xbe\x99\x43\xb3\x78\x34\x0f\x8b\xc4\x0d\xe6\x51\xc1\xf0\xb3\x51\x43\x1b\x1e\x58\xd0\x9d\xc1\x1d\x83\x1b\x63\x8b\x0e\xf2\xb1\x26\xdd\x7b\xa5\xf4\x73\x0b\x37\xb5\xd9\xe7\xfd\xb7\xca\xe8\xef\x00\x00\x00\xff\xff\x9a\x65\xf7\xe0\x55\x14\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: 1954, mode: os.FileMode(436), modTime: time.Unix(1530307393, 0)} + info := bindataFileInfo{name: "ui/js/main.js", size: 5205, mode: os.FileMode(436), modTime: time.Unix(1530313341, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/cmd/tank/ui/css/main.css b/cmd/tank/ui/css/main.css index 74cca224913ac0e0434cc23955535eaf37ec7e8d..a12214a611d2997ab27f8e0742e0f2c74d0d4e5c 100644 --- a/cmd/tank/ui/css/main.css +++ b/cmd/tank/ui/css/main.css @@ -13,6 +13,10 @@ body, container { font-weight: bold; } +#hiddenTemplates { + display: none; +} + #error { display: none; } diff --git a/cmd/tank/ui/index.html b/cmd/tank/ui/index.html index c03d4295245b16f0b33716c29089398f52d2a214..6ec9230cd369c735c08ce57e491d8f8d260d20ea 100644 --- a/cmd/tank/ui/index.html +++ b/cmd/tank/ui/index.html @@ -29,6 +29,7 @@ <div class="col-2"></div> </div> </div> + <div id="body"> <div class="row"> <div class="col-2"></div> @@ -56,8 +57,32 @@ </div> <div class="col-2"></div> </div> + <div class="row"> + <div class="col-1"></div> + <div class="col-10" id="groupView"></div> + <div class="col-1"></div> + </div> </div> </div> + + <div id="hiddenTemplates"> + <div class="card groupTemplate"> + <div class="card-header"> + <ul class="nav nav-tabs card-header-tabs"> + <li class="nav-item"> + <a class="nav-link active" id="cardSelectFiles">Files</a> + </li> + <li class="nav-item"> + <a class="nav-link" id="cardSelectPlaylists">Playlists</a> + </li> + </ul> + </div> + <div class="card-body"> + <h3>... loading ...</h3> + </div> + </div> + </div> + <script src="js/jquery.min.js"></script> <script src="js/bootstrap.bundle.min.js"></script> <script src="js/main.js"></script> diff --git a/cmd/tank/ui/js/main.js b/cmd/tank/ui/js/main.js index e17cb1caa0e03ba048bfb57e0e055df748dd4855..c3ee820f82c9ade847b6b865d36a400255b777e7 100644 --- a/cmd/tank/ui/js/main.js +++ b/cmd/tank/ui/js/main.js @@ -6,9 +6,9 @@ var main = main || {}; var groups = null; -main.GroupList = function(d) { +main.GroupList = function() { this.$this = $(this); - this.groups = []; + this.groups = {}; }; main.GroupList.prototype.fetch = function() { @@ -18,13 +18,8 @@ main.GroupList.prototype.fetch = function() { $.getJSON( "/api/v1/groups", function(data) { self.groups = []; for(var key in data.results) { - self.groups.push(new main.Group(data.results[key])); + self.groups[data.results[key].name] = new main.Group(data.results[key]); } - self.groups.sort(function(a, b) { - if(a.name < b.name) return -1; - if(a.name > b.name) return 1; - return 0 - }); self.$this.trigger('update'); }).fail(function(jqxhr, textStatus, error) { if(error == "") { @@ -41,9 +36,67 @@ main.GroupList.prototype.error = function(error) { }; main.Group = function(inst) { + this.$this = $(this); this.name = inst.name; this.created = inst.created; this.updated = inst.updated; + this.files = []; + this.playlists = []; +}; + +main.Group.prototype.fetch_files = function() { + var self = this; + self.last_error = null; + + $.getJSON( "/api/v1/groups/" + self.name + "/files", function(data) { + self.files = []; + for(var key in data.results) { + self.files.push(new main.File(data.results[key])); + } + self.$this.trigger('update-files'); + }).fail(function(jqxhr, textStatus, error) { + if(error == "") { + self.error("connection problem"); + } else { + self.error(error); + } + }); +}; + +main.Group.prototype.fetch_playlists = function() { + var self = this; + self.last_error = null; + + $.getJSON( "/api/v1/groups/" + self.name + "/playlists", function(data) { + self.playlists = []; + for(var key in data.results) { + self.playlists.push(new main.Playlist(data.results[key])); + } + self.$this.trigger('update-playlists'); + }).fail(function(jqxhr, textStatus, error) { + if(error == "") { + self.error("connection problem"); + } else { + self.error(error); + } + }); +}; + +main.File = function(inst) { + this.id = inst.id + this.group = inst.group; + this.created = inst.created; + this.updated = inst.updated; + this.source = inst.source; + this.metadata = inst.metadata; +}; + +main.Playlist = function(inst) { + this.id = inst.id + this.group = inst.group; + this.created = inst.created; + this.updated = inst.updated; + this.entries = inst.entries; }; /***************** views *****************/ @@ -69,22 +122,86 @@ main.GroupListView.prototype.render_list = function() { var list = $('#groupSelect'); $('option', list).remove(); + list.append($('<option>', {value:'__none__', text:'choose...'})) - for (var i = 0; i < this.model.groups.length; i++) { - list.append($('<option>', {value:this.model.groups[i].name, text:this.model.groups[i].name})); + for (var name in this.model.groups) { + list.append($('<option>', {value:name, text:name})); } }; main.GroupListView.prototype.render_error = function() { - $('#error-message').text(this.model.last_error) + $('#error-message').text('Error fetching group listing: ' + this.model.last_error) $('#error').show(); }; +var groupView = null; + +main.GroupView = function(model) { + this.model = model; + this.$el = $('#hiddenTemplates .groupTemplate').clone().removeClass('groupTemplate'); + + var self = this; + var selectFiles = this.$el.find('#cardSelectFiles'); + var selectPlaylists = this.$el.find('#cardSelectPlaylists'); + var cardBody = self.$el.find('div.card-body'); + + // TODO: why does this only work once??? + selectFiles.on('click', function() { + selectFiles.addClass('active'); + selectPlaylists.removeClass('active'); + self.model.fetch_files(); + cardBody.text("...loading files..."); + }); + selectPlaylists.on('click', function() { + selectPlaylists.addClass('active'); + selectFiles.removeClass('active'); + self.model.fetch_playlists(); + cardBody.text("...loading playlists...") + }); + + $(this.model).on('update-files', function() { + self.render_files(); + }); + $(this.model).on('update-playlists', function() { + self.render_playlists(); + }); + $(this.model).on('error', function() { + self.render_error(); + }); +}; + +main.GroupView.prototype.render_files = function() { + $('#error').hide(); + this.$el.find('div.card-body').text(JSON.stringify(this.model.files, null, 2)); + $('#groupView').html(this.$el); +}; + +main.GroupView.prototype.render_playlists = function() { + $('#error').hide(); + this.$el.find('div.card-body').text(JSON.stringify(this.model.playlists, null, 2)); + $('#groupView').html(this.$el); +}; + +main.GroupView.prototype.render_error = function() { + $('#error-message').text(this.model.last_error) + $('#error').show(); +}; /***************** controller *****************/ function main_init() { groups = new main.GroupList(); groupListView = new main.GroupListView(groups); + groups.fetch(); + $('#groupSelect').on('change', function(event) { + var group_name = event.target.value; + if(group_name != '__none__') { + var group = groups.groups[group_name]; + groupView = new main.GroupView(group); + group.fetch_files(); + } else { + $('#groupView').empty(); + } + }); }