From 917d32f8a568845ba39a662ba14f9ac14ba02f0e Mon Sep 17 00:00:00 2001 From: Daniel Heath Date: Wed, 31 Jan 2018 13:53:37 +1100 Subject: [PATCH] Support category pages --- bindata.go | 8 ++++---- handlers.go | 1 + page.go | 21 +++++++++++++++++++++ page_test.go | 14 ++++++++++++++ static/css/default.css | 36 ++++++++++++++++++++++++++++++++---- templates/index.tmpl | 10 ++++++++++ 6 files changed, 82 insertions(+), 8 deletions(-) diff --git a/bindata.go b/bindata.go index de062c3..f545447 100644 --- a/bindata.go +++ b/bindata.go @@ -132,7 +132,7 @@ func staticCssBaseMinCss() (*asset, error) { return a, nil } -var _staticCssDefaultCss = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x53\x5d\x8f\x9b\x3a\x10\x7d\xcf\xaf\xb0\x36\x5a\xe5\x5e\x09\x10\xc9\x5e\x94\x5b\xf6\xa5\x55\x5b\xa9\x2b\x6d\x3f\xa4\x6d\x7f\xc0\x80\x87\xc4\x8a\xed\x41\xb6\xd9\x64\x53\xe5\xbf\x57\x80\x61\x21\xd9\xa4\x2f\x79\x41\x78\xce\xcc\x99\x33\xc7\xe3\x8c\xf8\x4b\xf4\x28\xac\xfb\x01\x2b\x64\xb6\x04\xcd\x7e\x4f\x18\x63\x2c\xaf\x8c\x25\x93\xb2\x92\x84\x76\x68\xee\x27\x87\x49\x9d\xeb\xd1\x0c\xf2\xcd\xca\x50\xa5\x79\xca\xa6\x45\x51\xd4\x70\x64\xab\x3c\x47\x6b\x3b\x02\x92\x75\xfd\x34\xc9\xb3\xff\x93\xfc\xbe\x89\x15\xa4\x5d\xb8\x45\xb1\x5a\xbb\x94\x65\x24\x79\x53\x57\x80\x90\x95\xc1\xa3\x3a\xfe\x2e\xb9\xfb\xaf\xb8\x54\x57\x56\x06\x43\x85\xba\x62\x70\x54\xbb\x5c\x2e\x9b\x0c\x8e\x12\x9d\xd0\x2b\x0f\x53\x09\xb9\x70\x2f\x29\x8b\xa3\xa4\xc6\xa7\x5b\x03\xa5\xc7\x4a\xb2\xc2\x09\xd2\x29\x83\xcc\x92\xac\x1c\xb6\xad\x1d\x95\x29\x4b\xe2\x72\xd7\x1e\x25\x16\x2e\x65\xfd\xd1\xb4\x92\xfa\x73\x46\xce\x91\xf2\x81\xc3\x64\x5a\x02\xf7\xfc\xeb\x56\xfd\x3c\x8e\x6f\x6b\xa4\x31\x33\xfa\xcc\x45\x6b\xbc\xd7\xf7\x8c\xa6\x90\xb4\x4d\xd7\x82\x73\xd4\x7d\x5e\x43\xe3\x70\xe7\xc0\x60\x37\xea\x56\x70\xb7\x4e\x59\xcb\x37\x68\x30\x88\x64\xb4\x0b\xad\xd8\x0b\xbd\xaa\x4d\x33\x1c\x4d\x98\x91\x17\x1a\x2a\xda\x87\x17\x13\xb6\x98\x6d\x84\xbb\x98\x73\xce\x33\x6f\xd2\xd8\xa2\x23\x83\x06\xee\xf6\x50\xcd\x7e\x72\xd4\xa4\x3d\x2d\x55\x4e\x0a\x8d\xc3\xd0\x48\xe5\x1a\x38\x6d\x47\x68\x3f\xe4\x09\xf4\x76\xd4\xa0\x15\xfb\x51\x83\x66\xf3\xda\xe0\x3c\x8a\x51\x0d\xa2\x05\x28\x21\x5f\x52\x36\xfb\x5e\xa2\x66\x4f\xa0\xed\x2c\x98\x3d\xe1\x8a\x90\xfd\x7a\x98\x05\x3f\x61\x4d\x0a\x82\x0f\x46\x80\x0c\x2c\x68\x1b\x5a\x34\xa2\x18\x5d\x6a\xf4\x05\xec\x27\x72\x0f\xfa\x1b\x28\x3c\xbe\xe1\x51\x93\x9b\xc7\x2a\x17\x1c\xd8\x47\xd2\x96\x24\xde\x04\xec\x2b\x69\xc8\x29\x60\x8a\x34\xd9\x12\x72\x6c\x98\x23\x05\x66\xc3\x69\xab\xc3\xe6\xb5\x56\x32\x60\x47\x21\x92\xdd\xc6\x03\xe7\x42\xaf\x42\x7f\x5b\xf5\x6c\x87\xc9\xe4\xbd\x42\x2e\x80\xfd\xa3\x84\x0e\xfd\x8e\x25\xa8\xfe\xf5\x35\x5c\x3c\x4f\xeb\x17\x17\x34\x7f\x06\x35\x47\x83\x3c\x60\xe7\xb6\xf4\xb4\xcf\xc2\x2f\xe7\x10\xf1\x2b\xd2\x41\x87\xe6\x3b\x78\xde\xaf\xbf\xe1\x9a\x8c\xd8\x93\x76\x20\x07\x1d\x14\xec\x3a\xad\x77\x71\xff\x16\x8f\x69\x42\x2e\x2c\x64\xb2\x96\x3b\x24\x44\xa8\x35\x8c\x62\x52\xe8\xcd\xb9\x01\xe6\xd1\xa2\xdb\x82\xd3\x11\x3a\xe4\x30\x39\xbc\x69\x64\x7c\x4d\x27\xe7\xf1\x79\x2b\x7b\xec\xda\x26\xa4\x2c\x4a\x50\xb1\xf9\x5f\x26\x5d\x5e\x77\xd2\xe4\xc2\xa4\xc9\xed\xab\x92\xb7\xa4\xcc\xe3\xab\x6a\x59\x5c\x70\x7d\x11\x0f\xb4\xfc\x09\x00\x00\xff\xff\x0d\x4d\xd1\xe2\x5a\x07\x00\x00") +var _staticCssDefaultCss = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x56\x6d\x6f\xdb\x36\x10\xfe\xee\x5f\x71\xa8\x51\xa4\x05\x24\x41\x72\xa2\x66\x53\xbf\x6c\xe8\x06\xac\x40\xf7\x02\x74\xfb\x01\x27\xf1\x24\x13\x21\x79\x02\x49\xd5\x49\x06\xff\xf7\x41\x12\xe5\xc9\x72\x6c\xf4\x83\xf3\x25\x30\xef\xb9\xb7\xe7\xb9\x63\xc4\x92\xc5\x53\xf2\x45\x3a\xff\x17\x36\x04\xae\x45\x03\xff\xae\x00\x00\xaa\xce\x3a\xb6\x05\xb4\x2c\x8d\x27\xfb\x71\xb5\x5f\xf5\xbe\x01\x2d\xb1\x7a\x68\x2c\x77\x46\x14\xb0\xae\xeb\xba\x87\x13\xd7\x55\x15\x39\x37\x25\x60\xd5\xc7\xaf\xf3\xaa\xfc\x21\xaf\x3e\x0e\xb6\x9a\x8d\x8f\x77\x24\x9b\xad\x2f\xa0\x64\x25\x86\xb8\x1a\xa5\xea\x2c\x2d\xe2\xc4\x8f\xf9\xed\x5d\x7d\x29\xae\xed\x2c\xc5\x9a\x4c\x07\xb8\x88\xbd\xbf\xbf\x1f\x3c\x04\x29\xf2\xd2\x34\x01\xe6\x16\x2b\xe9\x9f\x0a\x48\x93\xbc\xc7\xd7\x3b\x8b\x6d\xc0\x5a\x76\xd2\x4b\x36\x05\x60\xe9\x58\x75\x9e\xc6\xd2\x9e\xdb\x02\xf2\xb4\x7d\x1c\x8f\x8a\x6a\x5f\xc0\xe1\x68\xc7\x96\x0e\xe7\x92\xbd\x67\x1d\x0c\xfb\xd5\xba\x45\x11\xf2\x6f\xc7\xee\xb3\x34\x7d\xdb\x23\x83\x98\xc9\xaf\x42\x8e\xc2\x87\xfe\xbe\x91\xad\x15\xef\x8a\xad\x14\x82\xcc\xc1\x6f\x48\xe3\xe9\xd1\xa3\xa5\x89\xea\x4e\x0a\xbf\x2d\x60\xcc\x37\x2b\x30\xb3\x94\xfc\x18\x3b\xf9\x2c\x4d\xd3\x8b\x66\x05\xd9\xb8\xe4\xd0\x68\xac\xf9\x39\xbe\xe8\xb0\xa3\xf2\x41\xfa\x8b\x3e\xe7\x34\x0b\x22\x1d\x4b\xb4\x10\x68\xa6\xee\x01\xea\xb3\x9f\x1c\x0d\x9b\x90\x96\x3b\xaf\xa4\xa1\xb9\xe9\xa8\xcb\x2d\x0a\xde\x1d\xa1\x07\x92\x27\xd0\xcb\x56\x4b\x4e\x3e\x1f\x15\x18\x36\x6f\x34\x66\x49\x4a\x7a\x66\xad\x51\x4b\xf5\x54\xc0\xcd\x9f\x2d\x19\xf8\x8a\xc6\xdd\x44\x37\x5f\xa9\x61\x82\x7f\x3e\xdf\x44\x7f\xe3\x96\x35\x46\x3f\x5b\x89\x2a\x72\x68\x5c\xec\xc8\xca\xfa\x68\xa8\xc9\x6f\xe8\x7e\x61\xff\xd9\xfc\x81\x9a\x96\x13\x3e\x2a\xf2\xe6\x4b\x57\x49\x81\xf0\x89\x8d\x63\x45\x6f\x22\xf8\x9d\x0d\x56\x1c\x81\x66\xc3\xae\xc5\x8a\x86\xcc\x89\x46\xfb\x20\x78\x67\xe2\xe1\xb6\x76\x2a\x82\x85\x89\xd5\xb4\xf1\x28\x84\x34\x4d\x1c\xa6\xd5\x73\xdb\xaf\x56\x3f\x69\x12\x12\xe1\x9d\x96\x26\x0e\x3b\x96\x93\x7e\x1f\x62\x84\xfc\xb6\xee\x6f\x5c\x34\xfc\xb2\x64\x04\x59\x12\x11\x24\x9f\xb6\x52\x89\x7e\x95\x7b\x26\x2e\x82\x73\x6b\x7b\x5a\x78\x13\xb6\x75\x8e\x84\x9d\x99\xa0\xfd\xf0\x77\x76\xdf\xff\xff\x19\x6f\xd9\xca\x67\x36\x1e\xd5\xac\x82\xc6\xc7\xa9\xf9\xdb\xf4\x70\x39\x97\x69\x62\x21\x1d\x96\x6a\xe8\x7f\x96\x90\xb0\xef\xe1\xc8\xa6\xa4\x79\x38\x47\x20\x4b\x36\xd3\x5a\x9c\x52\x98\x90\x50\xfa\x58\x25\xe8\xe6\x3d\x37\x56\x8a\xd8\x93\x6e\x15\x7a\x8a\x2b\x56\x9d\x36\xae\x00\x4b\x2d\xa1\x7f\x97\x45\x90\xd5\xf6\xfd\x94\x6d\xff\xe2\x9c\xd2\x57\x1d\x54\x96\x9e\x9f\xd4\x01\xbb\xb6\xc6\x05\x24\x39\x69\xc8\xae\x26\xe4\xe6\x3b\x84\xbc\x7f\x65\x21\xf3\x0b\x42\xe6\x6f\xaf\x44\xf4\x76\x49\xf4\x25\xa6\x59\xfa\xba\x54\x37\x17\x76\x66\x93\x5e\x8b\xea\xdd\x09\xd5\xb3\xc9\x34\xda\x46\x9a\xfe\x05\x70\x4b\x1a\x52\x48\x21\x4b\x3e\x4c\xcb\x75\xd8\xb9\xf0\x09\x12\xd2\xb5\x0a\x9f\x8a\xa1\xfc\x68\x1a\x1a\x69\xb0\x1d\xde\x10\x36\xfc\xcf\x5c\x56\x53\x72\x59\xed\x45\xb7\xe5\xab\x25\xfd\x70\x97\x63\xa8\x33\x7f\x60\x8d\x5f\xa3\xfd\xea\xbf\x00\x00\x00\xff\xff\xa4\xad\xbf\xa1\xac\x09\x00\x00") func staticCssDefaultCssBytes() ([]byte, error) { return bindataRead( @@ -147,7 +147,7 @@ func staticCssDefaultCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "static/css/default.css", size: 1882, mode: os.FileMode(420), modTime: time.Unix(1517377525, 0)} + info := bindataFileInfo{name: "static/css/default.css", size: 2476, mode: os.FileMode(420), modTime: time.Unix(1517377558, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -992,7 +992,7 @@ func staticTextSitemapXml() (*asset, error) { return a, nil } -var _templatesIndexTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x5a\xeb\x6f\xdb\x38\x12\xff\xbe\xc0\xfe\x0f\xac\x9a\xbb\x4d\x70\x95\x14\xa7\x6d\xda\xa6\xb6\x17\xb8\xa4\x8b\x0d\x2e\x9b\x16\x79\x2c\x70\x1f\x19\x71\x6c\x31\xa1\x48\x2d\x49\xf9\x51\xc1\xff\xfb\x81\x94\x64\xcb\x0f\xc9\x8c\x93\x14\x7b\xf9\xd0\x52\xd2\x70\xe6\x37\x0f\xce\x0c\x49\x77\x5f\x9d\x7d\x3d\xbd\xf9\xef\xb7\x2f\x28\xd6\x09\xeb\xff\xfc\x53\xb7\xfc\x1f\x21\x84\xba\x31\x60\x52\x8e\xed\x73\x02\x1a\xa3\x58\xeb\xd4\x87\xbf\x32\x3a\xea\x79\x91\xe0\x1a\xb8\xf6\xf5\x34\x05\x0f\x95\x4f\x3d\x4f\xc3\x44\x87\x86\xd1\x67\x14\xc5\x58\x2a\xd0\xbd\xdb\x9b\xdf\xfc\x8f\xde\x1a\x33\x8e\x13\xe8\x79\x23\x0a\xe3\x54\x48\x5d\x63\x31\xa6\x44\xc7\x3d\x02\x23\x1a\x81\x6f\x1f\xde\x20\xca\xa9\xa6\x98\xf9\x2a\xc2\x0c\x7a\x9d\x25\x6e\x8c\xf2\x07\x24\x81\xf5\x3c\x9c\xa6\x0c\x7c\x2d\xb2\x28\xf6\x69\x24\xb8\x87\x14\xfd\x0e\xaa\xe7\xbd\xff\x30\x79\xff\xc1\x43\xb1\x84\x41\x2f\x54\x1a\x6b\x1a\x85\x34\x19\x86\x91\x18\x4f\x45\x58\x4c\x33\x13\x7c\x4b\x18\xa4\x7c\xf8\x48\x01\xc7\x87\x93\xe3\xc3\x46\x01\x1b\x45\xd9\x29\x3b\x88\xfa\x70\x34\xf9\x70\xe4\xa2\x8b\x25\xdc\x45\xc0\xf1\xe4\xc3\xb1\x93\x00\x43\xb8\x83\x80\x4e\xe7\xdd\xa4\xd3\x79\xe7\x22\xa2\x24\xdd\x45\xc8\xd1\xe1\xa4\x73\xd4\xec\x93\xba\x90\x82\x74\x17\x21\xef\xde\x4d\x3a\xef\xdc\x34\x29\x48\x77\x11\xf2\xfe\x68\xd2\x79\xef\xe4\xf2\x92\x74\x17\x21\x1f\x0f\x27\x9d\x8f\x6e\xe6\x2a\x48\x9b\x85\x14\x8c\x4d\x62\xe8\x79\x34\xc1\x43\x08\x53\x3e\x5c\x48\xfa\x74\x34\xe9\x7c\x6a\x51\x87\x13\x29\x28\x29\x65\x15\xc4\xbb\xca\x7a\x7b\x34\x79\xdb\x2c\x69\x80\x47\x56\x88\xa5\xda\x55\xc4\xa7\xe3\xc9\xa7\xe6\xd5\x52\x89\xb0\x54\x3b\x5b\xec\x78\xd2\xd9\x2e\xc2\x52\x35\x8b\x48\x30\xa7\x03\x50\xba\x91\x4f\x45\x10\xdc\x2b\xc1\x1b\xb2\x75\xa2\x4c\x1c\xd0\x08\x6b\x2a\xb8\x7f\x43\x19\x9c\x0a\x26\x64\x2d\x79\xbf\x1e\x0c\x06\x4d\xb9\x7e\x7d\xf6\xb9\xd1\xb5\x36\x3b\x4c\xd4\xda\x6a\x69\xe2\xa6\x63\x48\xc0\x8f\x1a\xe4\x2f\xe6\xe4\x39\xa2\x03\x84\x39\x41\xc1\x69\xa6\xb4\x48\x4e\xaf\xaf\x51\x70\x05\x98\x7c\xc3\x43\x40\xb3\xd9\x82\x74\xc5\x64\x4a\x4f\x19\xa8\x18\x40\x57\xbe\xb1\xd5\x2d\x52\xaa\x34\xa2\x57\x59\x31\x52\x2a\x8c\x2c\xf3\xc0\x7c\xed\x2f\x49\x07\xa6\x9e\x51\xcc\x90\xea\x38\xbb\xf3\x13\x2c\x1f\x88\x18\xf3\x55\x79\x4f\xe2\x9d\x00\xcf\x94\x9f\xd0\xe7\xe5\x7a\x87\x15\x3c\x92\xe9\x3a\x93\x98\x0e\x63\x46\x87\xb1\x7e\x12\x17\x02\x03\x9c\xb1\xcd\x3c\x54\x24\x69\xaa\xeb\xfa\xdc\xe3\x11\x2e\xde\x7a\x48\xc9\x68\xc1\xea\x5e\x85\xf7\x7f\x65\x20\xa7\x7e\x27\xf8\x18\xbc\x0d\xee\x95\xd7\xef\x86\x05\x69\x03\xdb\xd5\xf9\x0b\x7d\x8c\x65\x1c\x18\x38\xe2\x5a\xf0\x4d\x71\xf4\xd0\xc4\xd8\x44\x25\x27\x36\x28\x6b\x8b\x4b\x53\xcd\xa0\x9f\xe7\x28\x28\x57\x46\x37\x2c\x5e\x2d\x51\xd5\xf1\xfc\xb2\x82\xe7\x97\x15\xf0\x31\xbb\x57\x81\xe9\xdd\x7e\xaf\x60\x51\x3e\xfc\xca\x2f\x04\x26\xfb\x07\x9f\x97\x69\xc7\x94\x13\x31\x0e\x6c\x32\x42\x3d\x94\x2f\x7f\x35\x7f\x04\xee\x44\xc6\x23\xf8\xe3\xfa\xc4\x68\x10\x9c\x95\xcf\x68\x36\x7b\xb3\x4e\xcd\xb0\xd2\xbf\x81\x8e\xe2\x82\xf8\x96\xd3\xc9\x0d\x4d\x1a\x88\x53\x3c\x84\x4b\x9c\xc0\x09\xf2\x6a\xfa\x7b\x2b\x94\xb5\x35\xbc\xc1\xa8\x8f\xf4\x94\x55\x74\x93\x83\xba\x61\xad\xf9\xee\xde\x09\x32\x45\x94\xf4\xbc\x14\x13\x0f\x45\x0c\x2b\xd5\xf3\x56\xb3\x5b\xf0\x85\x50\x5d\x82\x46\xf3\x71\xcd\xcb\x2b\xe4\x7f\x52\x18\x57\xe4\xf3\x71\x33\xf9\x05\x55\x73\xee\xf3\x71\x33\xf9\xef\x54\x69\x21\xa7\xd5\x8c\xfa\x63\xf3\xa4\x5a\x42\x46\xf3\x71\x33\xf9\x99\xe0\xfa\x3f\x5c\xcc\xb5\x58\x7a\x6e\x99\x46\x25\x44\x75\x70\xcb\x2f\x5a\x74\xc2\xea\x4c\xe8\x73\x6e\x82\xc4\x2a\x55\x7f\x5e\x99\xb6\x54\xb1\xb0\xd4\x34\x62\x50\x79\xae\xca\xdb\xbe\xf1\xeb\x72\xa1\xda\x64\x8c\xb5\xba\x61\x79\xbe\xf2\x7d\x74\x29\x90\x49\xd7\x68\x20\x24\x92\x80\x89\x0d\x61\xe4\xfb\xfd\x35\x86\x1b\xeb\x8f\xe5\x43\xe8\xa8\xc2\x95\x66\x12\x7c\xcb\x70\x3e\xf2\x63\x21\xe9\x77\xc1\x35\x66\x9e\x8d\x40\xf3\x72\x35\x6d\xce\x79\x65\x6c\x8d\x95\xcf\xa8\xd2\x4d\x13\x50\x91\xb7\xfb\xdd\x90\xd1\x36\x12\xa3\xeb\x95\xd9\x73\x4a\x20\x48\x0b\xf4\x00\x90\x22\x53\xfb\x11\x83\x11\xb0\x5f\xd7\x55\x5e\x91\xb0\x0e\x8b\x6a\x48\xea\x6a\x62\xe5\x47\x31\x65\x44\x02\xaf\xbd\xc6\x8c\x89\xb1\x1f\x8b\x11\xc8\x36\x1d\xac\x14\x5c\xd6\x9a\xd7\x0b\x43\x5d\x50\xfe\xd0\xf1\x36\xd9\x84\x3f\x78\xcb\x49\x16\x6f\x63\xbf\xc9\xb6\x15\xe2\x6d\xd8\x50\x3d\xf8\xb1\x9c\xfe\x21\xc8\xe6\x68\x70\x36\x9d\xd7\x9f\xeb\x1b\xda\x34\x8c\xb5\xe1\x18\x02\xa1\xba\x51\xe1\x4b\x18\x1b\x45\xb7\x78\xbb\x06\xb8\x31\x6a\x77\xc2\xf9\x8c\xb8\x56\xf2\xc3\x53\x60\xc5\x5a\xa7\xea\x24\x2c\x7b\xba\x20\x12\x49\xa8\xa2\x58\x30\xf6\xbd\xa8\x0e\x8d\xa8\xaf\x45\x26\x23\x78\x1c\xf0\x95\x32\xf1\x3c\x1a\xbc\x6e\x82\x58\x94\xac\xec\x8e\x51\x15\x1b\x89\x6e\x61\xea\x5b\x94\xe7\xea\x5b\x31\x11\x08\xf2\x5d\x90\xde\xf2\x52\x92\x9b\x0c\x1b\x5a\x4e\x8c\xbf\x3d\x8a\x2d\x77\x84\xfb\x42\x01\x17\x4b\xe7\x40\xd8\x17\x12\xed\x07\xe7\xea\x42\x44\x0f\x40\x0e\xec\xf8\x0b\x8f\xe4\x34\xd5\xe6\xf1\xc0\x45\xde\x73\xaf\xd1\xf6\x50\x82\x02\x5d\x11\x4a\x65\x34\xd7\x30\xa3\xd9\xec\x0c\xec\x78\x01\xab\xfc\x98\xe7\xc0\x49\x91\x66\x1d\x8d\xfe\x74\xb4\x4c\x44\x0f\x2b\x50\x0b\x53\xa3\xd9\xec\x96\x9b\xaf\x0b\x98\x17\xf6\xe9\x25\x30\x86\xb5\x2a\x13\xc6\x45\x17\xd6\x98\x52\xca\x2e\xed\x31\x10\x9c\x02\xee\xe9\xc6\x54\xc0\x06\x67\xa0\xb4\xcc\xa2\xd2\xff\xd7\xc0\x06\x3e\x29\x5f\xfd\x50\xc7\x82\xc4\x0a\x0a\x10\x5f\xcc\xf0\xf9\x97\x72\x37\xcc\x58\x5b\x43\x53\x08\x7b\xe9\x8e\xc7\xc2\x1d\x53\x1d\x2f\xed\x15\x16\xa4\x0a\x18\x44\x1a\xc8\x5c\x29\xe7\x16\x69\x29\x28\x47\x14\xc6\x1e\x6a\x0a\x49\x23\xf9\x85\xbb\xa3\x96\x88\x68\x31\xf1\x46\x5d\x4c\x13\xde\xb8\xba\x4e\x33\x29\x81\x6b\x07\x6d\xb6\x07\x53\x9e\x23\x89\xf9\x10\xcc\x36\x21\x02\xae\xd9\xd4\x94\x75\x20\x4f\x4f\xc4\x4d\x91\x3f\xd7\x36\xa8\xf4\xec\xdb\xb1\x63\xf4\xff\xa0\xc8\x7f\x7a\x69\x5b\x4f\xd6\x3b\xac\xb3\xbf\x41\x91\x68\xc6\xd6\x14\x9f\x35\xc8\xfd\xae\x4a\x31\x2f\x32\x2f\x1e\x81\x89\xad\x7f\x67\x5a\x0b\x6e\x0f\x2a\x52\xcc\xfb\x0e\x08\x5c\x9a\x83\xff\x8f\xa6\xe0\xef\x61\xcb\x2d\xcb\x27\xcf\x8d\x7a\x0e\xa1\x5d\x3b\xc9\xd9\xa5\x84\xcc\x8b\x42\x8d\x4f\x6b\x51\x70\x74\x64\xc4\x00\xcb\xaf\x8c\x78\xfd\x53\x33\x42\x44\x70\x97\xd2\xfa\xa4\x28\x7b\x82\x32\x4b\x79\xdf\x1e\x72\x34\xc5\x82\x61\xfd\x3c\x2e\x76\xd0\xa3\xb6\xbb\xdb\x41\x8f\xd6\xed\x7b\x73\x1c\x9b\xf1\x63\x62\xd9\xae\xbb\x86\x33\xa4\xcd\x05\xa0\x1b\x12\x3a\xda\x70\xac\xb5\x76\x80\x8d\xaa\x33\x2d\x83\x73\x2c\x71\xba\xa9\x88\xbb\xee\x84\xe7\x8c\x52\x53\xee\x5a\xfc\xa2\x61\xa2\xb1\x04\xdc\x5e\xdc\x70\xa6\xc5\x40\x44\x99\x6a\x27\x4b\x19\x8e\x20\x16\x8c\x80\xec\x79\xb7\x0a\x50\x75\x5e\x88\xb4\x40\x63\x49\x35\xa0\xa9\xc8\x24\xe2\x42\xc3\x2b\x74\x09\xe3\x13\xf3\x8c\x22\x6c\xfa\x38\xbb\x57\x5d\x7c\x47\xe3\x18\xb8\xfd\x8c\x25\xd8\x25\x85\xf6\x6b\x0e\x47\x7e\xbf\xda\xdf\x1e\x04\x5e\x3b\x2c\x63\x87\x4c\x81\x3c\xe7\x69\xa6\x5b\x68\xed\xb9\xd6\x15\x1e\x2f\xee\x0f\x4a\xe3\x34\x9d\x1a\x6e\x70\x2d\x6a\x73\x2f\xaa\x7b\x46\x02\x27\x20\xa1\xd1\x3d\x9b\x8f\x8a\x5b\x5c\xa9\xb4\x14\x4b\xf7\xa7\x1b\xa9\x4c\xcf\x05\x8e\x7b\xed\xe0\x4a\x64\xf6\x74\xcc\x78\x04\x65\x06\xaf\xd2\x42\x90\x57\xdb\x5a\xa1\xad\x42\xba\x61\x2b\xda\x56\x0b\xa2\x8d\x37\x01\xad\xe9\x29\xb8\x2a\x8d\xdd\x4a\xec\x2a\xb5\xf1\xf6\xf5\x45\xa5\x2e\xdf\x4b\xb4\x98\x36\xee\x2c\xb6\xc3\x71\xa7\xcd\x09\xad\x1d\x6b\x21\xba\xe8\xd5\xf7\xe8\x1b\xb4\x07\xe8\xa4\x87\x82\x3f\x41\x2a\x2a\xb8\x72\xed\xd7\xed\x95\x66\xcf\x33\x75\xc6\xb7\xe3\x13\xc4\x05\x87\xcf\x2e\x47\x6a\x4b\xa9\x7e\x6f\x69\xdf\xf5\xeb\xa8\xc0\xd1\xcb\xf3\x3d\x30\x65\xc1\x6d\xbb\x65\xfe\xfe\xc9\xef\x54\xfa\xb9\xf8\x77\x67\x0c\x46\x9f\x35\x0c\x55\xbd\xfc\x41\x18\x24\x5e\x37\xc3\x15\x7e\x11\x2b\xe4\x39\xe5\x04\x26\x68\x6f\xee\xff\x1b\x98\x68\xb4\x47\x67\xb3\x82\xc5\x7e\x9e\xd3\x01\x62\x1a\xed\xaf\x12\x9e\xc6\x26\x84\xae\xb3\x44\xa1\x3d\x7a\x80\x0e\x67\xb3\xa2\x1c\x97\x81\x61\x7f\x02\x71\x62\xf3\x60\xd5\x07\x6e\xf8\x3e\x94\x60\xb6\xc3\xff\x2a\x2b\xf0\x3a\x9c\x25\x29\x26\x77\xdb\x9a\x7e\xe0\xb4\xbf\x6b\x29\xea\xa8\x7d\x67\xe7\xba\x76\x9d\x1a\xd7\xda\xde\x78\xcf\xaa\x67\xd6\x1c\x83\x04\xb8\xb6\x2b\xcf\x30\x39\xd7\x90\xa8\xad\x7b\x51\x13\x25\xd5\xcc\xad\x12\xdb\x5a\x37\x57\xfd\x56\x2f\x26\xdb\x1a\x0e\x7c\xc7\xa0\x72\xae\xfd\x7d\xe4\x49\xe7\xf0\xf0\x1f\xed\xe9\xa0\xab\xb7\x55\xac\xae\x8e\xfb\x67\x22\xca\x12\x7b\x4e\xa1\x63\x07\xf2\xf2\x54\xc3\xfe\x4e\xc9\x71\xca\x65\x96\xd8\x0b\x6a\xe5\x48\x7f\x81\x95\x46\xc5\xf9\xc6\xd6\x19\xdd\x70\x8b\x92\x55\x32\x5e\x58\xfb\x0b\xd7\x92\xc2\x96\x54\xec\x62\x3b\xb2\xd2\x55\x97\xf7\xc4\xc5\x09\x57\xbf\xf6\xa6\x68\x92\x35\x71\xe0\x98\xe7\xc1\x05\xf0\xa1\x8e\x6d\x27\xe5\x38\xe3\x32\x4b\x22\xbb\x92\xd5\x63\x66\x19\x33\x1b\x2b\xdf\xd0\x04\x1c\xe6\x39\x58\x7a\xfb\x86\x26\xb4\x81\xbc\x3d\x2f\xac\x4f\x5c\x6f\x1a\x57\xdf\x75\xc3\xf2\xde\x7d\xfe\x9b\x8a\x3b\x41\xa6\xfd\x9f\x7f\xea\x86\xe5\xaf\x9c\xff\x17\x00\x00\xff\xff\xba\x11\x78\xdf\xff\x2c\x00\x00") +var _templatesIndexTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x5a\xdd\x6f\xdb\x38\x12\x7f\x5f\x60\xff\x07\x56\xcd\xdd\x26\xb8\x4a\x8a\xd3\x36\x6d\x53\xdb\x0b\x5c\xd2\xc5\x06\x97\x4d\x8b\x7c\x2c\x70\x8f\x8c\x38\xb6\x98\x50\xa4\x96\xa4\xfc\x51\xc3\xff\xfb\x81\x94\x64\x4b\xb6\x25\x33\x4e\x52\xec\xe5\xa1\x25\xa5\xe1\xcc\x6f\x3e\x38\x33\xa4\xdc\x7d\x75\xf6\xf5\xf4\xe6\xbf\xdf\xbe\xa0\x58\x27\xac\xff\xf3\x4f\xdd\xe2\x7f\x84\x10\xea\xc6\x80\x49\x31\xb6\xf3\x04\x34\x46\xb1\xd6\xa9\x0f\x7f\x65\x74\xd4\xf3\x22\xc1\x35\x70\xed\xeb\x69\x0a\x1e\x2a\x66\x3d\x4f\xc3\x44\x87\x86\xd1\x67\x14\xc5\x58\x2a\xd0\xbd\xdb\x9b\xdf\xfc\x8f\xde\x1a\x33\x8e\x13\xe8\x79\x23\x0a\xe3\x54\x48\x5d\x61\x31\xa6\x44\xc7\x3d\x02\x23\x1a\x81\x6f\x27\x6f\x10\xe5\x54\x53\xcc\x7c\x15\x61\x06\xbd\x4e\x8d\x1b\xa3\xfc\x01\x49\x60\x3d\x0f\xa7\x29\x03\x5f\x8b\x2c\x8a\x7d\x1a\x09\xee\x21\x45\xbf\x83\xea\x79\xef\x3f\x4c\xde\x7f\xf0\x50\x2c\x61\xd0\x0b\x95\xc6\x9a\x46\x21\x4d\x86\x61\x24\xc6\x53\x11\xe6\xcb\xcc\x02\xdf\x12\x06\x29\x1f\x3e\x52\xc0\xf1\xe1\xe4\xf8\xb0\x51\xc0\x46\x51\x76\xc9\x0e\xa2\x3e\x1c\x4d\x3e\x1c\xb9\xe8\x62\x09\x77\x11\x70\x3c\xf9\x70\xec\x24\xc0\x10\xee\x20\xa0\xd3\x79\x37\xe9\x74\xde\xb9\x88\x28\x48\x77\x11\x72\x74\x38\xe9\x1c\x35\xfb\xa4\x2a\x24\x27\xdd\x45\xc8\xbb\x77\x93\xce\x3b\x37\x4d\x72\xd2\x5d\x84\xbc\x3f\x9a\x74\xde\x3b\xb9\xbc\x20\xdd\x45\xc8\xc7\xc3\x49\xe7\xa3\x9b\xb9\x72\xd2\x66\x21\x39\x63\x93\x18\x7a\x1e\x4d\xf0\x10\xc2\x94\x0f\x97\x92\x3e\x1d\x4d\x3a\x9f\x5a\xd4\xe1\x44\x0a\x4a\x0a\x59\x39\xf1\xae\xb2\xde\x1e\x4d\xde\x36\x4b\x1a\xe0\x91\x15\x62\xa9\x76\x15\xf1\xe9\x78\xf2\xa9\x79\xb7\x94\x22\x2c\xd5\xce\x16\x3b\x9e\x74\xb6\x8b\xb0\x54\xcd\x22\x12\xcc\xe9\x00\x94\x6e\xe4\x53\x12\x04\xf7\x4a\xf0\x86\x6c\x9d\x28\x13\x07\x34\xc2\x9a\x0a\xee\xdf\x50\x06\xa7\x82\x09\x59\x49\xde\xaf\x07\x83\x41\x53\xae\x5f\x5f\x7d\x6e\x74\xad\xac\x0e\x13\xb5\xb6\x5b\x9a\xb8\xe9\x18\x12\xf0\xa3\x06\xf9\xcb\x35\xb3\x19\xa2\x03\x84\x39\x41\xc1\x69\xa6\xb4\x48\x4e\xaf\xaf\x51\x70\x05\x98\x7c\xc3\x43\x40\xf3\xf9\x92\x74\xc5\x64\x4a\x4f\x19\xa8\x18\x40\x97\xbe\xb1\xd5\x2d\x52\xaa\x30\xa2\x57\x5a\x31\x52\x2a\x8c\x2c\xf3\xc0\xbc\xed\xd7\xa4\x03\x53\xcf\x28\x66\x48\x75\x9c\xdd\xf9\x09\x96\x0f\x44\x8c\xf9\xaa\xbc\x27\xf1\x4e\x80\x67\xca\x4f\xe8\xf3\x72\xbd\xc3\x0a\x1e\xc9\x74\x9d\x49\x4c\x87\x31\xa3\xc3\x58\x3f\x89\x0b\x81\x01\xce\xd8\x66\x1e\x2a\x92\x34\xd5\x55\x7d\xee\xf1\x08\xe7\x4f\x3d\xa4\x64\xb4\x64\x75\xaf\xc2\xfb\xbf\x32\x90\x53\xbf\x13\x7c\x0c\xde\x06\xf7\xca\xeb\x77\xc3\x9c\xb4\x81\xed\xea\xfa\xa5\x3e\xc6\x32\x0e\x0c\x1c\x71\x2d\xf9\xa6\x38\x7a\x68\x62\x6c\xa2\x92\x13\x1b\x94\x95\xcd\xa5\xa9\x66\xd0\x9f\xcd\x50\x50\xec\x8c\x6e\x98\x3f\xaa\x51\x55\xf1\xfc\xb2\x82\xe7\x97\x15\xf0\x31\xbb\x57\x81\xe9\xdd\x7e\x2f\x61\x51\x3e\xfc\xca\x2f\x04\x26\xfb\x07\x9f\xeb\xb4\x63\xca\x89\x18\x07\x36\x19\xa1\x1e\x9a\xd5\xdf\x9a\x3f\x02\x77\x22\xe3\x11\xfc\x71\x7d\x62\x34\x08\xce\x8a\x39\x9a\xcf\xdf\xac\x53\x33\xac\xf4\x6f\xa0\xa3\x38\x27\xbe\xe5\x74\x72\x43\x93\x06\xe2\x14\x0f\xe1\x12\x27\x70\x82\xbc\x8a\xfe\xde\x0a\x65\x65\x0f\x6f\x30\xea\x23\x3d\x65\x15\xdd\xe4\xa0\x6e\x58\x69\xbe\xbb\x77\x82\x4c\x11\x25\x3d\x2f\xc5\xc4\x43\x11\xc3\x4a\xf5\xbc\xd5\xec\x16\x7c\x21\x54\x17\xa0\xd1\x62\x5c\xf1\xf2\x0a\xf9\x9f\x14\xc6\x25\xf9\x62\xdc\x4c\x7e\x41\xd5\x82\xfb\x62\xdc\x4c\xfe\x3b\x55\x5a\xc8\x69\xb9\xa2\x3a\x6d\x5e\x54\x49\xc8\x68\x31\x6e\x26\x3f\x13\x5c\xff\x87\x8b\x85\x16\xb5\x79\xcb\x32\x2a\x21\xaa\x82\xab\x3f\x68\xd1\x09\xab\x33\xa1\xcf\xb9\x09\x12\xab\x54\x75\xbe\xb2\xac\x56\xb1\xb0\xd4\x34\x62\x50\x7a\xae\xcc\xdb\xbe\xf1\x6b\xbd\x50\x6d\x32\xc6\x5a\xdd\xb0\x3c\x5f\xf9\x3e\xba\x14\xc8\xa4\x6b\x34\x10\x12\x49\xc0\xc4\x86\x30\xf2\xfd\xfe\x1a\xc3\x8d\xf5\xc7\xf2\x21\x74\x54\xe2\x4a\x33\x09\xbe\x65\xb8\x18\xf9\xb1\x90\xf4\xbb\xe0\x1a\x33\xcf\x46\xa0\x79\xb8\x9a\x36\x17\xbc\x32\xb6\xc6\xca\x67\x54\xe9\xa6\x05\x28\xcf\xdb\xfd\x6e\xc8\x68\x1b\x89\xd1\xf5\xca\x9c\x39\x25\x10\xa4\x05\x7a\x00\x48\x91\xa9\xfd\x88\xc1\x08\xd8\xaf\xeb\x2a\xaf\x48\x58\x87\x45\x35\x24\x55\x35\xb1\xf2\xa3\x98\x32\x22\x81\x57\x1e\x63\xc6\xc4\xd8\x8f\xc5\x08\x64\x9b\x0e\x56\x0a\x2e\x6a\xcd\xeb\xa5\xa1\x2e\x28\x7f\xe8\x78\x9b\x6c\xc2\x1f\xbc\x7a\x92\xc5\xdb\xd8\x6f\xb2\x6d\x89\x78\x1b\x36\x54\x0d\x7e\x2c\xa7\x7f\x08\xb2\x39\x1a\x9c\x4d\xe7\xf5\x17\xfa\x86\x36\x0d\x63\x6d\x38\x86\x40\xa8\x6e\x54\xf8\x12\xc6\x46\xd1\x2d\xde\xae\x00\x6e\x8c\xda\x9d\x70\x3e\x23\xae\x95\xfc\xf0\x14\x58\xb1\xd6\xa9\x3a\x09\x8b\x9e\x2e\x88\x44\x12\xaa\x28\x16\x8c\x7d\xcf\xab\x43\x23\xea\x6b\x91\xc9\x08\x1e\x07\x7c\xa5\x4c\x3c\x8f\x06\xaf\x9b\x20\xe6\x25\x2b\xbb\x63\x54\xc5\x46\xa2\x5b\x98\xfa\x16\xe5\xb9\xfa\x96\x2f\x04\x82\x7c\x17\xa4\xb7\xbc\x90\xe4\x26\xc3\x86\x96\x13\xe3\x6f\x8f\x62\xcb\x1d\xe1\xbe\x50\xc0\xc5\xd2\x39\x10\xf6\x85\x44\xfb\xc1\xb9\xba\x10\xd1\x03\x90\x03\x3b\xfe\xc2\x23\x39\x4d\xb5\x99\x1e\xb8\xc8\x7b\xee\x3d\xda\x1e\x4a\x90\xa3\xcb\x43\xa9\x88\xe6\x0a\x66\x34\x9f\x9f\x81\x1d\x2f\x61\x15\x2f\x67\x33\xe0\x24\x4f\xb3\x8e\x46\x7f\x3a\x5a\x26\xa2\x87\x15\xa8\xb9\xa9\xd1\x7c\x7e\xcb\xcd\xdb\x25\xcc\x0b\x3b\x7b\x09\x8c\x61\xa5\xca\x84\x71\xde\x85\x35\xa6\x94\xa2\x4b\x7b\x0c\x04\xa7\x80\x7b\xba\x31\x15\xb0\xc1\x19\x28\x2d\xb3\xa8\xf0\xff\x35\xb0\x81\x4f\x8a\x47\x3f\xd4\xb1\x20\xb1\x82\x1c\xc4\x17\x33\x7c\xfe\xad\xdc\x0d\x33\xd6\xd6\xd0\xe4\xc2\x5e\xba\xe3\xb1\x70\xc7\x54\xc7\xb5\xb3\xc2\x92\x54\x01\x83\x48\x03\x59\x28\xe5\xdc\x22\xd5\x82\x72\x44\x61\xec\xa1\xa6\x90\x34\x92\x5f\xb8\x3b\x6a\x89\x88\x16\x13\x6f\xd4\xc5\x34\xe1\x8d\xbb\xeb\x34\x93\x12\xb8\x76\xd0\x66\x7b\x30\xcd\x66\x48\x62\x3e\x04\x73\x4c\x88\x80\x6b\x36\x35\x65\x1d\xc8\xd3\x13\x71\x53\xe4\x2f\xb4\x0d\x4a\x3d\xfb\x76\xec\x18\xfd\x3f\x28\xf2\x9f\x5e\xda\xd6\x93\xf5\x0e\xfb\xec\x6f\x50\x24\x9a\xb1\x35\xc5\x67\x05\x72\xbf\xab\x52\xcc\xf3\xcc\x8b\x47\x60\x62\xeb\xdf\x99\xd6\x82\xdb\x8b\x8a\x14\xf3\xbe\x03\x02\x97\xe6\xe0\xff\xa3\x29\xf8\x7b\xd8\x72\xcb\xf6\x99\xcd\x8c\x7a\x0e\xa1\x5d\xb9\xc9\xd9\xa5\x84\x2c\x8a\x42\x85\x4f\x6b\x51\x70\x74\x64\xc4\x00\xcb\xaf\x8c\x78\xfd\x53\x33\x42\x44\x70\x97\xd2\xfa\xa4\x28\x7b\x82\x32\xb5\xbc\x6f\x2f\x39\x9a\x62\xc1\xb0\x7e\x1e\x17\x3b\xe8\x51\x39\xdd\xed\xa0\x47\xeb\xf1\xbd\x39\x8e\xcd\xf8\x31\xb1\x6c\xf7\x5d\xc3\x1d\xd2\xe6\x02\xd0\x0d\x09\x1d\x6d\xb8\xd6\x5a\xbb\xc0\x46\xe5\x9d\x96\xc1\x39\x96\x38\xdd\x54\xc4\x5d\x4f\xc2\x0b\x46\xa9\x29\x77\x2d\x7e\xd1\x30\xd1\x58\x02\x6e\x2f\x6e\x38\xd3\x62\x20\xa2\x4c\xb5\x93\xa5\x0c\x47\x10\x0b\x46\x40\xf6\xbc\x5b\x05\xa8\xbc\x2f\x44\x5a\xa0\xb1\xa4\x1a\xd0\x54\x64\x12\x71\xa1\xe1\x15\xba\x84\xf1\x89\x99\xa3\x08\x9b\x3e\xce\x9e\x55\x97\xef\xd1\x38\x06\x6e\x5f\x63\x09\x76\x4b\xa1\xfd\x8a\xc3\x91\xdf\x2f\xcf\xb7\x07\x81\xd7\x0e\xcb\xd8\x21\x53\x20\xcf\x79\x9a\xe9\x16\x5a\x7b\xaf\x75\x85\xc7\xcb\xef\x07\x85\x71\x9a\x6e\x0d\x37\xb8\x16\xb5\xb9\x17\x55\x3d\x23\x81\x13\x90\xd0\xe8\x9e\xcd\x57\xc5\x2d\xae\x54\x5a\x8a\xda\xf7\xd3\x8d\x54\xa6\xe7\x02\xc7\xb3\x76\x70\x25\x32\x7b\x3b\x66\x3c\x82\x32\x83\x57\x69\x21\xc8\xab\x6d\xad\xd0\x56\x21\xdd\xb0\x15\x6d\xab\x05\xd1\xc6\x2f\x01\xad\xe9\x29\xb8\x2a\x8c\xdd\x4a\xec\x2a\xb5\xf1\xeb\xeb\x8b\x4a\xad\x7f\x97\x68\x31\x6d\xdc\x59\x1e\x87\xe3\x4e\x9b\x13\x5a\x3b\xd6\x5c\x74\xde\xab\xef\xd1\x37\x68\x0f\xd0\x49\x0f\x05\x7f\x82\x54\x54\x70\xe5\xda\xaf\xdb\x4f\x9a\x3d\xcf\xd4\x19\xdf\x8e\x4f\x10\x17\x1c\x3e\xbb\x5c\xa9\xd5\x52\xfd\x5e\xed\xdc\xf5\xeb\x28\xc7\xd1\x9b\xcd\xf6\xc0\x94\x05\xb7\xe3\x96\xf9\xfb\x27\xbf\x53\xe9\xe7\xfc\xdf\x9d\x31\x18\x7d\xd6\x30\x94\xf5\xf2\x07\x61\x90\x78\xdd\x0c\x57\xf8\x45\xac\x30\x9b\x51\x4e\x60\x82\xf6\x16\xfe\xbf\x81\x89\x46\x7b\x74\x3e\xcf\x59\xec\xcf\x66\x74\x80\x98\x46\xfb\xab\x84\xa7\xb1\x09\xa1\xeb\x2c\x51\x68\x8f\x1e\xa0\xc3\xf9\x3c\x2f\xc7\x45\x60\xd8\x9f\x40\x9c\xd8\x3c\x58\xf6\x81\x1b\xde\x0f\x25\x98\xe3\xf0\xbf\x8a\x0a\xbc\x0e\xa7\x26\xc5\xe4\x6e\x5b\xd3\x0f\x9c\xce\x77\x2d\x45\x1d\xb5\x9f\xec\x5c\xf7\xae\x53\xe3\x5a\x39\x1b\xef\x59\xf5\xcc\x9e\x63\x90\x00\xd7\x76\xe7\x19\x26\xe7\x1a\x12\xb5\xf5\x2c\x6a\xa2\xa4\x5c\xb9\x55\x62\x5b\xeb\xe6\xaa\xdf\xea\x87\xc9\xb6\x86\x03\xdf\x31\x28\x9d\x6b\x7f\x1f\x79\xd2\x39\x3c\xfc\x47\x7b\x3a\xe8\xea\x6d\x15\xab\xab\xe3\xfe\x99\x88\xb2\xc4\xde\x53\xe8\xd8\x81\xbc\xb8\xd5\xb0\xbf\x53\x72\x5c\x72\x99\x25\xf6\x03\xb5\x72\xa4\xbf\xc0\x4a\xa3\xfc\x7e\x63\xeb\x8a\x6e\xb8\x45\xc9\x32\x19\x2f\xad\xfd\x85\x6b\x49\x61\x4b\x2a\x76\xb1\x1d\x59\xe9\xaa\x8b\xef\xc4\xf9\x0d\x57\xbf\xf2\x24\x6f\x92\x35\x71\xe0\x38\x9b\x05\x17\xc0\x87\x3a\xb6\x9d\x94\xe3\x8a\xcb\x2c\x89\xec\x4e\x56\x8f\x59\x65\xcc\x6c\xac\x7c\x43\x13\x70\x58\xe7\x60\xe9\xed\x07\x9a\xd0\x06\xf2\xf6\xbc\xb0\xbe\xb0\xb1\x69\x34\x3b\xe9\x34\xa6\xcc\xf6\x0b\xc6\xe0\xcd\x3b\xbd\xab\x20\xd2\x54\xf0\xf2\xc4\x53\x5f\xd6\xda\xf1\xc7\x47\xfd\x6b\x00\x84\x99\x12\xdd\x30\x3e\xda\xb9\x3f\x58\x5e\xe4\x39\x62\x5e\xb0\x65\x74\x25\xdc\xea\xa1\x86\x9c\x6e\x36\x9c\x7c\xd4\xa8\x40\x37\x2c\x0c\xd8\xde\xbe\xd7\x97\xd4\x1d\xd7\x0d\x8b\x1f\x47\x2c\x7e\xf8\x72\x27\xc8\xb4\xff\xf3\x4f\xdd\xb0\xf8\x29\xfa\xff\x02\x00\x00\xff\xff\x14\xe8\xbc\x79\xa4\x2e\x00\x00") func templatesIndexTmplBytes() ([]byte, error) { return bindataRead( @@ -1007,7 +1007,7 @@ func templatesIndexTmpl() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "templates/index.tmpl", size: 11519, mode: os.FileMode(493), modTime: time.Unix(1517377525, 0)} + info := bindataFileInfo{name: "templates/index.tmpl", size: 11940, mode: os.FileMode(493), modTime: time.Unix(1517377558, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/handlers.go b/handlers.go index c699b2d..a80f1e3 100755 --- a/handlers.go +++ b/handlers.go @@ -369,6 +369,7 @@ func handlePageRequest(c *gin.Context) { "DiaryMode": diaryMode, "Date": time.Now().Format("2006-01-02"), "UnixTime": time.Now().Unix(), + "ChildPageNames": p.ChildPageNames(), }) } diff --git a/page.go b/page.go index 0023597..3d6b877 100755 --- a/page.go +++ b/page.go @@ -5,6 +5,7 @@ import ( "io/ioutil" "os" "path" + "path/filepath" "regexp" "sort" "strings" @@ -128,6 +129,26 @@ func (p *Page) Save() error { return ioutil.WriteFile(path.Join(pathToData, encodeToBase32(strings.ToLower(p.Name))+".json"), bJSON, 0644) } +func (p *Page) ChildPageNames() []string { + prefix := strings.ToLower(p.Name + ": ") + files, err := filepath.Glob(path.Join(pathToData, "*")) + if err != nil { + panic("Filepath pattern cannot be malformed") + } + + result := []string{} + for i := range files { + basename := filepath.Base(files[i]) + if strings.HasSuffix(basename, ".json") { + cname, err := decodeFromBase32(basename[:len(basename)-len(".json")]) + if err == nil && strings.HasPrefix(strings.ToLower(cname), prefix) { + result = append(result, cname) + } + } + } + return result +} + func (p *Page) IsNew() bool { return !exists(path.Join(pathToData, encodeToBase32(strings.ToLower(p.Name))+".json")) } diff --git a/page_test.go b/page_test.go index 2a26a77..06f0ab2 100755 --- a/page_test.go +++ b/page_test.go @@ -55,4 +55,18 @@ func TestGeneral(t *testing.T) { t.Errorf("Did not render: '%s'", p2.RenderedPage) } + p3 := Open("testpage: childpage") + err = p3.Update("**child content**") + if err != nil { + t.Error(err) + } + + children := p.ChildPageNames() + if len(children) != 1 { + t.Errorf("Expected 1 child page to be found by '%s', got %d", encodeToBase32FileGlob(p.Name+": ")+"*", len(children)) + return + } + if children[0] != "testpage: childpage" { + t.Errorf("Expected child page %s to be found (got %s)", "testpage: childpage", children[0]) + } } diff --git a/static/css/default.css b/static/css/default.css index e70b07d..82a94d4 100644 --- a/static/css/default.css +++ b/static/css/default.css @@ -64,7 +64,7 @@ body#pad.HasDotInName textarea { } @media (min-width: 5em) { - div#menu, div#rendered, body#pad textarea { + div#menu, div#rendered, .ChildPageNames, body#pad textarea { padding-left: 2%; padding-right: 2%; } @@ -75,26 +75,54 @@ body#pad.HasDotInName textarea { padding-left:1.2em; padding-right:em; } + .ChildPageNames ul { + grid-template-columns: repeat(1, 1fr); + } } @media (min-width: 50em) { - div#menu, div#rendered, body#pad textarea { + div#menu, div#rendered, .ChildPageNames, body#pad textarea { padding-left: 10%; padding-right: 10%; } .pure-menu-disabled, .pure-menu-heading, .pure-menu-link { padding: .5em 1em; } + .ChildPageNames ul { + grid-template-columns: repeat(2, 1fr); + } } @media (min-width: 70em) { - div#menu, div#rendered, body#pad textarea { + div#menu, div#rendered, .ChildPageNames, body#pad textarea { padding-left: 15%; padding-right: 15%; } + .ChildPageNames ul { + grid-template-columns: repeat(3, 1fr); + } } @media (min-width: 100em) { - div#menu, div#rendered, body#pad textarea { + div#menu, div#rendered, .ChildPageNames, body#pad textarea { padding-left: 20%; padding-right: 20%; } + .ChildPageNames ul { + grid-template-columns: repeat(4, 1fr); + } +} + +.ChildPageNames ul { + margin: 0.3em 0 0 1.6em; + padding: 0; + display: grid; + grid-gap: 0.5rem; +} + +.ChildPageNames li { + margin: 0; +} + +.ChildPageNames a { + color: #0645ad; + background: none; } diff --git a/templates/index.tmpl b/templates/index.tmpl index 4db1ce7..2ea4126 100755 --- a/templates/index.tmpl +++ b/templates/index.tmpl @@ -197,6 +197,16 @@ {{ end }} + {{ if .ChildPageNames }} +
+

See also

+ +
+ {{ end }}