diff --git a/cmd/serve/assets-prod.go b/cmd/serve/assets-prod.go index 4beb6e3..5ca3000 100644 --- a/cmd/serve/assets-prod.go +++ b/cmd/serve/assets-prod.go @@ -269,10 +269,10 @@ var assets = func() http.FileSystem { }, "/css/stylesheet.css": &vfsgen۰CompressedFileInfo{ name: "stylesheet.css", - modTime: time.Date(2018, 5, 18, 6, 59, 35, 849983278, time.UTC), - uncompressedSize: 8215, + modTime: time.Date(2018, 5, 18, 15, 9, 17, 39612836, time.UTC), + uncompressedSize: 8427, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x59\xeb\x6e\xa3\x3e\x16\x7f\x15\xf4\xaf\x46\x33\x53\x05\x44\x92\xb6\x6a\x41\xea\x97\x55\xfb\x6d\x57\x2b\x8d\xf6\x01\x0c\x98\xe0\x8d\xb1\x2d\x63\x1a\x32\xa8\xef\xbe\xb2\x31\xc4\x98\x4b\x21\x5d\x75\xf4\x57\xa4\x96\x8b\x7d\x7c\x2e\xbf\x73\xc5\xcb\x20\x48\x20\x77\x31\x22\xc7\x3a\xa2\x5c\x5e\x73\x74\xc8\x44\xb0\x65\x95\x53\x50\x8c\x12\xe7\xe6\xe5\x5e\xfe\xc2\x98\x62\xca\x83\x9b\xdd\x5e\xfe\xc2\xb8\xe4\x05\xe5\x01\xa3\x88\x08\xc8\xc3\x94\x12\xe1\x16\xe8\x37\x0c\xbc\x27\x98\x87\x18\x11\xe8\x66\x50\x51\x7a\xf0\x59\x15\xd2\x37\xc8\x53\x4c\x4f\x41\x86\x92\x04\x92\x90\x81\x24\x41\xe4\x10\xf8\xce\xf6\x81\x55\xef\x26\x1f\x41\x26\x17\xd7\xfa\xb8\xd7\xbb\xbb\xfd\xfe\xe1\xdd\x4b\x4b\x8c\x5d\xf9\x02\x83\x73\xcd\x68\x81\x04\xa2\x24\x48\x51\x05\x93\xf0\xb7\x8b\x48\x02\xab\x60\xeb\x6f\xc3\x04\x15\x0c\x83\x73\xe0\x9e\x60\x74\x44\xc2\x8d\x68\xd5\x3d\x4b\x31\xac\x42\xe3\x85\x4b\x39\x82\x44\x04\x6f\x90\x0b\x14\x03\xdc\x7b\x97\x20\x0e\x63\x75\x08\xa1\x3c\x07\x38\x94\xbb\x5d\x25\x43\x4c\x71\x99\x93\x30\x02\xf1\xf1\xc0\x69\x49\x12\xb7\x61\x96\x1f\x22\xf0\xc3\xdf\xa8\x9f\x77\xff\x33\x14\x94\x05\x7e\x88\x61\x2a\x02\x3f\x6c\xd4\xea\x87\x11\x15\x82\xe6\x81\x3f\x50\x89\x79\x38\x03\xf1\x31\x88\xa1\x52\xed\x7f\xcb\x42\xa0\xf4\xec\xc6\x94\x08\xc9\xad\x7e\xdc\x6a\x70\xbf\x63\xd5\xfb\x6d\x6b\xbc\x13\x4a\x44\xa6\x4e\xa9\xa4\x39\xe4\x02\xfd\x46\x2a\x42\x59\x29\x05\x39\xc2\xe7\xe0\xaf\x5f\xb4\xe4\x31\x74\x7e\x01\x52\x38\xff\xe6\xf4\xaf\x4d\x01\x48\xe1\x16\x90\xa3\x34\xcc\x01\x3f\x20\x12\xf8\x17\x3b\x85\x02\x56\xc2\x4d\x60\x4c\x39\xd0\x5a\x21\xb0\xe3\x39\x3b\xb3\x0c\x92\x22\x00\xa5\xa0\xa1\x79\xf3\x0e\xea\x3e\x52\xde\xbd\x82\x81\x18\xf2\xda\x14\x57\xaa\x36\xd8\x86\xcd\x3f\xc7\x7f\xf7\x08\x2d\x62\x4e\x31\xae\x2d\x25\xbd\xdf\x60\x7a\x40\xc4\x65\xe0\x00\xeb\xaf\x33\xb5\x43\xe8\x89\x03\xd6\xdb\x04\x30\x3a\x90\xd6\x18\xea\xc6\x45\x02\xe6\x45\xfb\x48\xa3\x7f\xeb\xfb\x6f\xd9\x10\x2a\x37\x2f\x2f\x2f\x2b\x2d\x6e\xca\xfe\xec\x41\xce\x29\x77\x73\x58\x14\x52\x15\x8d\xd9\xb7\xbe\xff\xad\x35\x9d\x74\x2b\xe5\x5b\x8e\x1f\xe6\xa0\xd2\xc0\xb8\xf3\xa5\x33\x0e\xb9\x79\x7d\x7d\x0d\x1b\x9c\x8c\x38\x7e\x8b\x01\x49\xad\x81\x81\x29\xbb\xc9\x96\xa3\xaf\x23\x5a\x4d\xb0\xb4\x90\x97\xaf\x37\xed\x94\xf4\x13\xe2\xa9\x4b\xea\x02\x0e\xc1\x3a\x1c\x7e\x04\x9b\xff\xbb\x60\x3d\xeb\x75\xb1\x40\xc5\xa0\x2b\x84\x6d\x2e\xeb\x4b\xb8\xdf\xc3\xbc\x09\x2b\xa7\x0e\xef\x61\x3f\x74\x2f\xa4\xe9\x14\x0c\x90\xba\x81\x8a\xce\x41\x8f\xac\x5a\xb2\x5b\x80\x83\xcc\x37\xf5\x75\x6c\x20\xc2\x4a\xd1\x18\xb2\x55\xd5\xe3\x27\x34\x75\x21\xe7\x78\xcd\x75\x8a\x20\x4e\xae\x01\x49\x04\x0a\x28\x05\xeb\xc1\xa4\x7b\x68\x30\xbb\x96\x19\x87\xd5\x46\x14\xb2\x52\x77\xcf\x02\x8d\xcb\x22\xa2\x5d\xf6\xe1\xfe\x8a\xc3\xd4\x75\xdd\xaf\x1e\x86\x9a\x1e\x89\x3b\x33\x19\xc2\x62\x7a\x35\x4f\x17\xa7\x8d\x30\x8d\x8f\x76\x35\x63\x68\x67\x10\xef\x6c\x7d\xcd\xe5\xb1\xd5\x6c\x39\x68\xe0\x01\x06\x33\xeb\xe9\x8d\xd6\x52\x53\x54\xa2\x52\x08\x4a\xae\x88\x69\x3a\x4e\x65\x94\xa3\xdf\x94\x88\xe5\x91\x8a\xd3\xd3\x58\x98\x5a\xc2\xa1\x03\x5a\xa9\x9e\x9e\x9e\x1a\x2b\x09\x0e\x48\x91\x52\x9e\x07\x25\x63\x90\xc7\xa0\x80\x13\xe9\x65\x0e\x59\x4b\x13\x9c\xc5\x8d\xd7\xdc\xd9\xd5\xce\x9a\xbd\x7d\x63\xa5\x77\x60\x27\x8d\xa5\x4a\xdb\xeb\x0b\x9e\x4f\x19\xa5\xcb\xe1\x6f\xa7\x25\xf5\xcc\x25\x50\xf8\xea\x5a\x6f\x19\x94\xba\xa6\x50\xce\x4d\x81\x12\x18\x01\xfe\x07\xca\x39\xf5\xbc\xc8\xb8\x6c\x3a\xfc\x11\x99\xf6\xf7\xf2\xf7\x39\xb1\x74\xc2\xd4\xf1\x53\x56\x3c\x83\xde\x68\x2e\xc4\xec\x60\x1e\x9a\x35\xda\x10\xce\xda\xa7\x47\x8e\x7e\x06\x2b\x8f\xb5\x62\xa2\x11\x77\x46\xa9\x6b\xbc\x0e\x79\x6a\x82\xfc\xc4\x2e\x0f\xc4\x02\xbd\xc1\xc9\x6d\x76\xda\x36\x89\x44\x34\x39\xcf\x35\x0e\x7f\xa0\x6e\xbc\x0e\x1c\x52\x10\xe7\xa6\x69\x7a\x47\x34\x71\x29\xc7\x27\x0b\x90\xab\x44\xfd\x54\x30\xe8\x5b\x69\x4d\x4d\xbb\x54\x47\x7d\x87\x9c\xd6\x98\x2e\x29\xe6\x80\x30\x40\x7b\x7f\xe0\x60\x78\xd8\x16\xe6\xe1\xfc\xe4\x63\x86\x91\xb5\x1e\x76\x49\x59\x73\x44\x1b\xc7\xda\xcc\xad\x48\x69\x5c\x16\x76\x5e\x1f\xae\x3f\x70\x94\x74\x3d\xb4\x7b\x6e\xfa\xf3\x16\x25\xf2\x65\x28\xff\xb8\x02\xe6\x0c\x03\x01\x5d\x4e\x4f\xba\x89\xef\x3f\x6f\x30\x5f\x04\x1c\x32\x08\xc4\x8f\xbb\x8d\xb3\x4d\xf9\xcf\x66\xd1\x01\xb0\xa6\x4e\xec\xa7\xf0\x71\x66\x1c\x2f\xa2\xf4\x98\x03\x7e\xfc\x03\xf1\xde\xc4\xe1\x64\xd5\x39\xee\x8d\x97\xec\xf7\xed\x63\xd1\x02\x0c\x0a\xe1\xc6\x19\xc2\x49\x5b\xce\xb5\x6e\xbc\x48\x35\x8d\xfd\x2f\xf7\x6e\x0e\x49\xf9\x6c\xd5\xac\x1f\x93\x31\x08\xe8\x49\x82\x55\xf5\x76\x63\x34\x0e\x31\x90\x41\x79\xba\x30\xba\xe6\xb4\x56\x0c\x81\x04\x86\x63\x68\xfe\x90\x80\x42\xb9\x26\xb0\x0c\xec\x73\xe4\x9e\x6f\x03\x42\xc5\x0f\xc3\x3a\x3f\x2d\xf3\x3c\x2e\xb1\xce\x90\xb0\x83\xf2\x43\x7d\x19\x6c\x2c\x03\xc9\x08\x19\x2d\xa8\x11\x9b\xbc\x9d\xd5\x5e\x3f\xf8\xbe\x1d\xca\x66\x92\xee\xaa\x73\x83\x14\xf1\x0e\xb6\xfa\x0c\x57\x50\xb6\x10\xb4\x63\x74\x61\x15\x43\xce\xa6\x9a\x3f\xcd\xbf\x8a\x92\x5d\x26\x80\x18\x23\x56\xa0\x22\x3c\x51\x9e\xb8\xd2\x6d\x83\x88\x43\x70\x74\xe5\xfd\x30\x61\x4c\x8f\x9d\xb7\xde\xbd\xea\x66\xab\xee\xc1\x4e\x36\x8a\x2b\xc4\x90\x5e\x67\xce\x04\x9c\x6e\xa6\xf6\xf5\xc9\x77\x32\x85\xae\xc8\xc3\xab\x85\xef\xf7\x58\xfd\x6a\x99\x32\x10\x23\x71\x0e\xbc\xc7\x4e\x70\x35\x11\xb6\x1b\xf3\xd5\x47\x4e\xfa\xa8\xce\xce\xbb\x95\x60\xd4\x54\x27\x53\xea\x47\x1b\x47\x32\x6d\x27\xfc\xba\xb0\xa8\x08\x7a\x25\xc7\xb3\x95\x4b\x47\xdb\x2a\xc7\x4f\x19\x12\xd0\x55\xc3\xf3\x40\x83\xc2\xf6\x86\x09\x4f\x32\xbd\x62\xb7\x95\xea\x8b\x41\x9c\xc1\xbf\xd1\x10\x5d\x55\x24\x06\xec\x55\x13\x6a\x8a\x71\x41\x6a\x9b\x1e\xcc\x77\xc1\x1b\x2a\x90\x80\xc9\xec\x9a\xa6\x99\xb1\xbf\x72\x94\x24\x81\x5c\x2a\xd0\x5c\xfd\x7c\xdb\x9f\x6e\xb7\x81\xff\xf1\xe1\xae\xaf\x5d\xe7\x46\xc5\x90\xaf\x8f\x16\x7d\x96\x3e\x1e\x66\xda\x2c\x3b\x60\x16\xa3\x56\xd8\x9d\xab\x73\xfb\xf3\x67\x7b\x3a\x32\x3c\xd7\x9e\x80\x8d\x6a\x74\x2c\x4a\x7c\x54\xc3\x8f\xd0\xb0\x60\xa1\xaa\xf2\x91\x65\x23\x33\xb4\xd1\xaf\x61\xf6\x66\x01\x12\x20\x2e\x53\xe5\xfd\x6e\xbd\x25\x1a\x12\x0e\xa8\x2d\x8d\x5b\x95\xe0\xe8\xa6\x6c\x5f\xf7\xe7\x08\xfa\x33\x8c\xcc\x64\xfe\xc4\x1e\x66\x1f\x64\x15\x17\xe6\xa6\xb6\xa6\x34\x0d\xec\x48\x21\xd5\x9f\xd1\xb5\xce\x6d\x6b\xdc\xb6\xae\xe8\xa7\xec\x47\xff\xdb\x25\xa8\xa9\xcf\x87\xa3\x54\x18\x87\x9b\xd1\x17\x31\x4d\x74\xf9\xa4\x3f\x72\x7e\xff\x4f\x54\x12\x51\x3a\xff\xa4\x84\x7e\xdf\x7c\xff\x07\x2d\x39\x82\xdc\xf9\x17\x3c\x7d\xdf\xe8\x9b\x4d\x4e\x09\x55\x61\xd5\x3c\xcc\x4b\x54\xc4\x96\xf4\x46\x06\x15\xbb\x9d\x56\x8c\x0a\xca\xe3\xfb\x3a\x47\x5a\xbc\xd2\xc2\xe3\x92\x1d\xd7\x40\xb3\x4f\xa6\x33\xbc\x79\xe8\xff\x02\x00\x00\xff\xff\x78\xa8\x42\xf0\x17\x20\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x59\xdd\x6f\xa3\x38\x10\xff\x57\xd0\x56\xab\xee\xae\x02\x82\xa4\xad\x5a\x90\xfa\x72\x6a\xdf\xee\x74\xd2\xea\x9e\x4e\xf7\xe0\xc0\x10\x7c\x01\x1b\x19\xd3\x90\x45\xfd\xdf\x4f\x36\x86\x18\xf3\xd1\x90\xae\xba\x3a\x45\x6a\xf9\xb0\xc7\xf3\x3d\xbf\x19\x9c\x04\x50\x04\xcc\x4e\x31\xd9\xd7\x5b\xca\xc4\x35\xc3\xbb\x84\xfb\x5e\x5e\x59\x05\x4d\x71\x64\x5d\x3d\xdd\x8a\x5f\x10\xd2\x94\x32\xff\x6a\xbd\x11\xbf\x20\x2c\x59\x41\x99\x9f\x53\x4c\x38\xb0\x20\xa6\x84\xdb\x05\xfe\x01\xbe\xf3\x00\x59\x90\x62\x02\x76\x02\x92\xd2\x9d\x9b\x57\x01\x7d\x01\x16\xa7\xf4\xe0\x27\x38\x8a\x80\x04\x39\x8a\x22\x4c\x76\xbe\x6b\x79\x77\x79\xf5\xaa\xf3\xe1\x27\x62\x71\xad\x8e\x7b\xbe\xb9\xd9\x6c\xee\x5e\x9d\xb8\x4c\x53\x5b\xbc\x48\xd1\xb1\xce\x69\x81\x39\xa6\xc4\x8f\x71\x05\x51\xf0\xc3\xc6\x24\x82\xca\xf7\x5c\x2f\x88\x70\x91\xa7\xe8\xe8\xdb\x07\xd8\xee\x31\xb7\xb7\xb4\xea\x9e\xc5\x29\x54\x81\xf6\xc2\xa6\x0c\x03\xe1\xfe\x0b\x30\x8e\x43\x94\xf6\xde\x45\x98\x41\x28\x0f\x21\x94\x65\x28\x0d\xc4\x6e\x5b\xca\x10\xd2\xb4\xcc\x48\xb0\x45\xe1\x7e\xc7\x68\x49\x22\xbb\x61\x96\xed\xb6\xe8\x8b\xbb\x92\x3f\xe7\xf6\x6b\xc0\x69\xee\xbb\x41\x0a\x31\xf7\xdd\xa0\x51\xab\x1b\x6c\x29\xe7\x34\xf3\xdd\x81\x4a\xf4\xc3\x73\x14\xee\xfd\x10\xa4\x6a\xff\x2d\x0b\x8e\xe3\xa3\x1d\x52\xc2\x05\xb7\xea\x71\xab\xc1\xcd\x3a\xaf\x5e\xbf\xb5\xc6\x3b\xe0\x88\x27\xf2\x94\x4a\x98\x43\x2c\x50\x6f\x84\x22\xa4\x95\x62\x94\xe1\xf4\xe8\x7f\xfa\x4e\x4b\x16\x82\xf5\x1d\x91\xc2\xfa\x93\xd1\x4f\xab\x02\x91\xc2\x2e\x80\xe1\x38\xc8\x10\xdb\x61\xe2\xbb\x27\x3b\x05\x1c\x2a\x6e\x47\x10\x52\x86\x94\x56\x08\x74\x3c\x27\xc7\x3c\x01\x52\xf8\xa8\xe4\x34\xd0\x6f\x5e\x51\xdd\xf7\x94\x57\xa7\xc8\x51\x08\xac\xd6\xc5\x15\xaa\xf5\xbd\xa0\xf9\x67\xb9\xaf\x0e\xa1\x45\xc8\x68\x9a\xd6\x86\x92\x5e\xaf\x52\xba\xc3\xc4\xce\xd1\x0e\xea\x8f\x33\xb5\x45\xe8\x81\xa1\xbc\xb7\x09\xa5\x78\x47\x5a\x63\xc8\x1b\x1b\x73\xc8\x8a\xf6\x91\xf2\x7e\xcf\x75\x5f\x92\xa1\xab\x5c\x3d\x3d\x3d\x2d\xb4\xb8\x2e\xfb\xa3\x03\x8c\x51\x66\x67\x50\x14\x42\x15\x8d\xd9\x3d\xd7\xfd\xdc\x9a\x4e\x84\x95\x8c\x2d\xcb\x0d\x32\x54\x29\xc7\xb8\x71\x45\x30\x0e\xb9\x79\x7e\x7e\x0e\x1a\x3f\x19\x09\xfc\xd6\x07\x04\xb5\xc6\x0d\x74\xd9\x75\xb6\x2c\x75\xbd\xa5\xd5\x04\x4b\x67\xf2\xf2\xf1\xa6\x9d\x92\x7e\x42\x3c\x79\x49\x6d\xc4\x00\x2d\xf3\xc3\xb7\xdc\xe6\xa7\x0b\xd6\xb3\x5e\x97\x0b\x64\x0e\xba\x40\xd8\xe6\xb2\x3e\xa5\xfb\x0d\x64\x4d\x5a\x39\x74\xfe\x1e\xf4\x53\xf7\x99\x34\xad\x22\x47\xa4\x6e\x5c\x45\xd5\xa0\xfb\xbc\x3a\x67\x37\x47\x3b\x51\x6f\xea\xcb\xd8\xc0\x24\x2f\x79\x63\xc8\x56\x55\xf7\xef\xd0\xd4\x89\x9c\xe5\x34\xd7\x31\x86\x34\xba\xc4\x49\xb6\xa8\x00\x21\x58\xcf\x4d\xba\x87\x1a\xb3\x4b\x99\xb1\xf2\x5a\xcb\x42\x46\xe9\xee\x59\xa0\x09\x59\x4c\x54\xc8\xde\xdd\x5e\x70\x98\xbc\xae\xfb\xe8\x61\xa8\xe9\x91\xbc\x33\x53\x21\x0c\xa6\x17\xf3\x74\x0a\xda\x6d\x4a\xc3\xbd\x89\x66\x34\xed\x0c\xf2\x9d\xa9\xaf\xb9\x3a\xb6\x98\x2d\x0b\x0f\x22\x40\x63\x66\x39\xbd\x51\x2c\x35\x45\x65\x5b\x72\x4e\xc9\x05\x39\x4d\xe5\xa9\x84\x32\xfc\x83\x12\x7e\x7e\xa6\x62\xf4\x30\x96\xa6\xce\xe1\xd0\x42\xad\x54\x0f\x0f\x0f\x8d\x95\x38\x43\xa4\x88\x29\xcb\xfc\x32\xcf\x81\x85\xa8\x80\x89\xf2\x32\xe7\x59\xe7\x16\x38\x83\x1b\xa7\xb9\x33\xd1\xce\x92\xbd\x7d\x63\xc5\x37\x68\x2d\x8c\x25\xa1\xed\xe5\x80\xe7\x5d\x46\xe9\x6a\xf8\xcb\xe1\x1c\x3c\x73\x4a\x14\xae\xbc\x56\x5b\x06\x50\x57\x17\xca\xba\x2a\x70\x04\x5b\xc4\x7e\x01\x9c\x93\xcf\x8b\x84\x89\xa6\xc3\x1d\x91\x69\x73\x2b\x7e\xef\x13\x4b\x15\x4c\x95\x3f\x05\xe2\x19\xf4\x46\x73\x29\x66\x0d\x59\xa0\x63\xb4\xa1\x3b\xab\x98\x1e\x39\xfa\x11\x2d\x3c\xd6\xc8\x89\x5a\xde\x19\xa5\xae\xfc\x75\xc8\x53\x93\xe4\x27\x76\x39\x28\xe4\xf8\x05\x26\xb7\x99\x65\x5b\x27\xb2\xa5\xd1\x71\xae\x71\xf8\x05\xb8\xf1\x32\xe7\x10\x82\x58\x57\x4d\xd3\x3b\xa2\x89\x13\x1c\x9f\x04\x20\x17\x89\xfa\xae\x64\xd0\xb7\xd2\x12\x4c\x7b\xae\x8e\xfa\x01\x39\xad\x31\x05\x29\xe6\x1c\x61\xe0\xed\xfd\x81\x83\x16\x61\x1e\x64\xc1\xfc\xe4\x63\x86\x91\xa5\x11\x76\x2a\x59\x73\x44\x9b\xc0\x5a\xcd\xad\x88\x69\x58\x16\x66\x5d\x1f\xae\xdf\x31\x1c\x75\x3d\xb4\x7d\x6c\xfa\xf3\xd6\x4b\xc4\xcb\x40\xfc\xb1\x39\x64\x79\x8a\x38\xd8\x8c\x1e\x54\x13\xdf\x7f\xde\xf8\x7c\xe1\x33\xc8\x01\xf1\x2f\x37\x2b\xcb\x8b\xd9\xd7\x66\xd1\x0e\xe5\x0d\x4e\xd4\x4b\xb8\x6a\x3d\xa7\x78\x7a\x8c\xf0\x8b\x9f\xa2\x82\xdb\x61\x82\xd3\xa8\x96\x84\x9a\x43\xec\x82\x23\xc6\x7d\x2f\xd0\x9f\x01\x89\x7c\xdb\xeb\x6a\x90\x80\x08\xe3\x84\x2d\x67\x4b\xe9\x3e\x43\x6c\xff\x0b\xea\x89\xee\xe7\x93\xa8\x76\x3c\xda\x4f\xd5\xf5\xf3\xdb\xa2\x35\xfe\x71\xba\xb7\x33\x20\xe5\x23\x1a\x73\x18\x63\xa3\x74\x9b\xc1\xc6\x3e\x18\x7e\xfb\x7c\x8d\x80\x1a\x51\x18\x70\xba\x9b\xcf\x31\x48\x91\xc8\xf6\xd3\x88\xab\x85\xde\x11\xc4\xa8\x4c\xf9\x25\x87\xff\x9d\x30\x88\xff\x19\x20\xaf\x4b\x09\xb5\xda\xe5\x98\xa7\xf0\xb6\x4e\x27\xc9\x28\x5d\x4b\x32\xe7\x45\xea\x1c\x51\x0b\x67\xbb\xfa\x34\x3c\xd1\xe6\x2a\x6d\x89\xb8\x3f\x27\x2a\x46\x08\x2b\x0e\x65\xb2\xea\x12\x32\xa4\x29\xce\x0b\x5c\x04\x07\xca\x22\x5b\x78\xb7\xbf\x65\x80\xf6\xb6\xb8\x1f\xe6\xed\x53\x36\x75\xd6\xc6\xf8\xd7\x73\x36\xb2\xab\xac\xda\x07\xb7\x72\x89\xde\xac\xdf\xb9\xae\x99\x9f\x67\x90\xc4\x22\xb1\xfc\x18\xb3\x2e\xcb\x28\x7d\x71\x9a\xab\x36\xe3\x12\xb2\x50\x85\xc0\xf2\xa9\x86\x56\xb1\xff\x73\x94\x39\x18\xa5\x7b\xce\x6d\x5f\x97\xde\x5a\x34\xbf\x0b\xc4\x10\x01\xaf\xcf\x39\xac\x2e\x59\x7f\x3c\xa0\x98\x84\x05\x0b\xb0\xc5\x62\xe1\xfb\x7d\x63\xbf\x03\xa0\x39\x0a\x31\x3f\xfa\xce\x7d\x27\xb8\x9c\x72\x9b\xc3\x86\xc5\x47\xfa\x84\xf2\x2f\x5a\xbd\xfb\xda\xef\xf2\xbd\xf5\x42\x67\x54\x54\x27\x61\xc2\x5b\x1b\x47\xd0\x43\x27\xbc\xb7\x9c\x13\xa7\x64\xe9\x2c\x1a\xeb\x68\x1b\x2d\xc6\x21\xc1\x1c\x6c\xf9\x41\xc0\x57\x4e\x61\x46\xc3\x44\x24\xe9\x51\xb1\x96\x78\x20\x44\x61\x02\xff\xa3\x0f\x03\x12\x65\x69\x6e\x2f\x1b\x6b\x5d\x8c\x93\xa7\xb6\x55\x43\x7f\xe7\xbf\xe0\x02\x73\x88\x66\xd7\x34\x0d\x9a\xf9\xe5\xa6\x24\x11\x30\xa1\x40\x7d\xf5\xe3\xb7\xfe\xc4\xbe\x2d\x34\xf7\x77\x37\x7d\xed\x5a\x57\x32\x87\x7c\x7c\xb6\xe8\xb3\xf4\xf6\x80\xd6\x64\xd9\x42\xb3\x3e\x6a\xa4\xdd\x39\xec\xde\x9f\xa9\x9b\xb8\x63\x78\xae\x39\xd5\x1b\xd5\xe8\x58\x96\x78\xab\x2f\x19\xa1\x61\xb8\x85\xec\x34\x46\x96\x8d\xcc\x05\x47\xbf\xf0\x99\x9b\x39\x8a\x10\x3f\x4d\xca\x37\xeb\xe5\x96\x68\x48\x58\xa8\x36\x34\x6e\x80\xd0\xd1\x4d\xc9\xa6\xee\xcf\x46\xd4\xa7\xa5\xfb\xa6\xd9\x18\xdd\x93\x9b\x07\x19\xd8\x42\xdf\xd4\xc2\xd9\x5e\x2b\x23\x84\x94\x7f\x46\xd7\x5a\xdf\x4c\x5c\xd1\x2f\xd9\xf7\xee\xe7\x53\x52\x93\x9f\x44\x47\xa9\xe4\x0c\x56\xa3\x2f\x42\x1a\xa9\x4f\x1b\xea\xc3\xed\xf5\x5f\xdb\x92\xf0\xd2\xfa\x9d\x12\x7a\xbd\xba\xfe\x8d\x96\x0c\x03\xb3\xfe\x80\xc3\xf5\x4a\xdd\xac\x32\x4a\xa8\x4c\xab\xfa\x61\x4e\x24\x33\xb6\xa0\x37\x32\x7c\x59\xaf\x95\x62\x64\x52\x1e\xdf\xd7\x05\xd2\xd9\x2b\x0d\x7f\x3c\x67\xc7\x25\xae\xd9\x27\xd3\x19\x5e\x3f\xf4\xbf\x00\x00\x00\xff\xff\xb1\xad\x3f\x45\xeb\x20\x00\x00"), }, "/css/ubuntu-mono.css": &vfsgen۰CompressedFileInfo{ name: "ubuntu-mono.css", @@ -297,10 +297,10 @@ var assets = func() http.FileSystem { }, "/index.html": &vfsgen۰CompressedFileInfo{ name: "index.html", - modTime: time.Date(2018, 5, 18, 7, 6, 15, 19586771, time.UTC), - uncompressedSize: 6948, + modTime: time.Date(2018, 5, 18, 15, 6, 23, 234537706, time.UTC), + uncompressedSize: 9271, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x59\xeb\x8e\xdb\xb8\x15\xfe\xef\xa7\x38\xab\xfe\x90\x8d\x1d\x49\x99\x6c\xb2\x28\x1c\x6b\xda\x64\x92\x45\xd1\xee\x6e\x16\xc9\x24\xe8\x22\x08\x0a\x9a\x3a\x96\x98\xa1\x48\x95\xa4\x3c\x9e\x1d\xcc\xab\x14\x7d\xba\x3e\x47\x41\xea\x62\xd9\x96\x14\xcf\x05\xe1\x9f\x19\xf3\xdc\xbe\x73\xc8\x73\xa1\xbd\xf8\xee\xf5\xdb\xf3\x8b\xdf\x7f\x7b\x03\x99\xc9\xf9\xd9\x64\x61\xff\x00\x27\x22\x8d\x3d\x14\xde\xd9\x64\xb2\xc8\x90\x24\x67\x13\x00\x80\x45\x8e\x86\x00\xcd\x88\xd2\x68\x62\xef\xc3\xc5\x4f\xc1\x9f\xbd\x2e\x49\x90\x1c\x63\x6f\xcd\xf0\xaa\x90\xca\x78\x40\xa5\x30\x28\x4c\xec\x5d\xb1\xc4\x64\x71\x82\x6b\x46\x31\x70\x1f\x4e\x80\x09\x66\x18\xe1\x81\xa6\x84\x63\x7c\x1a\x3e\xd9\x51\x95\x19\x53\x04\xf8\xef\x92\xad\x63\xef\x9f\xc1\x87\x97\xc1\xb9\xcc\x0b\x62\xd8\x92\x63\x47\x2f\xc3\x18\x93\x14\x1b\x49\xce\xc4\x25\x28\xe4\xb1\xa7\xcd\x35\x47\x9d\x21\x1a\x0f\x32\x85\xab\xd8\x8b\xa8\xd6\xd1\x4a\x0a\x43\xae\x50\xcb\x1c\x43\xaa\xf5\xd1\x72\x5a\x96\x8a\x62\xa0\x89\xd0\x41\xa1\xe4\x9d\x64\xaf\x39\x09\x12\x46\xb8\x4c\xef\x2c\x66\xa4\xe4\x86\x15\x77\x83\xda\x6e\x77\xc5\x34\x55\xac\x30\xa0\x15\x8d\xbd\xe8\x8b\x8e\xd6\x25\x86\x5f\xb4\x77\xb6\x88\x2a\xca\x00\x1b\xd9\x30\xa9\x8f\x61\xfc\xa2\x03\x2a\xe5\x25\x3b\x4a\x2b\x95\x79\x21\x05\x0a\xb3\xe3\xe4\x9d\x05\xeb\xa0\x1e\x21\x57\x90\x14\xa3\x25\xd1\xbd\xe8\xb6\x11\x25\x45\xc1\x31\x30\xb2\xa4\x59\xc0\xa8\x14\x41\xa1\xd0\x99\xd4\x98\x78\xa0\xd9\x1f\xa8\x63\xef\xf4\xd9\xb3\xcd\xe9\xb3\x67\x6d\xcc\x15\xea\xe8\x40\xb0\x66\x0a\x0b\x91\x7a\x10\xdd\xd3\xd0\xf3\xa7\x9b\xd3\xe7\x4f\xbf\x62\xa8\x62\x1a\x32\x64\x79\x3c\x30\xd7\x05\xc6\x1e\xcb\x6d\x14\x1c\x63\x47\xe3\x8a\xac\x9d\xa2\x1f\x9e\x6e\x7e\xa8\xd5\xd4\xf6\xdd\xce\xc3\x94\x9e\xfe\xb8\x39\xfd\x71\x47\xa9\xdb\xd9\x2a\x35\xcc\x70\x3c\x7b\x9f\x31\xa9\x18\x04\xf0\x4a\xca\xcb\x9c\xa8\x4b\x0d\xbf\x10\x41\x52\x54\x8b\xa8\xe2\x98\x2c\xa2\xaa\x0c\x4d\x16\x4b\x99\x5c\xd7\xd2\x09\x5b\x03\x4b\x62\x8f\x89\x04\x37\x81\x3d\xe4\xfa\xba\xef\x50\x35\x4b\x70\x49\x54\x87\xe4\xc8\x85\x23\x72\x99\x4a\xef\xec\x7f\xff\xfd\xcf\x22\x2a\xf6\x18\x3a\x77\x13\x0a\x4e\x28\xe6\xae\xe4\x28\x96\x66\xdd\xd2\xf6\x0e\xb9\x24\x09\x24\xc4\x90\x3d\x13\x4e\x0b\x39\xdc\x73\xfb\x0c\x28\x27\x5a\xc7\xde\x8a\x68\x58\x91\x40\x5f\x0b\x1a\x10\x6e\xec\xff\xab\x2b\x7b\x49\x59\x8f\xb6\x68\x4f\xdd\xa2\x9b\x41\xf7\xc3\xff\x32\x49\x40\xe0\x15\x2c\xeb\xd8\xf7\x3a\x01\x7f\xa5\x9c\xd1\xcb\xd8\xd3\x99\xbc\x7a\xed\xf2\xee\x65\x92\xf4\xb0\xf6\xfa\x56\xf0\x52\x7f\x73\xbf\x5e\x11\x43\x33\xc0\x84\x99\x87\x1c\x4b\x81\x82\x32\xfe\xb8\x07\x63\x2f\x66\x6d\x45\x17\x84\xa2\xb2\x4a\x13\xb6\xbe\x9f\x9f\x17\x32\x4d\x39\x82\xb0\xdb\x90\xcb\x04\x1f\xe2\x6e\x2e\xa5\xf8\xe6\x27\xf5\xb3\x4c\x41\x96\x0f\x3a\x26\xcd\x52\x11\xc8\xd2\x3c\xda\x41\xed\x1d\x48\x5b\x4c\x6c\xf5\xd9\xaf\x24\x0d\xcd\x56\x28\xdc\xaf\x33\x15\x5c\x51\x94\xa6\xae\x98\x06\x37\xc6\xab\xc2\x91\x49\x9e\xa0\x8a\xbd\xf7\x48\x14\xcd\xda\x0c\xd4\xb0\xbc\x86\x52\xf1\x13\x30\x24\xd5\x27\xe0\x4a\x20\x48\xd5\x44\xec\x41\x81\xaa\x4c\xdd\x31\x44\x87\x97\xb3\xf1\x39\x55\xac\xaf\x0c\x74\xef\x78\x5b\x58\x60\x1d\xac\xa4\xaa\x36\x80\x89\xad\xbf\x43\x75\x84\xec\xab\x08\x9a\x08\xc0\xbc\xea\x36\x7e\xd4\x90\x22\xff\x7b\xfb\x6f\xc8\x12\x0f\x0c\x51\xa9\x1d\x50\xff\xb5\xe4\x44\xf4\x15\xb4\x6d\x78\xf2\x14\xd6\x01\x5b\x55\x26\x42\xd7\xcd\x3e\xbc\xfb\x19\xbe\x8b\x63\xf0\x7d\x0f\xe6\x6e\x84\xd8\xa1\x8d\xa9\x2b\x1a\xc0\xee\xc8\xbc\xb3\x9b\x1b\x27\xea\x3e\xdd\xde\x1e\xb4\x98\x7e\x59\xdc\x50\x54\x85\xf1\x7a\x81\xc5\x15\xb0\x46\x73\xcd\x3b\xa2\xfb\xe0\x34\xc7\x8e\x28\xc8\x51\x94\x63\x0e\xb6\x27\x52\x2a\xee\x55\x17\x33\xf6\x3e\x32\xbc\x02\xa9\x58\xca\x04\xe1\xed\xd1\x38\x7c\x15\xdb\xb1\xc7\x61\xd7\xcd\x4d\x8a\xe6\x6f\x52\x1b\xfb\x96\x98\x36\x4a\x66\xb7\xb7\xc3\xa0\x86\x3c\xac\x11\xd7\x28\xdf\x24\xcc\x8c\x35\xb9\x1d\xa9\xe1\x36\x30\x90\x34\xf7\x01\x63\xb3\xfb\xae\x40\x2a\x99\xc7\x80\xf0\x1a\x39\x1a\xbc\x77\x44\x8c\x22\x3a\x7b\xbc\x80\x7c\x28\x12\x62\x10\x28\xa1\x59\x5f\x03\x1b\x85\x42\xb9\x2c\x93\x20\x91\x57\xc2\x4e\x62\x0f\xc1\xd4\x53\xe9\x06\xb6\xf7\xfb\xc3\xde\xc7\xed\xf3\x04\xd6\xc1\x92\x89\x24\xf6\xaa\x8f\x16\xd9\x96\x58\xcf\xb1\x5b\xe1\x45\xf7\x65\x62\x57\x14\xc1\x6f\x0a\x0b\xa2\x10\xdc\x5b\x0c\x98\xd0\x86\x08\x8a\x2d\xc7\x9a\x28\x30\xf2\x12\x05\xc4\x70\xee\x9e\x60\x3a\x4c\xd1\x4c\x7d\xb7\xe9\xcf\x4e\x76\x70\x2b\xd4\x06\xe2\x4a\x57\x48\x15\x12\x83\xd3\xd9\x8b\xc9\xa4\x4b\x0f\x13\x5c\x91\x92\x1b\x1d\x1a\x96\xa3\x2c\xad\xc0\xe9\xf3\x27\x4f\x9e\xbc\x18\x60\xab\x1a\x9f\x0e\xa9\xcc\x73\x29\x3e\xf9\x2f\x4b\x93\x49\xc5\xfe\x20\x86\x49\xe1\x7f\x86\x18\xfc\x57\x48\x14\x2a\xf0\xe1\xfb\x0a\x6c\xc7\x64\x14\xc1\x3b\x4c\x99\x36\xa8\xe0\x63\x89\xd0\x3e\xf2\x5a\x8e\x8f\x25\x86\xed\xee\xd4\xdf\xc6\xcf\x3f\x71\xa3\xeb\xef\x9c\x54\x33\xe9\x74\x36\x7b\x31\x26\x55\xb7\xf9\xad\xd8\x45\xb5\xe1\xe4\x5a\x41\x4b\xfb\x58\xe2\xf4\x66\x27\x72\xc8\xe7\xe0\xff\x69\xfb\xd4\xf0\x77\x03\x9b\xb3\x0d\x13\x7a\x0e\x9f\xac\xf4\x2b\xa2\x71\x3a\xfb\xbc\xcb\x61\x5f\x08\x73\xb8\x39\xb8\x5d\xf6\xd2\x32\x91\xce\x61\x45\xb8\xc6\x93\x03\x7a\xdb\x26\xe7\xf0\x69\x4f\xe5\xed\x1e\x06\x34\x99\x4c\xf4\x90\x91\xd7\xc4\x90\xe9\xac\x87\x68\x17\x5b\xc1\xd4\x64\x4c\x87\x35\x9c\x19\x28\x34\xa5\xea\x1e\x54\x77\x45\x11\xfc\x84\x76\xc0\xb6\x5e\xf5\x72\x74\x95\x41\x0c\x46\x95\xf8\xa2\x97\xd1\xdd\x25\x77\x63\x23\x52\xb0\xb6\xa1\x6b\x7f\x36\x98\xc0\xa1\xc9\x50\x4c\xa7\x0a\x75\x21\x85\xc6\x19\xc4\x67\x03\x6e\x0d\xa0\x71\xa1\xee\x87\xb3\x23\xb1\x1d\xc9\x62\x68\xac\x85\xd6\xe5\x71\x59\x2a\x85\x96\x1c\x43\x7b\x25\xff\xfe\xfe\xed\xaf\xa1\x36\x8a\x89\x94\xad\xae\xa7\x3b\x5a\xba\xd7\x75\x7f\xdd\x8e\xb8\x4f\xed\xdb\x66\x3a\x45\xa5\xa4\x3a\xc2\x79\x5b\x22\x1c\xef\x2f\xda\x3a\x5f\xc9\x85\x0d\x12\xf8\x0b\xec\x6e\x38\x68\x30\xaf\x77\x73\xd4\x9a\xa4\x38\x0b\x8d\x62\xf9\x74\x04\x30\xdc\x3f\xcc\xf6\x55\xf9\xc6\x5a\xab\xd3\xb8\x01\x3b\x1a\x9e\x43\xda\xed\x61\xf2\xec\xbc\x57\x07\x2f\x7f\x0b\xa2\xb6\x3f\x1c\x4e\xd7\xae\xe6\xe0\xff\x6a\xb3\xbc\xbe\x1c\xfe\xa1\xd9\x66\xd5\xf3\xea\x1c\xfc\xf7\x64\x8d\x40\x04\xd8\x21\xce\xc8\x36\xa9\x47\x64\x57\x0c\xb9\x4d\xe6\x4f\xe3\x87\x6b\xe7\xa4\x39\xf8\xa5\xe2\x23\xba\xec\xe2\x64\xe9\x6a\x58\x66\x4c\x31\x8f\xa2\x30\x0c\x47\x04\x6e\x3f\x0f\xd3\x72\xc2\xc4\x05\x6e\xac\x57\x6f\xff\x31\xa2\x43\x23\x95\x22\xa9\x39\xcf\x6d\xd3\x1a\x83\x68\xb5\x9e\x73\x46\x2f\xe7\x30\x75\xb9\x71\x64\x52\xd7\xdf\x02\x1e\x53\x69\x9a\xe5\x2a\x4e\x21\xf5\x61\xc9\x39\xf9\x8a\xc5\x66\x95\x8a\xcf\x5d\xe9\xb3\xc3\xe9\x78\xd8\x61\x3c\x97\x9b\x75\xf7\x92\xd6\xac\xfe\x28\x1c\x91\x7a\x7d\x0a\xd6\x4c\xb3\x25\xc7\x7b\x28\x68\x83\x18\x96\x42\x67\x6c\x65\xf6\x4a\xdd\xd7\x55\x1d\x13\xa5\x3b\x56\xbe\x66\x7d\xbb\x0a\xb8\x13\x93\x7b\xd4\xb5\x6d\x30\x46\x6a\x5f\x2f\xe5\xc8\x8a\xd8\x7d\x5e\xd9\x97\xd5\x40\x04\x0b\xa2\x34\x2a\x88\x21\x91\xb4\xcc\x51\x98\x7a\x5a\x7c\xc3\xdd\xb7\x38\x53\x9f\xf8\x03\x08\x2b\xc9\xd0\xbe\x02\x21\xb6\x99\x32\xd4\xf6\xed\x78\xd1\x72\xd7\x90\x7a\x5c\x18\x9d\x78\x64\x29\x0c\xf6\x17\xf6\xb6\x17\x55\x73\xcf\xae\xe6\xad\xd6\x26\x6c\xdb\x5f\x05\x16\x51\xf5\x1d\xf3\x64\x11\xb9\x1f\xc5\xfe\x1f\x00\x00\xff\xff\xb1\xb6\x9a\xf5\x24\x1b\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5a\xef\x72\xdb\xb8\x11\xff\xee\xa7\xd8\xb0\x1f\x48\x4d\x44\xd2\xce\xe5\x32\x1d\x59\x74\xea\xd8\xb9\xf6\xda\xbb\xe4\x26\x71\x32\xcd\xb8\x6e\x07\x26\x57\x24\x62\x08\x60\x01\x50\x92\xcf\xe3\x57\xe9\xf4\xe9\xfa\x1c\x1d\x80\xa4\x24\x4a\x24\x2d\xff\xb9\x7c\x69\xf1\xc5\x16\xb0\xbb\xd8\xfd\x01\xbb\xf8\x01\xd2\xf8\xd9\xe9\xfb\x93\xb3\x2f\xbf\xbc\x85\x4c\x4f\xd9\xd1\xde\xd8\xfc\x01\x46\x78\x1a\x39\xc8\x9d\xa3\xbd\xbd\x71\x86\x24\x39\xda\x03\x00\x18\x4f\x51\x13\x88\x33\x22\x15\xea\xc8\xf9\x74\xf6\x83\xff\x7b\x67\x7d\x88\x93\x29\x46\xce\x8c\xe2\x3c\x17\x52\x3b\x10\x0b\xae\x91\xeb\xc8\x99\xd3\x44\x67\x51\x82\x33\x1a\xa3\x6f\x3f\x0c\x81\x72\xaa\x29\x61\xbe\x8a\x09\xc3\xe8\x20\xd8\x6f\x98\xca\xb4\xce\x7d\xfc\x67\x41\x67\x91\xf3\x57\xff\xd3\xb1\x7f\x22\xa6\x39\xd1\xf4\x92\xe1\x9a\x5d\x8a\x11\x26\x29\xd6\x9a\x8c\xf2\x2b\x90\xc8\x22\x47\xe9\x6b\x86\x2a\x43\xd4\x0e\x64\x12\x27\x91\x13\xc6\x4a\x85\x13\xc1\x35\x99\xa3\x12\x53\x0c\x62\xa5\x76\xd6\x53\xa2\x90\x31\xfa\x8a\x70\xe5\xe7\x52\xdc\x4b\xf7\x9a\x11\x3f\xa1\x84\x89\xf4\xde\x6a\x5a\x08\xa6\x69\x7e\x3f\x57\x97\xdd\xeb\x6a\x2a\x96\x34\xd7\xa0\x64\x1c\x39\xe1\x57\x15\xce\x0a\x0c\xbe\x2a\xe7\x68\x1c\x96\x23\x1d\x62\x64\x41\x85\xda\x45\xf0\xab\xf2\x63\x21\xae\xe8\x4e\x56\x63\x31\xcd\x05\x47\xae\x1b\x41\xde\x5b\xb1\x02\x75\x07\xbd\x9c\xa4\x18\x5e\x12\xd5\xea\xdd\x0a\x51\x92\xe7\x0c\x7d\x2d\x8a\x38\xf3\x69\x2c\xb8\x9f\x4b\xb4\x53\x2a\x4c\x1c\x50\xf4\x57\x54\x91\x73\xf0\xf2\xe5\xe2\xe0\xe5\xcb\x25\xe6\x12\x55\xb8\xa5\x58\x09\x05\x39\x4f\x1d\x08\x1f\x38\xd1\xf7\x2f\x16\x07\xdf\xbf\xb8\x63\xa2\x52\xa8\x6b\x22\x23\xe3\x80\xbe\xce\x31\x72\xe8\xd4\xa0\x60\x05\xd7\x2c\x4e\xc8\xcc\x1a\xfa\xee\xc5\xe2\xbb\xca\x4c\x35\xbf\xed\x79\x9c\xd1\x83\x57\x8b\x83\x57\x0d\xa3\xb6\x67\x65\x54\x53\xcd\xf0\xe8\x63\x46\x85\xa4\xe0\xc3\x1b\x21\xae\xa6\x44\x5e\x29\xf8\x99\x70\x92\xa2\x1c\x87\xa5\xc4\xde\x38\x2c\xcb\xd0\xde\xf8\x52\x24\xd7\x95\x76\x42\x67\x40\x93\xc8\xa1\x3c\xc1\x85\x6f\x16\xb9\xda\xee\x8d\x51\x45\x13\xbc\x24\x72\x6d\xc8\x0e\xe7\x76\x90\x89\x54\x38\x47\xff\xf9\xf7\xbf\xc6\x61\xbe\x21\xb0\xb6\x37\x21\x67\x24\xc6\xa9\x2d\x39\x92\xa6\xd9\x7a\x69\xfb\x80\x4c\x90\x04\x12\xa2\xc9\xc6\x14\xd6\x0a\xd9\xee\xb3\xfd\x14\x62\x46\x94\x8a\x9c\x09\x51\x30\x21\xbe\xba\xe6\xb1\x4f\x98\x36\xff\x4f\xe6\x66\x93\xd2\x16\x6b\xe1\x86\xb9\xf1\x7a\x06\x3d\xcc\xff\xe3\x24\x01\x8e\x73\xb8\xac\xb0\x6f\x0d\x02\xfe\x10\x33\x1a\x5f\x45\x8e\xca\xc4\xfc\xd4\xe6\xdd\x71\x92\xb4\x88\xb6\xc6\x96\xb3\x42\x7d\xf3\xb8\xde\x10\x1d\x67\x80\x09\xd5\x8f\x59\x96\x1c\x79\x4c\xd9\xd3\x2e\x8c\xd9\x98\xd5\x2c\x2a\x27\x31\x4a\x63\x34\xa1\xb3\x87\xc5\x79\x26\xd2\x94\x21\x70\xd3\x0d\x53\x91\xe0\x63\xc2\x9d\x0a\xc1\xbf\xf9\x4a\xfd\x24\x52\x10\xc5\xa3\x96\x49\xd1\x94\xfb\xa2\xd0\x4f\xb6\x50\x1b\x0b\xb2\x2c\x26\xa6\xfa\x6c\x56\x92\x7a\xcc\x54\x28\xdc\xac\x33\xa5\xbb\x3c\x2f\x74\x55\x31\x35\x2e\xb4\x53\xc2\x91\x09\x96\xa0\x8c\x9c\x8f\x48\x64\x9c\x2d\x33\x50\xc1\xe5\x35\x14\x92\x0d\x41\x93\x54\x0d\xc1\x96\x40\x10\xb2\x46\xec\x51\x40\x95\x53\xdd\x13\xa2\xed\xcd\x59\xc7\x9c\x4a\xda\x56\x06\xd6\xf7\xf8\xb2\xb0\xc0\xcc\x9f\x08\x19\x39\x9e\xe9\x19\x02\x4d\x16\x03\xa0\x7c\x15\x76\x57\x39\x21\x9b\x96\xfc\x1a\x08\x18\x95\x87\x8e\x19\x08\x32\xa2\x4e\xca\x7e\x78\x0d\x6e\x58\x0b\x87\xee\x73\x3b\x4c\x13\x18\x01\x2f\x18\x73\x40\x13\x99\x1a\x02\xfb\x8f\x4b\x46\x78\x5b\xc1\x5b\xc1\x37\x4d\x61\xe6\xd3\x7a\x0a\x7b\xda\x7d\xfa\xf0\x13\x3c\x8b\x22\x70\x5d\x07\x46\x96\x62\x34\xc6\xfa\xcc\xe5\x75\x24\x76\x49\x9d\xa3\x9b\x1b\xab\x6a\x3f\xdd\xde\x6e\x1d\x41\xed\xba\xb8\x88\x51\xe6\xda\x69\x75\x2c\x2a\x1d\xab\x2d\x57\xb2\x3d\xb6\xb7\x56\xbb\x6f\x09\xfd\x29\xf2\xa2\x2f\xc0\xe5\x52\x15\xd2\xe0\x6c\xe2\x8a\x9c\xcf\x14\xe7\x20\x24\x4d\x29\x27\xac\xb9\x66\xa5\xd8\xae\xcb\x61\xda\xcd\x4d\x8a\xfa\x4f\x42\x69\x73\xd7\xf0\x6a\x23\x83\xdb\xdb\x6e\xa7\xba\x22\xac\x3c\xae\xbc\x7c\x9b\x50\xdd\x77\x08\x36\xb4\xba\x8f\x89\x8e\xa4\x7a\x88\x33\x26\xfb\xef\xeb\x48\xa9\xf3\x14\x2e\x9c\x22\x43\x8d\x2b\x44\x5a\x28\x40\x29\xe2\x9d\xd3\x64\x71\x31\xb8\xb7\xa7\x92\xa8\xec\xe9\x10\xfb\x94\x27\x44\x23\xc4\x24\xce\xda\x4e\xc0\x5e\x57\x62\x26\x8a\xc4\x4f\xc4\x9c\x1b\x2a\xf7\x18\x9f\x5a\x4a\x65\x5f\xb7\xe9\x6d\xab\xae\x1b\x87\xcf\xc6\xc7\xd5\xdd\x07\x66\xfe\x25\xe5\x49\xe4\x94\x1f\x8d\xd7\xab\xc1\x8a\x24\xaf\x94\xc7\xeb\xd7\x1e\xd3\xc2\x10\x7e\x91\x98\x13\x89\x60\x2f\x7a\x40\xb9\xd2\x84\xc7\xb8\x94\x98\x11\x09\x5a\x5c\x21\x87\x08\x4e\xec\xfd\x4e\x05\x29\x6a\xcf\xb5\x9d\xee\x60\xd8\xf0\x5b\xa2\xd2\x10\x95\xb6\x82\x58\x22\xd1\xe8\x0d\x0e\xf7\xf6\xd6\xc7\x83\x04\x27\xa4\x60\x5a\x05\x9a\x4e\x51\x14\x46\xe1\xd5\xfe\xfe\xfe\xfe\x61\x87\x58\x79\xaa\xaa\x20\x16\xd3\xa9\xe0\xe7\xee\x71\xa1\x33\x21\xe9\xaf\x44\x53\xc1\xdd\x0b\x88\xc0\x7d\x83\x44\xa2\x04\x17\x9e\x97\xce\xae\x4d\x19\x86\xf0\x01\x53\xaa\x34\x4a\xf8\x5c\x20\x2c\x6f\x90\x4b\x89\xcf\x05\x06\xcb\x5e\xcf\x5d\xe1\xe7\x0e\x2d\x2f\xfe\xc2\x48\xb9\xdb\xbd\xc1\xe0\xb0\x4f\xab\xe2\x10\x2b\xb5\xb3\xb2\xc3\xea\x2d\x15\xcd\xd8\xe7\x02\xbd\x9b\x06\x72\xc8\x46\xe0\xfe\x6e\x75\x8f\x71\x9b\xc0\x4e\xe9\x82\x72\x35\x82\x73\xa3\xfd\x86\x28\xf4\x06\x17\x4d\x09\x73\xfd\x18\xc1\xcd\xd6\x16\x33\x1b\x9a\xf2\x74\x04\x13\xc2\x14\x0e\xb7\xc6\x97\x87\xef\x08\xce\x37\x4c\xde\x6e\xf8\x80\x3a\x13\x89\xea\x9a\xe4\x94\x68\xe2\x0d\x5a\x06\x4d\xa3\x13\xf0\x74\x46\x55\x50\xb9\x33\x00\x89\xba\x90\xeb\x0b\xb5\xde\xc2\x10\x7e\x40\xc3\xde\x4d\x54\xad\x12\xeb\xc6\x20\x02\x2d\x0b\x3c\x6c\x15\xb4\x7b\xc9\xee\xd8\x90\xe4\x74\x49\x0a\x94\x3b\xe8\x4c\xee\x40\x67\xc8\x3d\x4f\xa2\xca\x05\x57\x38\x80\xe8\xa8\x23\xac\x0e\x6f\x2c\xd4\xed\xee\x34\x34\x56\x7c\x2f\x82\x7a\xb6\xc0\x84\xdc\xaf\x1b\x0b\xae\x04\xc3\xc0\x6c\xc9\x3f\x7f\x7c\xff\x2e\x50\x5a\x52\x9e\xd2\xc9\xb5\xd7\xb0\x32\x04\xd7\x1d\x82\x0b\xe0\xae\x6f\xdc\xcd\x76\xdb\x03\x44\x6c\xae\x50\x9e\x87\x52\x0a\xb9\x03\x0c\xa6\x58\x58\xd9\x9f\x95\x81\xa1\xd4\x0b\x6a\x9f\xe0\x35\x34\x3b\xac\x93\x30\xaa\x7a\xa7\xa8\x14\x49\x71\x10\x68\x49\xa7\x5e\x8f\xc3\xf0\x70\xc0\xcd\xc9\xf5\xd6\xcc\x56\x25\x74\xed\x6c\x2f\x3c\xdb\x63\xb7\xdb\x69\xd4\xb8\x16\x77\xa6\xc1\xd2\x89\x6a\xfe\x6e\x38\xed\xa1\x36\x02\xf7\x9d\xc9\xf7\x6a\x9b\xb8\xdb\xd3\xd6\xad\xe2\xc3\x23\x70\x3f\x92\x19\x02\xe1\x60\xb8\xa0\x16\xcb\xf4\xee\xd1\x9d\x50\x64\x26\xad\xcf\xfb\x17\xd7\xd0\xad\x11\xb8\x85\x64\x3d\xb6\x4c\x63\xe4\xd2\x56\xb3\x4c\xeb\x7c\x14\x86\x41\x10\xf4\x28\xdc\x5e\x74\x8f\x4d\x09\xe5\x67\xb8\x30\x51\xbd\xff\x4b\x8f\x0d\x85\xb1\xe0\x49\x25\x79\x62\x8e\xaf\x3e\x17\x8d\xd5\x13\x43\x64\x46\xe0\x99\x0d\xb8\x6b\x7a\x57\x8f\x8d\xbb\xd4\x9c\xba\xd9\xda\x93\x0b\xb5\x5d\x7c\x86\x77\xcc\x58\xb7\x42\xb2\x91\x2d\x82\x86\xe3\xf6\xc3\x0e\xfd\xb9\x5c\xb7\xfb\x17\xb7\xba\xb5\xa3\xb0\x43\xea\xb5\x19\x98\x51\x45\x2f\x19\x3e\xc0\xc0\x12\xc4\x40\xe5\x8c\xc6\xe8\xed\x0f\x61\x7f\xd8\xac\x9f\x77\x54\x0f\xd8\x11\xaa\x7b\x96\xbf\xba\x7d\xbb\x32\xd8\x00\xe6\x01\xc5\x6d\x05\x46\x4f\x01\x6c\x1d\xb9\x77\x59\xac\xae\x0a\x94\x27\x34\x46\xd5\x55\x20\xc3\x10\x4e\x32\x8c\xaf\x80\xf0\x04\xf2\x8a\x9a\x56\x3a\x9d\xc4\xe2\x59\x6d\x75\x49\x5f\xc5\x04\x8e\xa5\x24\xd7\x83\x15\xcf\xe8\x52\xae\x54\x03\x86\x3c\xd5\x99\xbd\x3e\xef\xdf\xa1\x55\x69\x28\x21\x75\x83\xdd\x6e\x06\x62\xf9\x6f\xf5\x78\x43\x78\x92\xd4\x55\xba\x55\xc1\x12\x6d\x2b\x1a\x41\x7d\xf5\x5a\xbe\x86\x3b\x77\x56\xfe\x35\x2d\x9d\x21\x28\x64\x18\x6b\x4c\xd6\x9e\x94\x5e\xc3\x59\x46\x15\x90\xd8\xd0\x66\xa0\x0a\xa8\x94\x38\x43\x69\xf3\x30\x70\x3a\xe2\xe8\x80\xe8\xa0\x6b\x01\xeb\x50\xcc\xbc\xa6\x46\x36\x32\xf6\xbc\xb2\x74\xbe\x7f\x71\xd1\xbd\xe1\xba\x50\x70\xba\x55\xd6\x40\x38\x96\x08\xd7\xa2\x00\x55\x48\xbc\x3b\xe6\x36\x63\xb7\x9d\x2b\xfa\x47\xd4\xc0\xa8\xd2\x20\x26\x4b\x60\xe1\xc7\xd3\xce\xf5\x34\xb2\x3f\x9e\x42\x04\xe7\x1d\xe1\x4e\x84\x04\xcf\x48\x52\x88\x60\xff\x10\x28\x8c\xa1\x89\xf6\x21\xd0\xe7\xcf\xfb\xc0\x2e\xe7\x08\xf2\x42\x65\x9e\x6b\x2f\x40\xed\x90\xd3\x8b\x8b\x80\x26\x1d\x79\xde\x1d\xf2\xc7\x4c\xcc\xa1\xac\xd9\x4f\xc3\x68\xec\x9f\x1d\x88\x4c\xf5\xcf\x4e\xec\xe0\x0b\xaa\x5d\xe9\xc1\x3b\xb1\x23\x35\xf8\xad\x69\x41\x52\xd6\xc3\x0d\x62\x10\xee\xcc\x0c\xca\xfb\x5e\xb9\xfa\xff\xeb\xbc\xa0\x91\x46\x1b\xd5\xca\x87\x03\x93\x57\x47\x65\x7e\xf9\x7e\x5f\x2e\xb5\x3a\xb6\xc5\x37\x56\x19\x35\x84\x83\x1d\x0f\xe8\xee\xc7\xc9\xa5\xc4\xff\xf9\xc8\x3a\x18\xbf\x11\x1f\x59\x7f\x3a\x2e\x24\xeb\xda\x0c\x39\x91\x0a\x25\x44\x90\x88\xb8\x98\x22\xd7\xd5\x63\xd6\x5b\x66\xbf\xc1\xf2\x5c\xe2\x76\x78\x58\x6a\x06\x99\xc4\x09\x44\x86\xbe\x77\xbd\x4a\x18\x7e\xb1\x94\xae\x5c\x0a\x24\xda\xaf\x85\xbc\xf0\xef\xf3\xf9\xfc\x6f\x41\x98\x9a\x2b\x7c\x5b\x64\xbd\xef\x34\xa2\xe0\x1a\xdb\x2f\xa1\xcb\x7b\x73\xf9\x5a\xd3\xb4\xbc\xb2\x5a\xa3\xb9\xfa\xa1\xc4\x38\x2c\xbf\x76\xdf\x1b\x87\xf6\x77\x42\xff\x0d\x00\x00\xff\xff\x3e\x49\xc2\x24\x37\x24\x00\x00"), }, "/js": &vfsgen۰DirInfo{ name: "js", @@ -369,10 +369,10 @@ var assets = func() http.FileSystem { }, "/less/stylesheet.less": &vfsgen۰CompressedFileInfo{ name: "stylesheet.less", - modTime: time.Date(2018, 5, 18, 6, 59, 35, 609985527, time.UTC), - uncompressedSize: 10178, + modTime: time.Date(2018, 5, 18, 15, 9, 16, 929613845, time.UTC), + uncompressedSize: 10582, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x5a\x6d\x6f\xdb\x36\x10\xfe\x9e\x5f\x71\x48\xd0\xa4\x0d\x2c\xc3\x76\xd3\x22\x93\x81\xa0\xd8\xbe\x6e\xc3\x80\x62\x3f\x80\x92\x68\x9b\xb3\x44\x0a\x24\x15\xdb\x1d\xf2\xdf\x07\xbd\x53\xe2\x8b\xa8\x24\xc5\xf8\xa1\x68\x44\x8a\xe4\x1d\x1f\x3e\xf7\xdc\xc9\xdf\x48\x96\x33\x2e\xe1\xfa\x19\x71\x82\xa2\x14\x5f\x6f\xaf\xee\xe1\xdf\x2b\x00\x80\x88\xf1\x04\xf3\xe0\x44\x12\x79\x08\x61\xb5\x6d\x1e\x9e\x03\x41\x7e\x10\xba\x0f\xdb\x01\x11\x3b\xd7\x7d\x3b\x46\x65\xb0\x43\x19\x49\x2f\x21\x5c\x7f\x67\x05\x8f\x31\x7c\x47\x54\xc0\x5f\x9c\x5d\x2f\x40\x20\x2a\x02\x81\x39\xd9\xd5\xe3\x33\xc4\xf7\x84\x76\x53\xe7\x28\x49\xaa\x79\x9b\xbf\x25\x3e\xcb\x20\xc1\x31\xe3\x48\x12\x46\x43\xa0\x8c\xe2\xba\xeb\x70\xc9\x0f\x98\x8a\x10\x50\x21\xd9\xf6\xea\xe5\xea\x0a\x35\x9b\x8e\x0b\x2e\x18\x0f\x21\x67\x84\x4a\xcc\xab\xbe\xa5\xc8\x51\x8c\x79\x33\x62\x97\xe2\x73\x08\xeb\x72\x95\xb2\x8f\x32\x11\x73\x96\xa6\x4d\x2f\x7b\xc6\x7c\x97\xb2\x53\x08\x07\x92\x24\x98\x56\x83\x6e\x52\xb6\x27\x34\xc8\xd1\x1e\x37\xc3\x12\x22\xf2\x14\x5d\xc2\x6a\xb6\x6d\x37\x6f\x50\xbf\x1a\xb3\xb4\xc8\x28\x50\x76\xe2\x28\xaf\x7b\x51\x4a\xf6\x34\x20\x12\x67\x22\x84\x18\xd7\x7b\xab\x4c\xc1\x64\x7f\x90\x21\xac\x57\xab\xe7\x43\xe3\x63\x14\x1f\xf7\x9c\x15\x34\x09\x62\x96\x96\xd6\x7c\x8b\xf6\x75\xd7\x3f\x85\x90\x64\x77\x09\x62\x46\x25\xa6\x72\x38\xd5\xd3\x12\x73\xce\x78\x90\x61\x21\xfa\xad\x96\xad\x39\xc3\xf5\x6a\xf5\x61\xdb\x3d\x6c\xdd\xbf\xfe\x9a\x9f\xeb\x7f\x56\x6a\xe7\xb9\x3d\xf9\x87\xd5\x2a\x3f\xf7\x3d\x86\xdd\x35\xbb\xf9\x75\xaf\x8c\xaa\xb0\x11\xc2\x3a\x3f\x83\x60\x29\x49\xe0\x5b\xfd\xa8\x1f\xd2\x9d\x77\xb9\x76\xff\xb8\x3a\xf6\xca\x5d\x43\xeb\x5e\xaa\x7f\x9b\xa3\x88\xd8\x79\x8e\x79\xef\x67\x97\xe1\xe0\xa7\x0f\xdf\xd3\x21\xa5\x6d\x2c\x40\x1c\x23\xc5\x36\xc7\xa2\x4e\x5c\xf9\xef\xcc\x71\x16\xfd\xc6\x83\x88\x49\xc9\x32\xe7\xfe\x3b\x1b\x46\xdb\x87\x96\x1b\x04\xf9\x81\x43\xf8\x8c\xb3\xad\xb9\xff\xd4\xdf\x05\x7d\x44\x7b\x28\x19\x22\x54\xef\x15\x39\xa2\x86\x65\xa1\x03\x42\xc0\xeb\xb9\x1f\xc7\xf6\x41\x87\x2d\xf3\x5f\x37\x12\xed\x53\x42\xb1\xcd\xa8\x57\x6e\xba\x5f\xa4\xff\xdf\x0d\xa1\x79\x21\x4d\x08\xe8\xce\x47\xdb\xfe\xbc\xe3\x59\xd6\x2b\xec\x08\x4e\x13\x83\x41\x0e\xa0\xc1\x18\x6c\x11\x12\xb8\xf4\x8b\x3e\xcc\xbe\xd9\xaa\xd7\x72\x4c\xfd\xa5\x4b\x19\xff\xbd\xf4\xa9\xfe\x2e\x0c\x91\xb4\x5a\xfe\x62\xc2\x12\x68\x87\xae\xa3\xba\x1b\x47\x68\xcb\x07\x5f\xbf\x4c\x43\xa3\x6c\x95\x0b\x7d\x8c\x30\xaf\xe8\xf6\x0e\xf8\x51\xc5\xc0\x21\x7d\x40\x33\x76\x4f\xfa\x4b\x37\x71\x0c\xbf\xb6\x75\xf8\x88\x52\x16\x1f\xcd\xeb\x69\x11\xd8\x38\xc8\xf3\xb0\x6d\xc1\x60\xbe\x91\x30\xed\x29\x62\xb1\x1a\xfc\x48\x64\xae\x6d\xba\xdb\xcb\x76\x1b\x1e\x4a\x0d\xe2\xd8\x8a\x9b\x08\xcd\x33\xdb\x08\x4e\xe1\x9e\xa8\x90\x92\xd1\x99\xe1\x47\x89\x2e\x9c\x9d\xe6\x86\x16\x13\xcc\x46\xde\xa3\x06\x94\x55\xa0\x90\x1c\x51\xb1\x63\x3c\x0b\xa1\xc8\x73\xcc\x63\x24\x0c\x54\xe4\x17\xd4\x55\x6b\x2c\xf8\xf0\x01\xe2\xed\xb2\xf6\xa1\x8d\x1b\x7c\x2e\x86\xff\xf1\xa3\xb8\xdc\xc7\xfb\x00\xe0\xa5\x52\xb9\x84\x26\xf8\xec\xaf\x72\xc7\x07\xde\xab\xb0\xe7\xd3\x6b\xb4\xad\x42\xc5\xab\xfe\x49\x3b\x47\xf3\x48\xd7\xe7\xe5\xd3\x1b\x41\x12\x1c\x21\xd5\x6d\xaf\x16\x6a\xd5\x08\x71\xe0\x84\x1e\x43\x15\x09\x86\x9d\x27\x88\x1f\x55\x1c\xe9\x16\x58\xac\xb0\x5b\x02\x16\x0d\xd5\xc6\xa8\xd5\xf8\x0e\x95\x21\xb8\x9b\x5e\xef\x9e\xc2\xad\x42\x9c\x9b\x31\x6d\x4e\xdc\x18\x83\x43\x86\x94\xd4\xa3\xec\x69\x7c\xd3\x7f\x96\x39\xae\x00\x35\xc5\xcb\xf6\xab\x67\x64\x11\x2d\xc0\x0f\xaf\xd8\xed\x12\xc5\x92\x3c\x9b\x64\xa3\xdf\x74\x30\x4b\x3e\x36\xd9\x51\xc4\x92\x8b\xb2\xa2\x81\xd0\x5e\x7d\x2f\xde\x0b\xdc\x07\x8c\x12\xcd\xcb\xfe\x3c\x3d\x4f\xef\xbe\x2d\x74\x39\x4e\x67\x32\xef\x32\xbb\xcb\xe1\x32\xb7\xdb\xc0\xc1\x4c\xe0\x10\xa5\x8e\x90\x36\x71\xd5\x60\x50\x92\xb1\x48\x68\x85\x3e\xd6\x26\xd5\xd5\x9c\x56\x2b\xc3\xdd\x87\xf5\x32\x29\x0e\xac\xb4\xe1\x69\x8f\x4f\x14\xf7\x10\x20\x0d\x53\x2c\x0c\x1d\x3b\x16\x17\x62\x22\x39\x30\x0b\x37\x0f\x89\xb6\xe7\x64\x9c\xb5\xb5\x88\x09\x2e\x6d\x31\x4c\xed\xed\xe0\x5f\xbe\x39\xec\x2a\x9f\x04\x12\x67\x79\x8a\x24\x0e\x38\x3b\x09\xd3\x04\xc3\x51\x35\x33\x88\x10\x38\xce\x31\x92\x1f\x1f\x16\xb0\xde\xf1\x4f\x86\x57\xf6\x28\x37\x09\x3e\x87\x16\x5c\x46\x8c\x1d\x33\xc4\x8f\xf3\xd3\x52\xbf\x12\x07\x38\x2f\x25\xcc\xcb\xbb\xe6\xe9\x4a\x45\x07\x7d\x30\xa1\x29\x45\x42\x06\xf1\x81\x18\x73\x72\xe8\xb3\x8f\x8e\xf4\x8c\x77\x51\x17\x7d\x6e\x31\xd9\x79\x3c\xc8\x30\x2d\xb4\x10\xad\x36\x9f\xbc\x6f\x4a\x73\x0e\x97\x6c\xbc\xf5\x86\x3c\x33\x67\x82\xd4\x75\x61\x8e\x53\x54\x86\x5a\x67\xd2\xe7\x94\xdb\xfa\x4d\x86\xc9\xdb\x5c\xd9\x23\x89\x4c\x4d\x21\x5e\x6d\xd3\xf9\x1a\x58\xb3\x41\xf3\xd3\xa7\xfb\x90\x32\xf9\x51\xc1\xcd\xa7\xe9\xd4\xb5\x05\x8f\x35\x77\x35\xaf\x45\xb2\xbd\x73\xee\xae\x9c\x6a\x06\xb7\x7d\xe2\x49\xdf\xa9\xb1\x65\xa9\x89\x53\x6d\xe4\xa9\x63\x7e\x4b\x7a\x0f\x3e\x01\xad\x6d\x1e\x85\x1c\xa8\x21\x42\xf8\xc4\xe5\x1d\xad\x1d\x48\x66\xe4\x46\xb5\xcd\x01\xc3\x12\x9f\x63\xcc\x73\xdb\x55\x9a\x61\x8c\xb7\x73\xaa\x30\xda\x6b\x15\x9c\xa6\x24\x17\x44\xd8\x5f\x38\x31\x9e\x04\x25\x25\x87\x10\x71\x8c\x8e\x41\xf9\xc0\x3e\xdc\x2d\x83\xd4\xe6\x57\xf7\x81\xb1\x3a\x58\x2f\xbf\xb8\xc6\x96\xa8\xee\x86\x5a\x91\x37\x8f\xf0\x4a\x8e\xb5\x1c\x91\x5a\x11\xec\xbf\xc6\x98\x17\x9d\x08\x85\xe0\x27\x6c\x3b\x43\x9d\xf1\x10\xdc\x62\xb5\x6d\x93\x52\xb8\x1b\xe8\x0b\x51\xb3\xea\x1a\xd8\x67\x91\xc1\x6a\x63\x39\x8a\x89\xbc\x94\xc8\x78\xb4\x8f\xea\x1c\xda\x7f\x5d\x34\x2e\xea\x0d\xb4\xdb\x39\xdc\x0c\x7a\xa9\x7a\x33\x9f\x18\x60\x2a\x92\x81\x57\x34\x03\xef\x60\x05\xaa\x7b\x2d\xa1\xd5\xbe\x5d\x0b\x8f\x15\x3c\x75\x45\x03\x77\xed\xd6\x77\x47\x3e\xca\xa2\x6c\xa7\x03\x91\x38\xa8\x3e\x1c\x87\xce\x2b\x04\xb3\xf8\x6a\x36\x73\x0e\x68\x6b\xb3\xf6\x8f\xdd\x3e\x05\xbf\x18\xc5\x07\xfc\x73\x3f\x6b\xf7\x29\x85\xca\x24\x4a\x41\x50\x25\x05\x33\xf8\x6e\xc3\x67\x22\x88\xc4\xe3\xf8\x3a\x55\x74\x32\xab\x5f\xed\x57\x05\x05\x4d\x30\x1f\x7e\xc8\x52\x4b\x2a\x4f\xf7\xd3\x1f\x9a\x3b\x0d\xf4\xf8\xf5\xa1\x3d\xa1\xa6\x20\x33\xa2\xfd\xe9\xea\x8b\x89\xb2\xcd\x2b\xc0\xac\x6a\xc8\x98\x7c\x2d\xf7\xc9\xcd\x73\x53\xf9\xf3\x04\x8b\x3b\xd2\x3f\xd3\xb7\x97\x21\x31\x3e\x8c\x5f\x19\x22\xdc\x59\x5d\xf7\xe2\xe4\x37\xd4\x2a\x6c\x10\x35\xfa\xc4\x39\x8f\x2d\x61\x73\xf3\xb2\xe3\xa7\x32\xfa\x42\x2f\x43\x7c\x4a\x94\x20\xa9\xa2\xa3\x3b\xa5\xcf\x9b\x77\x82\x9a\x13\x53\x36\x46\xee\x37\x7c\xf8\x6c\x9f\x50\x53\x67\xed\xcf\x3e\x1e\x87\xbf\x67\xe9\x67\x1b\x7f\x7f\x76\xef\xce\x22\x9d\x07\x3e\xd4\x73\xd9\x01\xd0\x2b\x3f\x8e\x9c\x79\x3f\xda\x44\x03\x75\x4b\x6a\x30\xd4\xae\x8f\xe3\x3c\xab\x8f\x27\xc3\x02\x8e\x62\x33\xc7\x0b\x85\x65\x93\x71\xda\x35\xf8\xe5\xd6\xdd\xdf\x51\x41\x65\x01\x7f\x30\xca\xee\x16\x70\xf7\x1b\x2b\x38\xc1\x1c\xfe\xc4\xa7\xbb\x05\x34\x7f\x2d\x20\x63\x94\x55\xf1\xd1\xec\x95\xdb\x65\x52\xc9\xde\xe1\x62\x7a\xdd\xe4\x66\xb3\xd9\x6c\xc7\x11\xa0\x8a\xbe\x4a\xcd\xb8\x62\xd1\x31\xac\xcc\x63\xc1\xef\x3a\x1a\xde\xfa\xdf\xae\x22\x0c\x2e\xe2\x18\x9f\xe6\x0d\x77\x61\xfc\xbf\x00\x00\x00\xff\xff\xca\x23\x7e\x16\xc2\x27\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x5a\x4d\x6f\xdc\x36\x13\xbe\xfb\x57\x0c\x6c\xc4\x4e\x02\x6b\xb1\xeb\x38\x86\x5f\x19\x30\x82\xb7\xd7\xb6\x28\x10\xf4\x54\xf4\x40\x49\xdc\x15\xbb\x12\x29\x90\xd4\x7e\xa4\xf0\x7f\x2f\xf4\x4d\x4a\x24\x45\x39\x0e\x5a\x1e\x82\x58\xe4\x92\xf3\xf1\x70\xe6\x99\x91\xbe\x90\xbc\x60\x5c\xc2\xe5\x01\x71\x82\xa2\x0c\x5f\x3e\x5d\x7c\x84\xbf\x2f\x00\x00\x22\xc6\x13\xcc\x83\x23\x49\x64\x1a\xc2\xfa\xa9\x7d\x78\x0a\x04\xf9\x46\xe8\x2e\xec\x16\x44\xec\xd4\xcc\x6d\x19\x95\xc1\x16\xe5\x24\x3b\x87\x70\xf9\x95\x95\x3c\xc6\xf0\x15\x51\x01\xbf\x71\x76\x79\x0b\x02\x51\x11\x08\xcc\xc9\xb6\x59\x9f\x23\xbe\x23\xb4\xdf\xba\x40\x49\x52\xef\xdb\xfe\x2d\xf1\x49\x06\x09\x8e\x19\x47\x92\x30\x1a\x02\x65\x14\x37\x53\xe9\xb9\x48\x31\x15\x21\xa0\x52\xb2\xa7\x8b\x97\x8b\x0b\xd4\x0a\x1d\x97\x5c\x30\x1e\x42\xc1\x08\x95\x98\xd7\x73\x2b\x51\xa0\x18\xf3\x76\xc5\x36\xc3\xa7\x10\x36\xd5\x29\xd5\x1c\x65\x22\xe6\x2c\xcb\xda\x59\x76\xc0\x7c\x9b\xb1\x63\x08\x29\x49\x12\x4c\xeb\x45\x57\x19\xdb\x11\x1a\x14\x68\x87\xdb\x65\x09\x11\x45\x86\xce\x61\xbd\xdb\x53\xbf\x6f\xd0\xfc\x34\x66\x59\x99\x53\xa0\xec\xc8\x51\xd1\xcc\xa2\x8c\xec\x68\x40\x24\xce\x45\x08\x31\x6e\x64\xab\x55\xc1\x64\x97\xca\x10\x36\xeb\xf5\x21\x6d\x6d\x8c\xe2\xfd\x8e\xb3\x92\x26\x41\xcc\xb2\x4a\x9b\x2f\xd1\xae\x99\xfa\xab\x14\x92\x6c\xcf\x41\xcc\xa8\xc4\x54\xea\x5b\x3d\xaf\x30\xe7\x8c\x07\x39\x16\x62\x10\xb5\x1a\xad\x0f\x37\xeb\xf5\xbb\xa7\xfe\x61\x67\xfe\xcd\x43\x71\x6a\xfe\x59\xab\x93\xa7\xce\xf3\xf7\xeb\x75\x71\x1a\x66\x0c\xd2\xb5\xd2\xfc\x7f\xa7\xac\xaa\xb1\x11\xc2\xa6\x38\x81\x60\x19\x49\xe0\x4b\xf3\x68\x58\xd2\xfb\xbb\x3a\x7b\x78\x5c\xbb\xbd\x36\x97\xae\xdd\x4b\xfd\x6f\xeb\x8a\x88\x9d\x96\xa8\xf7\x76\x7a\x19\x1c\x3f\xef\x7c\x4f\x83\x54\xba\xb1\x00\x71\x8c\x14\xdd\x1c\x87\x3a\x71\xe5\x2f\x99\xc3\x17\x83\xe0\x41\xc4\xa4\x64\xb9\x53\xfe\x5e\x87\x91\xf8\xd0\xc5\x06\x41\xbe\xe1\x10\x3e\xe1\xfc\xc9\x3c\x7f\x1c\xee\xc2\x74\x45\xe7\x94\x1c\x11\x3a\x9d\x15\x05\xa2\x86\x63\xa1\x07\x42\xc0\x9b\xbd\x1f\xc7\xfa\x41\x8f\x2d\xf3\x5f\x57\x12\xed\x32\x42\xb1\x4d\xa9\x57\x0a\x3d\x1c\x32\xfc\xef\x8a\xd0\xa2\x94\x26\x04\xf4\xfe\x99\x88\xbf\xcc\x3d\xab\xe6\x84\x2d\xc1\x59\x62\x50\xc8\x01\x34\x18\x83\x2d\x42\x02\x57\x76\x99\x2e\xb3\x0b\x5b\xcf\x5a\xdc\x34\x5c\xba\x8c\xf1\x9f\x2b\x9b\x4e\x7f\x0b\x3a\x92\xd6\xab\xff\x99\xb0\x04\x13\xa7\x4f\x51\xdd\xaf\x23\xb4\x8b\x07\x0f\x9f\xe7\xa1\x51\x8d\xda\x84\x3e\x4a\x98\x4f\x74\x5b\x07\xfc\x42\x85\x66\x90\x21\xa1\x19\xa7\x67\xed\x35\x55\x71\x0c\xbf\x6e\xf4\xf8\x88\x32\x16\xef\xcd\xe7\x4d\x32\xb0\x71\x91\xa7\xb3\x6d\xc9\x60\xb9\x92\x30\x6f\x29\x62\xd1\x1a\xfc\x82\xc8\x52\xdd\xa6\x66\xaf\xc6\x75\x98\x56\x1c\xc4\x21\x8a\x3b\x10\x9a\x77\xb6\x05\x38\x25\xf6\x44\xa5\x94\x8c\x2e\x4c\x3f\x4a\x76\xe1\xec\xb8\x34\xb5\x98\x60\x36\xb2\x1e\x35\xa0\xac\x06\x85\xe4\x88\x8a\x2d\xe3\x79\x08\x65\x51\x60\x1e\x23\x61\x08\x45\x7e\x49\x5d\xd5\xc6\x82\x0f\x1f\x20\x5e\xaf\x1a\x1b\xda\x62\x83\xcf\xc5\xf0\x77\x3f\x8a\x2b\x39\xde\x06\x00\x2f\x35\xcb\x25\x34\xc1\x27\x7f\x96\x3b\x76\xf8\xc0\xc2\x0e\xc7\xd7\x70\x5b\x25\x14\xaf\x87\x27\xdd\x1e\xed\xa3\x29\x3f\xaf\x9e\x5e\x09\x92\xe0\x08\xa9\x66\x7b\x35\x51\xab\x57\x88\x94\x13\xba\x0f\x55\x24\x18\x24\x4f\x10\xdf\xab\x38\x9a\x6a\x60\xd1\xc2\xae\x09\x58\x38\x54\x97\xa3\xd6\xe3\x3b\x54\xa5\xe0\x7e\xfb\xe9\xf4\x1c\x6e\x95\xc0\x79\x37\x0e\x9b\x33\x37\xc6\x60\x10\x3d\x24\x0d\x28\x7b\x1e\xdf\xf4\x1f\xa5\x8e\x2b\x41\xcd\xc5\x65\xfb\xd5\x33\x46\x91\x49\x82\xd7\xaf\xd8\xf5\x0a\xc5\x92\x1c\x4c\xb4\xd1\x6f\x3b\x58\x44\x1f\xdb\xea\x28\x62\xc9\x59\x39\xd1\x10\xd0\x5e\x7d\x2f\xde\x0a\xdc\x29\x46\xc9\xc4\xca\xfe\x71\x7a\x19\xdf\xfd\xbe\xd4\xe5\xf0\xce\x6c\xdd\x65\x36\x97\xc3\x64\x6e\xb3\x81\x23\x32\x81\x83\x94\x3a\x52\xda\xcc\x55\x03\xad\x25\x63\xa1\xd0\x4a\xf8\xd8\x98\x58\x57\xeb\xad\x8e\x86\xbb\x9d\xf5\x32\x4b\x0e\xac\x61\xc3\x53\x1f\x9f\x2c\xee\x41\x40\xda\x48\x71\x6b\x98\xd8\xb2\xb8\x14\x33\xc5\x81\x99\xb8\x79\x50\xb4\x1d\x27\xe3\xaa\xad\x43\x4c\x70\xee\x9a\x61\xea\x6c\x0f\xff\xea\x97\xfa\x54\xf5\x24\x90\x38\x2f\x32\x24\x71\xc0\xd9\x51\x98\x36\xd0\x57\x35\x91\x41\x84\xc0\x71\x81\x91\x7c\x7f\x7f\x0b\x9b\x2d\xff\x60\xf8\xc9\x0e\x15\x26\xc2\xa7\x71\xc1\x49\xcf\xa9\x1a\xcf\x09\x39\x84\x19\x12\x32\x88\x53\x62\xac\x51\xeb\xfd\x1b\x49\x02\x21\x11\xaf\x70\x35\xb5\xa6\xba\x0a\xd3\x24\x84\xc0\xb0\xa8\xe7\x27\x63\x39\x75\x5f\xac\x22\xc6\xf6\x39\xe2\xfb\xe5\x15\xb3\x5f\xf7\x05\x9c\xf1\x02\x96\x95\x84\xcb\x28\xaf\x42\xd1\xde\xbd\x19\xd0\x7b\x83\x05\x39\xa6\xe5\x24\xf9\xab\xc3\xa7\xa2\x9c\x63\xb3\xfa\x91\xad\xb2\xdf\x51\xc1\x16\x4c\x90\xa6\xe3\xcc\x71\x86\xaa\x24\xee\x2c\x27\xdd\x65\x70\x82\xb7\xa8\xcc\x2c\x3c\xfd\xfa\x8f\x94\xe3\xed\x9f\x2e\xb6\xef\x53\x34\x80\xcb\x55\xc3\x02\x97\xcb\xba\xb1\x92\x44\x66\x26\xd2\x32\x11\x6c\xb6\x0a\xed\x86\xb9\xce\xb5\xcf\x98\x9f\x92\x7c\xe7\x2c\xcf\xfb\xb6\xae\x19\xc9\xc3\x42\xde\xf4\x8f\x1b\xfa\x60\x2d\xe4\xcd\x42\xcc\x5a\xa7\x4e\x30\x43\x16\xc7\x59\x46\x0a\x41\x84\x5d\x9e\x23\xe3\x49\x50\x45\x84\x10\x22\x8e\xd1\x3e\xa8\x1e\xd8\x97\xbb\x09\x82\x3a\xd4\xcc\xbc\x9a\x50\x7b\x75\x68\x79\x73\xb3\x32\xb6\x67\xbb\x51\xd9\xb9\x5b\xfa\xd9\xbd\xad\xd6\x1c\x7d\x30\x35\x47\xbb\x31\xcb\x32\xba\xe1\xd1\x5d\x83\x06\xe9\x84\x3b\x32\x88\xae\x50\x8d\x07\xc9\x8c\xf9\x4a\x1d\x4b\xc0\xba\xc2\xa7\x18\xf3\xc2\x16\x84\x16\xe8\xe2\x6d\x9b\xff\x24\xf2\x1c\xbd\x38\x98\x22\xef\xb3\x2f\xf2\x36\x56\xe0\x2d\x4b\x15\x55\x76\xb2\xb8\x48\xed\xd2\x0e\x6c\xc5\x7c\xe8\x0c\x07\x00\xbf\x62\xa3\x57\xd4\x49\x04\xc0\x5d\x40\x74\x63\xb6\x3c\xe9\x17\xfa\x42\xd4\xcc\x84\x35\xfd\x2c\xa5\x89\x3a\x58\x81\x62\x22\xcf\x15\x32\x1e\xed\xab\x7a\x83\x0e\x6f\x7c\x8d\x87\x7a\x03\xed\x3a\xa4\x4c\xbe\x57\x78\xe5\x07\xbf\xb0\xd0\xd5\x2d\x77\xcb\x03\x03\xbc\x5d\x4e\xf6\x4f\xb5\xbd\x79\x2d\xa4\xc4\x2e\xae\x25\x8e\x95\x3c\x73\x08\x37\xd3\x4f\xf7\x95\xc8\x87\x93\x55\xe3\x98\x12\x89\x83\xfa\x65\x7e\xe8\xbc\x42\xb0\x28\x5e\x2d\x8e\x9c\x5a\xd8\xba\x9b\x14\x0f\xdd\x78\x5d\x13\x36\x46\x71\x8a\x7f\xec\xa7\x06\x43\x99\xa7\x46\x12\xa5\x49\xab\x06\x05\x33\xf8\xae\xc3\x03\x11\x44\xe2\x71\x7a\x9d\x6b\x04\x9a\x7b\x6c\x93\x2f\x3d\x4a\x9a\x60\xae\xbf\x5c\x54\xdb\x5c\xcf\x1f\xe7\x5f\xfe\xf7\x7c\xf0\xf1\xe1\xbe\xf3\x50\xdb\x24\x1b\x85\xfd\xf9\x8e\x98\x29\x64\x9b\x4f\x80\x45\x1d\xaa\x71\xf0\xb5\xdc\x27\x77\x9c\x9b\xeb\x69\xcc\x44\x71\xc7\xeb\x19\xd3\xfb\x30\x3d\x30\xde\xbb\x0b\x67\x67\xf1\xe2\x15\x93\xbf\xa3\x7f\x64\x83\xa8\xd1\x26\xce\x7d\x6c\x6d\x61\x77\x5c\x76\x7c\xbe\x34\x3d\xe8\x45\xc7\xa7\x44\x09\x92\x2a\x3a\x7a\x2f\x7d\xba\x7b\x23\xa8\x39\x31\x65\x8b\xc8\x83\xc0\xe9\x27\xfb\x86\x13\x76\xd6\x7d\x8a\xf3\xa8\xf7\x7b\x86\xdd\xc6\xdf\x04\xb8\xa5\xb3\x50\x67\xcd\x86\xd3\x2e\x80\xde\x7b\xaa\xec\x38\x32\xe6\xc7\x91\x10\xee\xd2\x40\xe7\xae\x8f\xe3\x9a\x73\xc8\x27\x7a\x53\x4d\xd1\x99\xe3\x5b\x25\xca\x26\xe3\xb2\x52\xfb\x9a\xee\xe6\xf7\xa8\xa4\xb2\x84\x5f\x18\x65\x37\xb7\x70\xf3\x13\x2b\x39\xc1\x1c\x7e\xc5\xc7\x9b\x5b\x68\xff\xba\x85\x9c\x51\x56\xe7\x47\xb3\x55\xae\x57\x49\x4d\x7b\xf5\xc3\xa6\x0d\xa3\xab\xbb\xbb\xbb\xa7\x71\x06\xa8\xb3\xaf\xd2\xc7\xaf\xa3\xe8\x18\x56\xe6\xb5\xe0\x77\x1d\x0d\xbf\xfa\xd7\xae\x22\x68\x17\x71\x8c\x4f\xb3\xc0\x7d\x1a\xff\x27\x00\x00\xff\xff\xc0\x1d\xd5\xe6\x56\x29\x00\x00"), }, "/less/variable.less": &vfsgen۰CompressedFileInfo{ name: "variable.less", diff --git a/cmd/serve/web-handler-api.go b/cmd/serve/web-handler-api.go index dc57852..02d5e1e 100644 --- a/cmd/serve/web-handler-api.go +++ b/cmd/serve/web-handler-api.go @@ -100,28 +100,48 @@ func (h *webHandler) apiInsertBookmark(w http.ResponseWriter, r *http.Request, p err = json.NewDecoder(r.Body).Decode(&book) checkError(err) + // Make sure URL valid + parsedURL, err := nurl.ParseRequestURI(book.URL) + if err != nil || parsedURL.Host == "" { + panic(fmt.Errorf("URL is not valid")) + } + + // Clear UTM parameter from URL + clearUTMParams(parsedURL) + book.URL = parsedURL.String() + // Get new bookmark id book.ID, err = h.db.GetNewID("bookmark") checkError(err) // Fetch data from internet - article, err := readability.Parse(book.URL, 20*time.Second) - checkError(err) + article, _ := readability.Parse(parsedURL, 20*time.Second) - book.URL = article.URL - book.Title = article.Meta.Title - book.Excerpt = article.Meta.Excerpt book.Author = article.Meta.Author book.MinReadTime = article.Meta.MinReadTime book.MaxReadTime = article.Meta.MaxReadTime book.Content = article.Content book.HTML = article.RawContent + // If title and excerpt doesnt have submitted value, use from article + if book.Title == "" { + book.Title = article.Meta.Title + } + + if book.Excerpt == "" { + book.Excerpt = article.Meta.Excerpt + } + // Make sure title is not empty if book.Title == "" { book.Title = book.URL } + // Check if book has content + if book.Content != "" { + book.HasContent = true + } + // Save bookmark image to local disk imgPath := fp.Join(h.dataDir, "thumb", fmt.Sprintf("%d", book.ID)) err = downloadFile(article.Meta.Image, imgPath, 20*time.Second) @@ -138,6 +158,24 @@ func (h *webHandler) apiInsertBookmark(w http.ResponseWriter, r *http.Request, p checkError(err) } +// apiDeleteBookmarks is handler for DELETE /api/bookmark +func (h *webHandler) apiDeleteBookmark(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { + // Check token + err := h.checkAPIToken(r) + checkError(err) + + // Decode request + indices := []string{} + err = json.NewDecoder(r.Body).Decode(&indices) + checkError(err) + + // Delete bookmarks + err = h.db.DeleteBookmarks(indices...) + checkError(err) + + fmt.Fprint(w, 1) +} + // apiUpdateBookmark is handler for PUT /api/bookmark func (h *webHandler) apiUpdateBookmark(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { // Check token @@ -157,6 +195,7 @@ func (h *webHandler) apiUpdateBookmark(w http.ResponseWriter, r *http.Request, p if err != nil || parsedURL.Host == "" { panic(fmt.Errorf("URL is not valid")) } + clearUTMParams(parsedURL) // Get existing bookmark from database bookmarks, err := h.db.GetBookmarks(true, fmt.Sprintf("%d", request.ID)) @@ -167,10 +206,10 @@ func (h *webHandler) apiUpdateBookmark(w http.ResponseWriter, r *http.Request, p } book := bookmarks[0] - book.URL = request.URL + book.URL = parsedURL.String() // Fetch data from internet - article, err := readability.Parse(book.URL, 10*time.Second) + article, err := readability.Parse(parsedURL, 10*time.Second) checkError(err) book.ImageURL = article.Meta.Image @@ -243,24 +282,6 @@ func (h *webHandler) apiUpdateBookmark(w http.ResponseWriter, r *http.Request, p checkError(err) } -// apiDeleteBookmarks is handler for DELETE /api/bookmark -func (h *webHandler) apiDeleteBookmark(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { - // Check token - err := h.checkAPIToken(r) - checkError(err) - - // Decode request - indices := []string{} - err = json.NewDecoder(r.Body).Decode(&indices) - checkError(err) - - // Delete bookmarks - err = h.db.DeleteBookmarks(indices...) - checkError(err) - - fmt.Fprint(w, 1) -} - func downloadFile(url, dstPath string, timeout time.Duration) error { // Fetch data from URL client := &http.Client{Timeout: timeout} @@ -291,3 +312,14 @@ func downloadFile(url, dstPath string, timeout time.Duration) error { return nil } + +func clearUTMParams(url *nurl.URL) { + newQuery := nurl.Values{} + for key, value := range url.Query() { + if !strings.HasPrefix(key, "utm_") { + newQuery[key] = value + } + } + + url.RawQuery = newQuery.Encode() +} diff --git a/database/sqlite.go b/database/sqlite.go index 4eb4b99..833a7af 100644 --- a/database/sqlite.go +++ b/database/sqlite.go @@ -181,12 +181,27 @@ func (db *SQLiteDatabase) GetBookmarks(withContent bool, indices ...string) ([]m return nil, err } + // Create query + query := `SELECT + b.id, b.url, b.title, b.image_url, b.excerpt, b.author, + b.min_read_time, b.max_read_time, b.modified, bc.content <> "" has_content + FROM bookmark b + LEFT JOIN bookmark_content bc ON bc.docid = b.id` + + if withContent { + query = `SELECT + b.id, b.url, b.title, b.image_url, b.excerpt, b.author, + b.min_read_time, b.max_read_time, b.modified, bc.content, bc.html + FROM bookmark b + LEFT JOIN bookmark_content bc ON bc.docid = b.id` + } + // Prepare where clause args := []interface{}{} whereClause := " WHERE 1" if len(listIndex) > 0 { - whereClause = " WHERE id IN (" + whereClause = " WHERE b.id IN (" for _, idx := range listIndex { args = append(args, idx) whereClause += "?," @@ -197,32 +212,21 @@ func (db *SQLiteDatabase) GetBookmarks(withContent bool, indices ...string) ([]m } // Fetch bookmarks - query := `SELECT id, - url, title, image_url, excerpt, author, - min_read_time, max_read_time, modified - FROM bookmark` + whereClause - + query += whereClause bookmarks := []model.Bookmark{} err = db.Select(&bookmarks, query, args...) if err != nil && err != sql.ErrNoRows { return nil, err } - // Fetch tags and contents for each bookmarks + // Fetch tags for each bookmarks stmtGetTags, err := db.Preparex(`SELECT t.id, t.name FROM bookmark_tag bt LEFT JOIN tag t ON bt.tag_id = t.id WHERE bt.bookmark_id = ? ORDER BY t.name`) if err != nil { return nil, err } - - stmtGetContent, err := db.Preparex(`SELECT title, content, html FROM bookmark_content WHERE docid = ?`) - if err != nil { - return nil, err - } - defer stmtGetTags.Close() - defer stmtGetContent.Close() for i, book := range bookmarks { book.Tags = []model.Tag{} @@ -231,13 +235,6 @@ func (db *SQLiteDatabase) GetBookmarks(withContent bool, indices ...string) ([]m return nil, err } - if withContent { - err = stmtGetContent.Get(&book, book.ID) - if err != nil && err != sql.ErrNoRows { - return nil, err - } - } - bookmarks[i] = book } @@ -300,22 +297,25 @@ func (db *SQLiteDatabase) DeleteBookmarks(indices ...string) (err error) { // SearchBookmarks search bookmarks by the keyword or tags. func (db *SQLiteDatabase) SearchBookmarks(orderLatest bool, keyword string, tags ...string) ([]model.Bookmark, error) { - // Create initial variable - keyword = strings.TrimSpace(keyword) - whereClause := "WHERE 1" + // Prepare query args := []interface{}{} + query := `SELECT + b.id, b.url, b.title, b.image_url, b.excerpt, b.author, + b.min_read_time, b.max_read_time, b.modified, bc.content <> "" has_content + FROM bookmark b + LEFT JOIN bookmark_content bc ON bc.docid = b.id + WHERE 1` // Create where clause for keyword + keyword = strings.TrimSpace(keyword) if keyword != "" { - whereClause += ` AND (url LIKE ? OR id IN ( - SELECT docid id FROM bookmark_content - WHERE title MATCH ? OR content MATCH ?))` + query += ` AND (b.url LIKE ? OR bc.title MATCH ? OR bc.content MATCH ?)` args = append(args, "%"+keyword+"%", keyword, keyword) } // Create where clause for tags if len(tags) > 0 { - whereTagClause := ` AND id IN ( + whereTagClause := ` AND b.id IN ( SELECT bookmark_id FROM bookmark_tag WHERE tag_id IN (SELECT id FROM tag WHERE name IN (` @@ -328,19 +328,15 @@ func (db *SQLiteDatabase) SearchBookmarks(orderLatest bool, keyword string, tags whereTagClause += `)) GROUP BY bookmark_id HAVING COUNT(bookmark_id) >= ?)` args = append(args, len(tags)) - whereClause += whereTagClause + query += whereTagClause } - // Search bookmarks - query := `SELECT id, - url, title, image_url, excerpt, author, - min_read_time, max_read_time, modified - FROM bookmark ` + whereClause - + // Set order clause if orderLatest { query += ` ORDER BY id DESC` } + // Fetch bookmarks bookmarks := []model.Bookmark{} err := db.Select(&bookmarks, query, args...) if err != nil && err != sql.ErrNoRows { diff --git a/model/model.go b/model/model.go index d6cdf33..6c9d28e 100644 --- a/model/model.go +++ b/model/model.go @@ -21,6 +21,7 @@ type Bookmark struct { Modified string `db:"modified" json:"modified"` Content string `db:"content" json:"-"` HTML string `db:"html" json:"-"` + HasContent bool `db:"has_content" json:"hasContent"` Tags []Tag `json:"tags"` } diff --git a/readability/read.go b/readability/read.go index d11ef9a..9b7440e 100644 --- a/readability/read.go +++ b/readability/read.go @@ -1131,24 +1131,9 @@ func estimateReadTime(articleContent *goquery.Selection) (int, int) { } // Parse an URL to readability format -func Parse(url string, timeout time.Duration) (Article, error) { - // Make sure url is valid - parsedURL, err := nurl.ParseRequestURI(url) - if err != nil { - return Article{}, err - } - - // Clear UTM parameters from URL - newQuery := nurl.Values{} - for key, value := range parsedURL.Query() { - if !strings.HasPrefix(key, "utm_") { - newQuery[key] = value - } - } - parsedURL.RawQuery = newQuery.Encode() - +func Parse(url *nurl.URL, timeout time.Duration) (Article, error) { // Fetch page - doc, err := fetchURL(parsedURL, timeout) + doc, err := fetchURL(url, timeout) if err != nil { return Article{}, err } @@ -1165,7 +1150,7 @@ func Parse(url string, timeout time.Duration) (Article, error) { } // Post process content - postProcessContent(articleContent, parsedURL) + postProcessContent(articleContent, url) // Estimate read time minTime, maxTime := estimateReadTime(articleContent) @@ -1188,7 +1173,7 @@ func Parse(url string, timeout time.Duration) (Article, error) { htmlContent := getHTMLContent(articleContent) article := Article{ - URL: parsedURL.String(), + URL: url.String(), Meta: metadata, Content: textContent, RawContent: htmlContent, diff --git a/view/css/stylesheet.css b/view/css/stylesheet.css index f88142b..c3f4a46 100644 --- a/view/css/stylesheet.css +++ b/view/css/stylesheet.css @@ -1 +1 @@ -.header-link{border-right:1px solid #E5E5E5;color:#232323;cursor:pointer;font-size:.9em;line-height:60px;overflow:hidden;padding:0 16px}.header-link:hover{color:#F44336}.full-overlay{position:fixed;z-index:101;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column;background-color:rgba(0,0,0,0.5);top:0;left:0;right:0;bottom:0;overflow:hidden;-webkit-box-pack:center;justify-content:center;padding:32px}*{border-width:0;box-sizing:border-box;font-family:"Source Sans Pro",sans-serif;margin:0;padding:0;text-decoration:none;-webkit-hyphens:auto;hyphens:auto}a{cursor:pointer}.spacer{-webkit-box-flex:1;flex:1 0}.noscroll{overflow:hidden}#login-page{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap;-webkit-box-align:center;align-items:center;height:100vh;background-color:#EEE;-webkit-box-pack:center;justify-content:center}#login-page>.error-message{width:100%;margin:16px 16px 0;max-width:400px;background-color:#FFF;border:1px solid #E5E5E5;padding:16px;text-align:center}#login-page #login-box{width:100%;margin:16px;max-width:400px;background-color:#FFF;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap;border:1px solid #E5E5E5}#login-page #login-box #logo-area{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap;padding:16px;border-bottom:1px solid #E5E5E5}#login-page #login-box #logo-area #logo{font-size:3em;font-weight:100;color:#F44336}#login-page #login-box #logo-area #logo span{margin-right:8px}#login-page #login-box #logo-area #tagline{font-weight:100;color:#F44336}#login-page #login-box #input-area{padding:8px;border-bottom:1px solid #E5E5E5}#login-page #login-box #input-area .input-field{display:-webkit-box;display:flex;-webkit-box-align:baseline;align-items:baseline;padding:8px}#login-page #login-box #input-area .input-field p{color:#EEE;font-size:.9em;margin-right:16px;min-width:65px}#login-page #login-box #input-area .input-field input{color:#232323;padding:8px;border:1px solid #E5E5E5;-webkit-box-flex:1;flex:1 0;font-size:.9em}#login-page #login-box #input-area .input-field a{display:block;cursor:pointer;color:#EEE;text-align:center;font-size:.9em;-webkit-box-flex:1;flex:1 0}#login-page #login-box #input-area .input-field a i{margin-right:8px;color:#EEE}#login-page #login-box #input-area .input-field a:hover{color:#F44336}#login-page #login-box #button-area{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;padding:16px}#login-page #login-box #button-area a{color:#999;text-transform:uppercase;background-color:#FFF;-webkit-box-flex:1;flex:1 0;text-align:center}#login-page #login-box #button-area a.button{cursor:pointer}#login-page #login-box #button-area a.button:hover{color:#f4a236}#index-page{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;width:100vw;height:100vh;background-color:#EEE;min-width:0;min-height:0;overflow:hidden}#index-page #sidebar{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap;flex-shrink:0;background-color:#353535;min-width:0;min-height:0;overflow:hidden}#index-page #sidebar #logo{width:60px;line-height:60px;text-align:center;font-size:2em;color:#FFF;background-color:#F44336}#index-page #sidebar>a{width:60px;line-height:60px;text-align:center;display:block;color:#EEE}#index-page #sidebar>a:hover{background-color:#232323}#index-page #sidebar>a.active{background-color:#232323;color:#F44336}#index-page #body{-webkit-box-flex:1;flex:1 0;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap;min-width:0;min-height:0;overflow:hidden}#index-page #body #header{background-color:#FFF;border-bottom:1px solid #E5E5E5;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;color:#232323;-webkit-box-align:center;align-items:center;min-width:0;min-height:0;overflow:hidden;flex-shrink:0}#index-page #body #header input{-webkit-box-flex:1;flex:1 0;line-height:60px;padding:0 16px;font-size:1em;border-right:1px solid #E5E5E5}#index-page #body #header a{width:60px;line-height:60px;text-align:center;color:#999}#index-page #body #header a:hover,#index-page #body #header a:focus{color:#F44336}#index-page #body #grid{overflow-y:auto;display:grid;grid-template-rows:auto;grid-template-columns:repeat(4, 1fr);grid-gap:16px;padding:16px}#index-page #body #grid .bookmark{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap;min-width:0;border:1px solid #E5E5E5;background-color:#FFF;height:100%}#index-page #body #grid .bookmark:last-child{margin-bottom:16px}#index-page #body #grid .bookmark:hover .bookmark-menu>a{display:block}#index-page #body #grid .bookmark .bookmark-content{display:block;position:relative;-webkit-box-flex:1;flex:1}#index-page #body #grid .bookmark .bookmark-content:hover .title,#index-page #body #grid .bookmark .bookmark-content:focus .title{color:#F44336}#index-page #body #grid .bookmark .bookmark-content>*:not(:last-child){margin-bottom:8px}#index-page #body #grid .bookmark .bookmark-content img{max-width:100%}#index-page #body #grid .bookmark .bookmark-content .title{font-size:1.2em;font-weight:600;padding:0 16px;color:#232323}#index-page #body #grid .bookmark .bookmark-content .title:first-child{padding-top:16px}#index-page #body #grid .bookmark .bookmark-content .excerpt{color:#232323;padding:0 16px;text-overflow:ellipsis;word-wrap:break-word;overflow:hidden;font-size:.9em;line-height:1.5em;max-height:12em}#index-page #body #grid .bookmark .bookmark-menu{padding:8px 16px 16px;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;min-width:0;min-height:0;-webkit-box-align:center;align-items:center}#index-page #body #grid .bookmark .bookmark-menu a{color:#999;flex-shrink:0;opacity:.8;display:none;font-size:.9em}#index-page #body #grid .bookmark .bookmark-menu a:not(:last-child){margin-right:12px}#index-page #body #grid .bookmark .bookmark-menu a:hover,#index-page #body #grid .bookmark .bookmark-menu a:focus{color:#F44336;opacity:1}#index-page #body #grid .bookmark .bookmark-menu .url{-webkit-box-flex:1;flex:1 0;opacity:1;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:21px}#cache-page{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap;-webkit-box-align:center;align-items:center;height:auto;min-height:100vh}#cache-page a{color:#F44336}#cache-page a:visited{color:#F44336}#cache-page a:hover{text-decoration:underline}#cache-page>*{width:100%;max-width:864px}#cache-page #menu{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;max-width:864px;border-bottom:1px solid #E5E5E5}#cache-page #menu a{-webkit-box-flex:1;flex:1 0;font-size:.9em;text-align:center;color:#999;padding:16px;cursor:pointer}#cache-page #menu a i{margin-right:4px}#cache-page #menu a:not(:last-child){border-right:1px solid #E5E5E5}#cache-page #menu a:visited{color:#999}#cache-page #menu a:hover{color:#F44336;text-decoration:none}#cache-page #metadata{padding:32px;border-bottom:1px solid #E5E5E5}#cache-page #metadata a{font-size:.9em;display:block}#cache-page #metadata h3{font-size:2em;margin:8px 0}#cache-page #metadata p{font-size:.9em;color:#232323}#cache-page #content{padding:16px 32px 32px}#cache-page #content *{margin-top:16px;line-height:180%;overflow:auto}#cache-page #content pre,#cache-page #content code{font-family:'Ubuntu Mono','Courier New',Courier,monospace}#cache-page.dark-mode{background-color:#222;color:white}#cache-page.dark-mode #menu a{color:white}#cache-page.dark-mode #menu a:visited{color:white}#cache-page.dark-mode #menu a:hover{color:#F44336;text-decoration:none}#cache-page.dark-mode #metadata p{color:white} \ No newline at end of file +.header-link{border-right:1px solid #E5E5E5;color:#232323;cursor:pointer;font-size:.9em;line-height:60px;overflow:hidden;padding:0 16px}.header-link:hover{color:#F44336}.full-overlay{position:fixed;z-index:101;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column;background-color:rgba(0,0,0,0.5);top:0;left:0;right:0;bottom:0;overflow:hidden;-webkit-box-pack:center;justify-content:center;padding:32px}*{border-width:0;box-sizing:border-box;font-family:"Source Sans Pro",sans-serif;margin:0;padding:0;text-decoration:none;-webkit-hyphens:auto;hyphens:auto}a{cursor:pointer}.spacer{-webkit-box-flex:1;flex:1 0}.noscroll{overflow:hidden}#login-page{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap;-webkit-box-align:center;align-items:center;height:100vh;background-color:#EEE;-webkit-box-pack:center;justify-content:center}#login-page>.error-message{width:100%;margin:16px 16px 0;max-width:400px;background-color:#FFF;border:1px solid #E5E5E5;padding:16px;text-align:center}#login-page #login-box{width:100%;margin:16px;max-width:400px;background-color:#FFF;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap;border:1px solid #E5E5E5}#login-page #login-box #logo-area{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap;padding:16px;border-bottom:1px solid #E5E5E5}#login-page #login-box #logo-area #logo{font-size:3em;font-weight:100;color:#F44336}#login-page #login-box #logo-area #logo span{margin-right:8px}#login-page #login-box #logo-area #tagline{font-weight:100;color:#F44336}#login-page #login-box #input-area{padding:8px;border-bottom:1px solid #E5E5E5}#login-page #login-box #input-area .input-field{display:-webkit-box;display:flex;-webkit-box-align:baseline;align-items:baseline;padding:8px}#login-page #login-box #input-area .input-field p{color:#EEE;font-size:.9em;margin-right:16px;min-width:65px}#login-page #login-box #input-area .input-field input{color:#232323;padding:8px;border:1px solid #E5E5E5;-webkit-box-flex:1;flex:1 0;font-size:.9em}#login-page #login-box #input-area .input-field a{display:block;cursor:pointer;color:#EEE;text-align:center;font-size:.9em;-webkit-box-flex:1;flex:1 0}#login-page #login-box #input-area .input-field a i{margin-right:8px;color:#EEE}#login-page #login-box #input-area .input-field a:hover{color:#F44336}#login-page #login-box #button-area{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;padding:16px}#login-page #login-box #button-area a{color:#999;text-transform:uppercase;background-color:#FFF;-webkit-box-flex:1;flex:1 0;text-align:center}#login-page #login-box #button-area a.button{cursor:pointer}#login-page #login-box #button-area a.button:hover{color:#f4a236}#index-page{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;width:100vw;height:100vh;background-color:#EEE;min-width:0;min-height:0;overflow:hidden}#index-page #sidebar{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap;flex-shrink:0;background-color:#353535;min-width:0;min-height:0;overflow:hidden}#index-page #sidebar #logo{width:60px;line-height:60px;text-align:center;font-size:2em;color:#FFF;background-color:#F44336}#index-page #sidebar>a{width:60px;line-height:60px;text-align:center;display:block;color:#EEE}#index-page #sidebar>a:hover{background-color:#232323}#index-page #sidebar>a.active{background-color:#232323;color:#F44336}#index-page #body{-webkit-box-flex:1;flex:1 0;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap;min-width:0;min-height:0;overflow:hidden}#index-page #body #header{background-color:#FFF;border-bottom:1px solid #E5E5E5;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;color:#232323;-webkit-box-align:center;align-items:center;min-width:0;min-height:0;overflow:hidden;flex-shrink:0}#index-page #body #header input{-webkit-box-flex:1;flex:1 0;line-height:60px;padding:0 16px;font-size:1em;border-right:1px solid #E5E5E5}#index-page #body #header a{width:60px;line-height:60px;text-align:center;color:#999}#index-page #body #header a:hover,#index-page #body #header a:focus{color:#F44336}#index-page #body #grid{overflow-y:auto;display:grid;grid-template-rows:auto;grid-template-columns:repeat(4, 1fr);grid-gap:16px;padding:16px 16px 0}#index-page #body #grid>div:last-child{grid-column-start:1;grid-column-end:-1;height:1px}#index-page #body #grid .bookmark{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap;min-width:0;border:1px solid #E5E5E5;background-color:#FFF;height:100%}#index-page #body #grid .bookmark:hover .bookmark-menu>a,#index-page #body #grid .bookmark:focus .bookmark-menu>a{display:block}#index-page #body #grid .bookmark .bookmark-content{display:block;position:relative;-webkit-box-flex:1;flex:1;cursor:default}#index-page #body #grid .bookmark .bookmark-content[href]{cursor:pointer}#index-page #body #grid .bookmark .bookmark-content[href]:hover .title,#index-page #body #grid .bookmark .bookmark-content[href]:focus .title{color:#F44336}#index-page #body #grid .bookmark .bookmark-content img{max-width:100%;margin-bottom:8px}#index-page #body #grid .bookmark .bookmark-content .title{text-overflow:ellipsis;word-wrap:break-word;overflow:hidden;font-size:1.2em;line-height:1.3em;max-height:5.2em;font-weight:600;padding:0 16px;color:#232323}#index-page #body #grid .bookmark .bookmark-content .title:first-child{margin-top:16px}#index-page #body #grid .bookmark .bookmark-content .excerpt{color:#232323;padding:8px 16px 0;text-overflow:ellipsis;word-wrap:break-word;overflow:hidden;font-size:.9em;line-height:1.5em;max-height:12em}#index-page #body #grid .bookmark .bookmark-menu{padding:8px 16px 16px;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;min-width:0;min-height:0;-webkit-box-align:center;align-items:center}#index-page #body #grid .bookmark .bookmark-menu a{color:#999;flex-shrink:0;opacity:.8;display:none;font-size:.9em}#index-page #body #grid .bookmark .bookmark-menu a:not(:last-child){margin-right:12px}#index-page #body #grid .bookmark .bookmark-menu a:hover,#index-page #body #grid .bookmark .bookmark-menu a:focus{color:#F44336;opacity:1}#index-page #body #grid .bookmark .bookmark-menu .url{-webkit-box-flex:1;flex:1 0;opacity:1;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:21px}#cache-page{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap;-webkit-box-align:center;align-items:center;height:auto;min-height:100vh}#cache-page a{color:#F44336}#cache-page a:visited{color:#F44336}#cache-page a:hover{text-decoration:underline}#cache-page>*{width:100%;max-width:864px}#cache-page #menu{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;max-width:864px;border-bottom:1px solid #E5E5E5}#cache-page #menu a{-webkit-box-flex:1;flex:1 0;font-size:.9em;text-align:center;color:#999;padding:16px;cursor:pointer}#cache-page #menu a i{margin-right:4px}#cache-page #menu a:not(:last-child){border-right:1px solid #E5E5E5}#cache-page #menu a:visited{color:#999}#cache-page #menu a:hover{color:#F44336;text-decoration:none}#cache-page #metadata{padding:32px;border-bottom:1px solid #E5E5E5}#cache-page #metadata a{font-size:.9em;display:block}#cache-page #metadata h3{font-size:2em;margin:8px 0}#cache-page #metadata p{font-size:.9em;color:#232323}#cache-page #content{padding:16px 32px 32px}#cache-page #content *{margin-top:16px;line-height:180%;overflow:auto}#cache-page #content pre,#cache-page #content code{font-family:'Ubuntu Mono','Courier New',Courier,monospace}#cache-page.dark-mode{background-color:#222;color:white}#cache-page.dark-mode #menu a{color:white}#cache-page.dark-mode #menu a:visited{color:white}#cache-page.dark-mode #menu a:hover{color:#F44336;text-decoration:none}#cache-page.dark-mode #metadata p{color:white} \ No newline at end of file diff --git a/view/css/yla-dialog.css b/view/css/yla-dialog.css index 744d519..198bf49 100644 --- a/view/css/yla-dialog.css +++ b/view/css/yla-dialog.css @@ -1 +1 @@ -.header-link{border-right:1px solid #E5E5E5;color:#232323;cursor:pointer;font-size:.9em;line-height:60px;overflow:hidden;padding:0 16px}.header-link:hover{color:#F44336}.full-overlay{position:fixed;z-index:101;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column;background-color:rgba(0,0,0,0.5);top:0;left:0;right:0;bottom:0;overflow:hidden;-webkit-box-pack:center;justify-content:center;padding:32px}.yla-dialog__overlay{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;min-width:0;min-height:0;overflow:hidden;position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:10001;background-color:rgba(0,0,0,0.6);padding:32px}.yla-dialog__overlay .yla-dialog{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap;min-width:400px;min-height:0;max-height:100%;overflow:hidden;background-color:#FFF;font-size:16px}.yla-dialog__overlay .yla-dialog>.yla-dialog__header{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;padding:16px;min-height:0;background-color:#353535;color:#EEE;flex-shrink:0}.yla-dialog__overlay .yla-dialog>.yla-dialog__header>p{-webkit-box-flex:1;flex:1 0;font-weight:600;font-size:1em;text-transform:uppercase}.yla-dialog__overlay .yla-dialog>.yla-dialog__header>a:hover{color:#F44336}.yla-dialog__overlay .yla-dialog>.yla-dialog__body{padding:16px;display:grid;max-height:100%;min-height:80px;min-width:0;font-size:.9em;overflow:auto;grid-template-columns:max-content 1fr;-webkit-box-align:baseline;align-items:baseline;grid-gap:16px}.yla-dialog__overlay .yla-dialog>.yla-dialog__body>.yla-dialog__content{grid-column-start:1;grid-column-end:3;align-self:baseline}.yla-dialog__overlay .yla-dialog>.yla-dialog__body>input{color:#232323;padding:8px;border:1px solid #E5E5E5}.yla-dialog__overlay .yla-dialog>.yla-dialog__body>.suggestion{position:absolute;display:block;padding:8px;background-color:#EEE;border:1px solid #E5E5E5}.yla-dialog__overlay .yla-dialog>.yla-dialog__footer{padding:16px;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row wrap;-webkit-box-pack:end;justify-content:flex-end;border-top:1px solid #E5E5E5}.yla-dialog__overlay .yla-dialog>.yla-dialog__footer>a{text-transform:uppercase;padding:0 8px;font-size:.9em;font-weight:600}.yla-dialog__overlay .yla-dialog>.yla-dialog__footer>a:hover{color:#F44336}.yla-dialog__overlay .yla-dialog>.yla-dialog__footer>a:focus{outline:none;color:#F44336;border-bottom:1px dashed #F44336}.yla-dialog__overlay .yla-dialog>.yla-dialog__footer>i{width:19px;line-height:19px;text-align:center} \ No newline at end of file +.header-link{border-right:1px solid #E5E5E5;color:#232323;cursor:pointer;font-size:.9em;line-height:60px;overflow:hidden;padding:0 16px}.header-link:hover{color:#F44336}.full-overlay{position:fixed;z-index:101;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column;background-color:rgba(0,0,0,0.5);top:0;left:0;right:0;bottom:0;overflow:hidden;-webkit-box-pack:center;justify-content:center;padding:32px}.yla-dialog__overlay{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;min-width:0;min-height:0;overflow:hidden;position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:10001;background-color:rgba(0,0,0,0.6);padding:32px}.yla-dialog__overlay .yla-dialog{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap;min-width:400px;min-height:0;max-height:100%;overflow:hidden;background-color:#FFF;font-size:16px}.yla-dialog__overlay .yla-dialog>.yla-dialog__header{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;padding:16px;min-height:0;background-color:#353535;color:#EEE;flex-shrink:0}.yla-dialog__overlay .yla-dialog>.yla-dialog__header>p{-webkit-box-flex:1;flex:1 0;font-weight:600;font-size:1em;text-transform:uppercase}.yla-dialog__overlay .yla-dialog>.yla-dialog__header>a:hover{color:#F44336}.yla-dialog__overlay .yla-dialog>.yla-dialog__body{padding:16px;display:grid;max-height:100%;min-height:80px;min-width:0;overflow:auto;grid-template-columns:max-content 1fr;-webkit-box-align:baseline;align-items:baseline;grid-gap:16px}.yla-dialog__overlay .yla-dialog>.yla-dialog__body>.yla-dialog__content{grid-column-start:1;grid-column-end:3;align-self:baseline;font-size:.9em}.yla-dialog__overlay .yla-dialog>.yla-dialog__body>input,.yla-dialog__overlay .yla-dialog>.yla-dialog__body>textarea{color:#232323;padding:8px;border:1px solid #E5E5E5;font-size:.9em;min-height:37px}.yla-dialog__overlay .yla-dialog>.yla-dialog__body>.suggestion{position:absolute;display:block;padding:8px;background-color:#EEE;border:1px solid #E5E5E5}.yla-dialog__overlay .yla-dialog>.yla-dialog__footer{padding:16px;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row wrap;-webkit-box-pack:end;justify-content:flex-end;border-top:1px solid #E5E5E5}.yla-dialog__overlay .yla-dialog>.yla-dialog__footer>a{text-transform:uppercase;padding:0 8px;font-size:.9em;font-weight:600;border-bottom:1px dashed transparent}.yla-dialog__overlay .yla-dialog>.yla-dialog__footer>a:hover{color:#F44336}.yla-dialog__overlay .yla-dialog>.yla-dialog__footer>a:focus{outline:none;color:#F44336;border-bottom:1px dashed #F44336}.yla-dialog__overlay .yla-dialog>.yla-dialog__footer>i{width:19px;line-height:19px;text-align:center} \ No newline at end of file diff --git a/view/index.html b/view/index.html index c942469..a1c5165 100644 --- a/view/index.html +++ b/view/index.html @@ -62,8 +62,8 @@
{{content}}
{{field.label}} :
- + + div:last-child { + grid-column-start: 1; + grid-column-end: -1; + height: 1px; + } .bookmark { display: flex; flex-flow: column nowrap; @@ -212,10 +217,8 @@ a { border: 1px solid @border; background-color: @contentBg; height: 100%; - &:last-child { - margin-bottom: 16px; - } - &:hover { + &:hover, + &:focus { .bookmark-menu>a { display: block; } @@ -224,30 +227,37 @@ a { display: block; position: relative; flex: 1; - &:hover, - &:focus { - .title { - color: @main; + cursor: default; + &[href] { + cursor: pointer; + &:hover, + &:focus { + .title { + color: @main; + } } } - >*:not(:last-child) { - margin-bottom: 8px; - } img { max-width: 100%; + margin-bottom: 8px; } .title { + text-overflow: ellipsis; + word-wrap: break-word; + overflow: hidden; font-size: 1.2em; + line-height: 1.3em; + max-height: 5.2em; font-weight: 600; padding: 0 16px; color: @color; &:first-child { - padding-top: 16px; + margin-top: 16px; } } .excerpt { color: @color; - padding: 0 16px; + padding: 8px 16px 0; text-overflow: ellipsis; word-wrap: break-word; overflow: hidden; diff --git a/view/less/yla-dialog.less b/view/less/yla-dialog.less index faf6849..dd9c406 100644 --- a/view/less/yla-dialog.less +++ b/view/less/yla-dialog.less @@ -48,7 +48,6 @@ max-height: 100%; min-height: 80px; min-width: 0; - font-size: 0.9em; overflow: auto; grid-template-columns: max-content 1fr; align-items: baseline; @@ -57,11 +56,15 @@ grid-column-start: 1; grid-column-end: 3; align-self: baseline; + font-size: 0.9em; } - >input { + >input, + >textarea { color: @color; padding: 8px; border: 1px solid @border; + font-size: 0.9em; + min-height: 37px; } >.suggestion { position: absolute; @@ -82,6 +85,7 @@ padding: 0 8px; font-size: 0.9em; font-weight: 600; + border-bottom: 1px dashed transparent; &:hover { color: @main; }