Better mobile formatting

This commit is contained in:
Brian Buller 2018-06-18 08:49:15 -05:00
parent 4591d3c827
commit 88ce4097b6
13 changed files with 259 additions and 207 deletions

View File

@ -141,9 +141,15 @@ func handleAdminVotes(w http.ResponseWriter, req *http.Request, page *pageData)
Results []Ranking Results []Ranking
} }
vpd := new(votePageData) vpd := new(votePageData)
now := time.Now()
dayThresh := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location())
for i := range m.jam.Votes { for i := range m.jam.Votes {
v := new(vpdVote) v := new(vpdVote)
v.Timestamp = m.jam.Votes[i].Timestamp.Format(time.RFC3339) if m.jam.Votes[i].Timestamp.Before(dayThresh) {
v.Timestamp = m.jam.Votes[i].Timestamp.Format("Jan _2 15:04")
} else {
v.Timestamp = m.jam.Votes[i].Timestamp.Format(time.Kitchen)
}
v.ClientId = m.jam.Votes[i].ClientId v.ClientId = m.jam.Votes[i].ClientId
for _, choice := range m.jam.Votes[i].Choices { for _, choice := range m.jam.Votes[i].Choices {
for _, fndTm := range m.jam.Teams { for _, fndTm := range m.jam.Teams {

287
assets.go
View File

@ -190,43 +190,46 @@ var _escData = map[string]*_escFile{
"/assets/css/admin.css": { "/assets/css/admin.css": {
local: "assets/css/admin.css", local: "assets/css/admin.css",
size: 291, size: 252,
modtime: 1506689947, modtime: 1529324817,
compressed: ` compressed: `
H4sIAAAJbogA/2TPwW7DIAwG4DtPYalnqnbTDkmueRECjFkDjAxMlaa8+yCJom29/nz4tw1+XTXFYmOB H4sIAAAJbogA/2SOzarDIBCF9z7FQNaGm3u5iyTbvIhRa4eqI6OWQMm7Nz9QKNl+8805x+CznakUCjIn
bwEQFDuM0tv3MsL97ZYek1iF6GyhUijInJS2v+2ed31gDO5aPmpYokK/SV05E4+QCFsVnyPZ5upLln0D pS28BEBQ7DDKkw/Q/adlFKsQGFxb7jXMUaE/TF05Ew+QCGOxfFh7JNtcfclSUywKo+XDnomN3ewuLZDJ
hdHyphdiY5u+pwdk8mjgMgzDdL5IVgZrHuG1F7ZU6U/HVKNpg3zvuczzPD1v+HLbPyRlDEZ3XPk//atX o4Gm7/vxc5GsDNY8wN9euFGlH46pRrMF+b2nmaZpvC78/TkfkjIGo5Pe3sqVftureAcAAP//BQCMs/wA
8RMAAP//j2OxNiMBAAA= AAA=
`, `,
}, },
"/assets/css/gjvote.css": { "/assets/css/gjvote.css": {
local: "assets/css/gjvote.css", local: "assets/css/gjvote.css",
size: 4498, size: 5010,
modtime: 1517262141, modtime: 1529328784,
compressed: ` compressed: `
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
AP//znRJ1pITAAA=
`, `,
}, },
@ -321,27 +324,28 @@ H4sIAAAJbogA/wEAAP//AAAAAAAAAAA=
"/assets/js/gjvote.js": { "/assets/js/gjvote.js": {
local: "assets/js/gjvote.js", local: "assets/js/gjvote.js",
size: 3561, size: 3874,
modtime: 1506689947, modtime: 1517841211,
compressed: ` compressed: `
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
`, `,
}, },
@ -11944,68 +11948,69 @@ K5ery4r/BLWa+n4HAAD//wwzWIlKAwAA
"/templates/admin-clients.html": { "/templates/admin-clients.html": {
local: "templates/admin-clients.html", local: "templates/admin-clients.html",
size: 1023, size: 1173,
modtime: 1506689947, modtime: 1529329301,
compressed: ` compressed: `
H4sIAAAJbogA/5RTQavbMAy+91eI0OPSwI7DCYyVQdh4vMPeYUclVhqDYwfHL6OU/vfJSdMlbdPxCg2y H4sIAAAJbogA/5RUwYrbMBC95ysGkUMLdQQ9FsWwNJfQsuyhe+hxEo0TgSwZSesSlv33jqI4jd1smwRi
9En6JH8+nUBVYKyH3S9qWo2e9uhx900rMr6D83kjpOqh1Nh1adS1WFLck/OqRB1lLxZQSuWVNagZNCbV xqN5M8/znv36CqYB5xMsflDbWUy0woSLr9aQSxHe3mZKmx62FmNcitjhlqqeQjJbtKJ+9IBam2S8Q8tF
2BMURAbw3dfsYrAnKRKulG24JemOhtIeC02gZBpdcuPBE137WTdC2ndH8a0ZF9ZJciSh5FxyUbYBENwR BbTHnmBD5ABf0p5TXJxIK8md6hmPJBvp2DrhxhIYvRQnbHXMiPM8H0pJ9xKomobVxgdNgTRsGUtB1DMA
ZbDCT3g3meOxzr477iT1EV6wIZGw5wYwzg75/lHwJ3Yefhj7x0D++gjwdTnyPWDuY3vgF3wX1sIXVh4n xRNR5yj/VApDWG739QNzUpKDSf4RW7qSH6h4Zw+VxbAjUZftwHp1Y/13jAm+Of/LwfrpRszDeHV/MBwf
AC/LoTkQbNUn2PbwJV29KFgbWWZcZdvvwryM417yMeDtLd8/BeSv62GWESPC9IHLb+rg30UD6yScjFzJ nynnTk+q0sbrw1DACw7odgRz8wnmPXxZvisuvLcmfXl7bMk2mfeLzCord3moEPaBmqWQqFvj5ElKySBG
nx2HmRfFFkGBUDuq0ihB2SiTXHSTLCZIJAXlXWXUOtWgO0aZUJOrQqgw/hw+3h4OLCZrOJ4o/uMdn0mw PD+vV4yQmrIZzsp2wbQYDqJWZkg1CA1Wn/Ml+d2O9fWOz6XhP/7FZ/DQ/UxGPCgEH/7Domn+QcPpMQuW
H2ey4EHOWfcfFlX1hMawwPnuZructHSLZf+oKDbCqxlf4Bj9GwAA///E71UP/wMAAA== RU93WeZng3Gt6kZyxxYtv0kfRhw/KtnVVzpdM8oIeBdm/XQXYuQA+EnxQgbgL8F5G5ctB7dO18X54lkO
8rtcvgvl9HcAAAD//w5BhnqVBAAA
`, `,
}, },
"/templates/admin-editteam.html": { "/templates/admin-editteam.html": {
local: "templates/admin-editteam.html", local: "templates/admin-editteam.html",
size: 13682, size: 13866,
modtime: 1516991452, modtime: 1529328971,
compressed: ` compressed: `
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
HKFyNQAA Wq8V5nvM92gN56X/j9WRr8SKc0st0XRRS+lZR1GLP+dnq6B6Q/rfAAAA//87Zk/nKjYAAA==
`, `,
}, },
@ -12030,14 +12035,14 @@ zrZTSnYGAAA=
"/templates/admin-games.html": { "/templates/admin-games.html": {
local: "templates/admin-games.html", local: "templates/admin-games.html",
size: 507, size: 592,
modtime: 1506689947, modtime: 1529329086,
compressed: ` compressed: `
H4sIAAAJbogA/3RRwW6DMAy98xUW4jjofQJOk3brZfsBg98KEiRVkiFNVf99TrJq3dpeome/Z/vZOZ1o H4sIAAAJbogA/3RRQW/zIAy991dYqMcvzf0T5TRpt162P2CKl0QiEAGLFFX97zPQqE3XXdCz3zN+ti8X
/iBjAzXvWI8LB7xwYA149XQ+F63MW7+3dOAVnibeQANgaHRQrbS7yBfaBotHKgg8LKBZujLV1CkuaVzY GL7A+QSHTxoni4neMCEHOEa4XnfSDLM6eehwpAg9zgSayME5EGuNbDO/42/IRioFCbUlGMxRlJqmxALO
+6701mXB8dOh/g/rwTqBg9AIE+DKviBqwwSWiCJ2GaR0/6oTaK9Pu9Poioj+7xJvahzGTzb4X0pRahsz FmM8iuhDFUzfgZpn2GgfDAUycCaXKAi1A5CpJzQZZRwqKGn1zh3gxI9sOboTazfv7NJYDB0JlUd6pVUf
P6PaMFj5yrRu59gcQNX8RNVGz92Da9GtR+m1utqa6LSJhlSmY+RW8Zhc9N6XFlf+/4gvKyS3MBK/ImXz PAu52PsU7xSj0ilnbt1l0t4sleaBA7qOYD/8g/0M/49/LBB+2zaKq/fzIZs/ZEMsk9PGchzRWqH0InWA
GgriffNPZfY7AAD//1NqSJj7AQAA 9qZfpe2k2JV5+PDVuE81G30mLR9xNfGwgY14XUKZl5zJ9y3ZuggG+Wj1/JX9CQAA//9YnNSjUAIAAA==
`, `,
}, },
@ -12057,17 +12062,17 @@ Xo6z3V9nVvnKh0MZ+h0AAP//kX1qvCYDAAA=
"/templates/admin-main.html": { "/templates/admin-main.html": {
local: "templates/admin-main.html", local: "templates/admin-main.html",
size: 1541, size: 1534,
modtime: 1506689947, modtime: 1529324657,
compressed: ` compressed: `
H4sIAAAJbogA/6xTTW/bMAy991dwRoBcJrvtboVjIMiAnfaBrtvOis04QmUpk2QHQdH/PtJygmRN2yDt H4sIAAAJbogA/6xTTW/bMAy991dwRoBcJrvtboVtIMiAnfaBrtvOis3YQmUpk2QHQdH/Psqyg2RN28Dt
xbLIp6dHPiqvVAellt5PktKagCYkxQUAx3mlv+Wn4kc716qEr7bCPKN9TMzbEKwBa0pK3k+StTKVXafa xbLIp6dHPiotRQeF5NZmUZRfAPiAX+mv/pT/aFdSFPBVl5gmtA+JVeucVqBVQcn7LNoKVeptLHXBndAq
ljIoa9Klw8VknMmqUSZr6Gx2OU62l61ahyIyiGDrWqNYKOcD7CXg4QHUAvAvpFEBC4BLeHzcP71yqpFu rg2us3nCy0aopKGzyeU8Gm/ZtAZZYGBOV5VEthbGOjhIwMMDiDXgX4iDAi8ALuHx8fD0xoiGmx1hUZWU
Q1g0FeWS4o9UQZk6zyLibLlXL8qlxAlqr15V+9v+LzbPhu7nH4R4YsZUa7vGCuI5uENHgqX25zoj27B8 i/I/XDihqjQJiMlyr16US4kz1F69qva3/l9smgzdTz8w9sSMhZR6iyWEc3CHhgRzaac6w1tXv9GdBVGc
oztTojjRm+9Gb4DxNGmK5FAhM61o499i166Gsy3blfC6YVOzGTTDTBr2AY+6JwR/n52KwditXIe+1cEL 6c13JXfg8aicIDlUyFIK2ti32LWvYbJl+xJeN2yhdoNmWHLlfcCT7jHmv89OxWDsKNegbaWzrNDKcaHQ
foVSGXTxHS6vi1nrHF92GxHk8/VA7KSpEUbqI4w6uJlAeofNSlNTP8sg4xX7uMDA0CNHHWFl47egHkbB hHdYX+fL1hh/2W1AkM/XA7HhqkKYiY8w6+Amg/gOm42kpn7mjocrDnHOA12PnHWE5Y0dQT2Mgrdc3VPs
W2nuKXbTb0OXfpMN0j6fO8iKLV1sxMXh/67sg+Dh5LJX8BNLNvDIvD41LjnR/4488OP+LeEzg3Q+eeBG pt+6Lv7GG6R9ujKQ5CNdaMTF8f++7KPg8eR6r+AnFt7AE/P61LjoTP878sDO+7eEzwzSdHLnG0XkfcPe
EXnfsPcmr6nBTP6F1/cmbz06Jv/F65EZHZZ/AQAA//8pWoRoBQYAAA== m7yiBnvyL359b/LWovHkv/x6YkaH5V8AAAD//6BFHFz+BQAA
`, `,
}, },
@ -12082,17 +12087,17 @@ H4sIAAAJbogA/wEAAP//AAAAAAAAAAA=
"/templates/admin-teams.html": { "/templates/admin-teams.html": {
local: "templates/admin-teams.html", local: "templates/admin-teams.html",
size: 1090, size: 1248,
modtime: 1506689947, modtime: 1529326977,
compressed: ` compressed: `
H4sIAAAJbogA/5xTwYrcMAy9z1eIMMdmfC8eQ2GhFNo97X6AEms2po4z2E5KWfbfK9tJmxmSlm5Osvyk H4sIAAAJbogA/5xTzW7bMAy+5ykII8c5ug+KgAEFhgFbT+0D0BYTC9OPISkZiqLvPkq2u6R1sWw+kTS/
J708S20maC2GcK6aIcahr8MVW4KWXCRfqQOARDCar6P7pPUTYV8tFdfRU92MXOZgFddhbFsKoYLO0+Vc jz/iJ7U5Q28xpX3ThZyDa9OIPUFPPlNs1AZAIhjNv7P/ovUDoWsWxHiK1HYnhnm4sNt06ntKqYEh0mHf
CdS9cSJyaRCOflRKmqXFBeGC9dWOgbPCKGAOSCRSoDpIwfOpw+srmAu4IcLpifqrxUgPGPGUcAHe3g5p CNTOeJEZmoSnX42SZqE4IBywHe0pcVQYBVwDShEpUG2k4P7U5vkZzAF8yLB7IDdazHSHGXclL8HLy6aM
DfU4QKaADieChshB64mx+k8bsoFyQcTGUt4r19T5/HuxMPgCyFvdh3UzeE2e9I1KsSPUKUqfjH4Jy7FT oe4D1BIw4JmgI/LQR+Jc/YeGbKIKyNhZqnNVTFv918FSiFNCneqt2XYhaoqkr7aUB0JdrPLJHBdzcgd1
j9iTFBzc5b+hwxfquRN8Ne77JoT6hnzYuvq803Wd4zhPk3LzjDI2g/65AFgYj+6F4Gg+wHGCj+cdoWFv j46kYOM6vpQM3j61FuORGvUDPR7JMTl8N/7nrShyHcV0Y/bX9XbUZYztOkaJzcPJ3AX9tCTwRiP6I8HW
Pa24x3E6pSUZx0z6HsA2mu2QFBcF//z85YHxlbo5pn+/1YJBlv8qA2dFdqhKsyTN3wZaHbPJN8x6M5Ug fILtGT7vP3gh+GgvWjHH9rwr2+E8OV71mhxa28wppePXPDGWTvUbsrVB+XznMywvLSaux8dvd0yzUM9u
beI/vc+iGbfhcHKtscXj2dr/S67JUqT30kePodtkXyuzGGX2BDmd3krOF7twkB5AeUrl9lcAAAD//1lQ ubkbWRln+cAYO6+9wm+FvpvmHfDSrRJckdJV74K0yX9VJr+M8Sv6I98bOymwCu9fi2uylOl/y+eIaVit
SRlCBAAA frmZ5RrnwyOvi5JrfLpJNoo8J6FPf38HAAD//zs8r8zgBAAA
`, `,
}, },
@ -12114,16 +12119,16 @@ XzHfrrS2uzLN6JsOkTvo3Iny7fxf2KYCxs3I30osvf4OAAD//yR+jxHtAwAA
"/templates/admin-votes.html": { "/templates/admin-votes.html": {
local: "templates/admin-votes.html", local: "templates/admin-votes.html",
size: 848, size: 881,
modtime: 1516741087, modtime: 1529325858,
compressed: ` compressed: `
H4sIAAAJbogA/3xSPW/cMAzd/SsI48b6DLRbIAsoLkuWDsGhu2wxOaGyZEg8A0WQ/15KtqPcRzOJfHoU H4sIAAAJbogA/3xSwW7bMAy95ysII8c5BrZboQgY0ksvOxTB7rLFJsJkyZAYA0XRfx8l2VWSdT2FfHn0
Hx8ltJlhsCrGrg4Yz5ZiM3hHyjgMtazE6bs8nENAR/C83IuWsertDYJyrwg78w12Mzx0sD/iOFlF+KhI e3yU0GaGwaoY903AeLEU28E7UsZhaORGnL/LwyUEdATP5X/RMbZ5e4Og3Alha77BdoaHPeyOOE5WET4q
7Vc2vL9XAIVNiU6Zv5u5Qo0rJZMYelbuDyMPOaV5/0uNyLnoA7RyeQqdTjUlEi2PwWJJ9RbB6K6ePWFs UruFDe/vG4DKpkSnzN/OPKHGhZJJDD0r94eRh9zSvPulRuRe9AE6WT6FTqeZWomO12CzpHqLYPS+mT1h
cl5v80UfFsJ0Dthch03vg8aAGgYeNg8PIOiESsssT1BYggzLoxkxkhon0XL26eJgTXLr6fH6Ik1m3Gss bHPfrPtFHwphugRs78u290FjQA0DL5uXBxB0RqVlticolCLD8mhGFB0XV1jybtwp3uGrAe/sa2tVOGEj
OEf5zYSsfQT1Xv+VmyFfe/zT2t9p0M3BC4laLoZ+CE0utqRvGYviJ32HsIaceFuSImxIyoZtnYeTN0OR D9akTJ8eK5errJCQRVVQ7/WrXOP5OvGf1v5Oa6953hjWssSbbEdS45Qy7UhfM5aSG29rU3WHJDystzuc
s1Zak/sMZZctQ58fW9f4UdGWZkXQZtZlBaObYYJevKc7y9LbD7D4QvwdvI2Tcl39o07CLLr/2wpHT8pC vRmq2jJpTRYa6uE6hq4/ttzsY6KrYneGPsutbFHSe9I3S6z53aowumYo6MV7+uSaH0oWX4jfi7dxUm7f
Tm+l8Lm05CD9IVn9CwAA//8Mc47HUAMAAA== /Mh6Ft3/k4ajJ2Uht/9a4d8iyUV6ZHLzNwAA//+9mrcmcQMAAA==
`, `,
}, },

View File

@ -1,7 +1,3 @@
div.content {
margin-left: 150px;
}
div.bottom-space { div.bottom-space {
margin-bottom: 15px; margin-bottom: 15px;
} }

View File

@ -312,21 +312,46 @@ input.larger {
background-color: #229af9; background-color: #229af9;
color: #FFFFFF; color: #FFFFFF;
} }
.content {
margin-left: 150px;
}
} }
/* Small Screens */
@media screen and (max-width:35.5em) { @media screen and (max-width:35.5em) {
div.pure-control-group label.control-label { div.pure-control-group label.control-label {
text-align: left; text-align: left;
} }
} .only-large {
display: none;
@media screen and (max-width:64em) and (min-width: 48em) { }
div.pure-control-group label.control-label { .only-small {
text-align: left; display: default;
}
.team-management-buttons {
text-align:left;
}
.team-management-buttons>.pure-button {
margin-top: 1em;
} }
} }
/* Starting at Small, horizontal */
@media screen and (min-width: 35.5em) {
div.content {
margin-left: 150px;
}
div.pure-control-group label.control-label {
text-align: left;
}
.only-small {
display: none;
}
}
/* Small Horizontal to Medium */
@media screen and (min-width: 35.5em) and (max-width: 48em) { }
/* Medium Screens */
@media screen and (min-width: 48em) and (max-width:64em) { }
/* Larger Screens */
@media (min-width: 64em) { }

View File

@ -1,3 +1,26 @@
(function(){
document.onkeydown = function(evt) {
evt = evt || window.event;
var isEscape = false;
if("key" in evt) {
isEscape = (evt.key == "Escape" || evt.key == "Esc");
} else {
isEscape = (evt.keyCode == 27);
}
if(isEscape) {
toggleAdminPanel();
}
}
document.querySelector('.menu-button').onclick = function() {
var mnu = document.querySelector('#menu .menu-container');
if(mnu.style.display == 'inline-block') {
mnu.style.display = 'none';
} else {
mnu.style.display = 'inline-block';
}
}
})()
function toggleAdminPanel() { function toggleAdminPanel() {
var menu = document.querySelector('#menu'); var menu = document.querySelector('#menu');
if(menu.classList.contains('hidden')) { if(menu.classList.contains('hidden')) {
@ -9,20 +32,6 @@ function toggleAdminPanel() {
} }
} }
document.onkeydown = function(evt) {
evt = evt || window.event;
var isEscape = false;
if("key" in evt) {
isEscape = (evt.key == "Escape" || evt.key == "Esc");
} else {
isEscape = (evt.keyCode == 27);
}
if(isEscape) {
toggleAdminPanel();
}
}
function showModal(options) { function showModal(options) {
var modal = document.getElementById('modal-overlay'); var modal = document.getElementById('modal-overlay');
document.getElementById('modal-title').innerText = (options.title)?options.title:""; document.getElementById('modal-title').innerText = (options.title)?options.title:"";

View File

@ -136,7 +136,7 @@ func main() {
}() }()
fmt.Printf("Listening on port %d\n", m.site.Port) fmt.Printf("Listening on port %d\n", m.site.Port)
log.Fatal(http.ListenAndServe("127.0.0.1:"+strconv.Itoa(m.site.Port), chain)) log.Fatal(http.ListenAndServe(m.site.Ip+":"+strconv.Itoa(m.site.Port), chain))
} }
func loadConfig() { func loadConfig() {
@ -154,6 +154,9 @@ func loadConfig() {
case "-title": case "-title":
m.site.Title = val m.site.Title = val
fmt.Print("Set site title: ", m.site.Title, "\n") fmt.Print("Set site title: ", m.site.Title, "\n")
case "-ip":
m.site.Ip = val
fmt.Print("Set site IP: ", m.site.Ip, "\n")
case "-port": case "-port":
var tryPort int var tryPort int
var err error var err error

View File

@ -12,6 +12,7 @@ import (
*/ */
type siteData struct { type siteData struct {
Title string Title string
Ip string
Port int Port int
SessionName string SessionName string
ServerDir string ServerDir string
@ -32,6 +33,7 @@ type siteData struct {
func NewSiteData(m *model) *siteData { func NewSiteData(m *model) *siteData {
ret := new(siteData) ret := new(siteData)
ret.Title = "ICT GameJam" ret.Title = "ICT GameJam"
ret.Ip = "127.0.0.1"
ret.Port = 8080 ret.Port = 8080
ret.SessionName = "ict-gamejam" ret.SessionName = "ict-gamejam"
ret.ServerDir = "./" ret.ServerDir = "./"
@ -65,6 +67,9 @@ func (s *siteData) LoadFromDB() error {
if title, _ := s.m.bolt.GetValue(s.mPath, "title"); strings.TrimSpace(title) != "" { if title, _ := s.m.bolt.GetValue(s.mPath, "title"); strings.TrimSpace(title) != "" {
s.Title = title s.Title = title
} }
if ip, err := s.m.bolt.GetValue(s.mPath, "ip"); err == nil {
s.Ip = ip
}
if port, err := s.m.bolt.GetInt(s.mPath, "port"); err == nil { if port, err := s.m.bolt.GetInt(s.mPath, "port"); err == nil {
s.Port = port s.Port = port
} }
@ -97,6 +102,9 @@ func (s *siteData) SaveToDB() error {
if err = s.m.bolt.SetValue(s.mPath, "title", s.Title); err != nil { if err = s.m.bolt.SetValue(s.mPath, "title", s.Title); err != nil {
return err return err
} }
if err = s.m.bolt.SetValue(s.mPath, "ip", s.Ip); err != nil {
return err
}
if err = s.m.bolt.SetInt(s.mPath, "port", s.Port); err != nil { if err = s.m.bolt.SetInt(s.mPath, "port", s.Port); err != nil {
return err return err
} }

View File

@ -4,20 +4,16 @@
<table id="clients-table" class="sortable pure-table pure-table-bordered center"> <table id="clients-table" class="sortable pure-table pure-table-bordered center">
<thead> <thead>
<tr> <tr>
<th>Friendly Name</th> <th>Auth</th>
<th>Client ID</th> <th>Name</th>
<th>Last Known IP</th> <th class="only-large">Client ID</th>
<th>Authenticated</th> <th class="only-large">Last Known IP</th>
<th></th> <th class="only-large">Authenticated</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{{ range $i, $v := .TemplateData.Clients }} {{ range $i, $v := .TemplateData.Clients }}
<tr> <tr>
<td>{{ $v.Name }}</td>
<td>{{ $v.UUID }}</td>
<td>{{ $v.IP }}</td>
<td>{{ if $v.Auth }} Yes {{ else }} No {{ end }}</td>
<td> <td>
{{ if $v.Auth }} {{ if $v.Auth }}
<a href="/admin/clients/{{ $v.UUID }}/deauth" class="primary"><i class="fa fa-2 fa-toggle-on"></i></a> <a href="/admin/clients/{{ $v.UUID }}/deauth" class="primary"><i class="fa fa-2 fa-toggle-on"></i></a>
@ -25,6 +21,10 @@
<a href="/admin/clients/{{ $v.UUID }}/auth" class="error"><i class="fa fa-2 fa-toggle-off"></i></a> <a href="/admin/clients/{{ $v.UUID }}/auth" class="error"><i class="fa fa-2 fa-toggle-off"></i></a>
{{ end }} {{ end }}
</td> </td>
<td>{{ $v.Name }}<p class="only-small">({{ $v.UUID }})</p></td>
<td class="only-large">{{ $v.UUID }}</td>
<td class="only-large">{{ $v.IP }}</td>
<td class="only-large">{{ if $v.Auth }} Yes {{ else }} No {{ end }}</td>
</tr> </tr>
{{ end }} {{ end }}
</tbody> </tbody>

View File

@ -1,10 +1,10 @@
{{ $uuid := .TemplateData.UUID }} {{ $uuid := .TemplateData.UUID }}
<div class="center"> <div class="center">
<div> <div class="team-management-buttons">
<h3>Team Management</h3> <h3>Team Management</h3>
<button id="edit-team-button" onclick="javascript:gotoTeamTab();" class="pure-button-toggle-first pure-button pure-button-primary">Team Details</button> <button id="edit-team-button" onclick="javascript:gotoTeamTab();" class="pure-button-toggle-first pure-button pure-button-primary">Team Details</button><br class="only-small" />
<button id="edit-game-button" onclick="javascript:gotoTeamGameTab();" class="pure-button-toggle-middle pure-button">Game Details</button> <button id="edit-game-button" onclick="javascript:gotoTeamGameTab();" class="pure-button-toggle-middle pure-button">Game Details</button><br class="only-small" />
<button id="edit-team-members-button" onclick="javascript:gotoTeamMemberTab();" class="pure-button-toggle-last pure-button">Team Members</button> <button id="edit-team-members-button" onclick="javascript:gotoTeamMemberTab();" class="pure-button-toggle-last pure-button">Team Members</button><br class="only-small" />
</div> </div>
<div id="edit-team-tab" class="left"> <div id="edit-team-tab" class="left">
<form class="pure-form pure-form-aligned" action="/admin/teams/{{ $uuid }}/save" method="POST"> <form class="pure-form pure-form-aligned" action="/admin/teams/{{ $uuid }}/save" method="POST">
@ -16,10 +16,10 @@
<input id="teamname" name="teamname" value="{{ .TemplateData.Name }}" placeholder="Team Name"> <input id="teamname" name="teamname" value="{{ .TemplateData.Name }}" placeholder="Team Name">
</div> </div>
</div> </div>
<div class="pure-control-group reset-pull"> <div class="pure-control-group team-management-buttons">
<a href="/admin/teams" class="pull-left space pure-button pure-button-plain">Cancel</a> <a href="/admin/teams" class="pure-button pure-button-plain">Cancel</a>
<button type="submit" class="pull-right space pure-button pure-button-primary">Update Team</button> <button type="submit" class="pure-button pure-button-primary">Update Team</button>
<button type="button" id="btnDeleteTeam" class="pull-right space pure-button pure-button-error">Delete Team</button> <button type="button" id="btnDeleteTeam" class="pure-button pure-button-error">Delete Team</button>
</div> </div>
</fieldset> </fieldset>
</form> </form>
@ -73,9 +73,9 @@
<thead> <thead>
<tr> <tr>
<th>Name</th> <th>Name</th>
<th>Slack ID</th> <th class="only-large">Slack ID</th>
<th>Twitter</th> <th class="only-large">Twitter</th>
<th>Email</th> <th class="only-large">Email</th>
<th>Remove</th> <th>Remove</th>
</tr> </tr>
</thead> </thead>
@ -83,9 +83,9 @@
{{ range $i, $v := .TemplateData.Members }} {{ range $i, $v := .TemplateData.Members }}
<tr> <tr>
<td>{{ $v.Name }}</td> <td>{{ $v.Name }}</td>
<td>{{ $v.SlackId }}</td> <td class="only-large">{{ $v.SlackId }}</td>
<td>{{ $v.Twitter }}</td> <td class="only-large">{{ $v.Twitter }}</td>
<td>{{ $v.Email }}</td> <td class="only-large">{{ $v.Email }}</td>
<td> <td>
<form action="/admin/teams/{{ $uuid }}/deletemember" method="POST"> <form action="/admin/teams/{{ $uuid }}/deletemember" method="POST">
<input type="hidden" name="memberid" value="{{ $v.UUID }}"/> <input type="hidden" name="memberid" value="{{ $v.UUID }}"/>

View File

@ -5,15 +5,15 @@
<thead> <thead>
<tr> <tr>
<th>Game Name</th> <th>Game Name</th>
<th>Team Name</th> <th class="only-large">Team Name</th>
<th>Screenshots</th> <th>Screenshots</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{{ range $i, $v := .TemplateData.Teams }} {{ range $i, $v := .TemplateData.Teams }}
<tr> <tr>
<td>{{ $v.Game.Name }}</td> <td>{{ $v.Game.Name }}<p class="only-small">by<br />{{ $v.Name }}</p></td>
<td>{{ $v.Name }}</td> <td class="only-large">{{ $v.Name }}</td>
<td>{{ len $v.Game.Screenshots }}</td> <td>{{ len $v.Game.Screenshots }}</td>
</tr> </tr>
{{ end }} {{ end }}

View File

@ -1,4 +1,4 @@
<div class="content"> <div class="">
<div> <div>
<h3>Public Mode</h3> <h3>Public Mode</h3>
<button onclick="window.location.href='/admin/mode/0'" class="pure-button-toggle-first pure-button {{ if eq .PublicMode 0 }}pure-button-primary{{ end }}">Waiting</button> <button onclick="window.location.href='/admin/mode/0'" class="pure-button-toggle-first pure-button {{ if eq .PublicMode 0 }}pure-button-primary{{ end }}">Waiting</button>

View File

@ -8,19 +8,19 @@
<thead> <thead>
<tr> <tr>
<th>Name</th> <th>Name</th>
<th>Management Link</th> <th class="only-large">Management Link</th>
<th>Members</th> <th class="only-large">Members</th>
<th>Game</th> <th class="only-large">Game</th>
<th></th> <th></th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{{ range $i, $v := .TemplateData.Teams }} {{ range $i, $v := .TemplateData.Teams }}
<tr> <tr>
<td>{{ $v.Name }}</td> <td>{{ $v.Name }}<p class="only-small">{{ $v.Game.Name }}</p></td>
<td><a href="/team/{{ $v.UUID }}">{{ $v.UUID }}</a></td> <td class="only-large"><a href="/team/{{ $v.UUID }}">{{ $v.UUID }}</a></td>
<td>{{ len $v.Members }}</td> <td class="only-large">{{ len $v.Members }}</td>
<td>{{ $v.Game.Name }}</td> <td class="only-large">{{ $v.Game.Name }}</td>
<td> <td>
<a href="/admin/teams/{{ $v.UUID }}/edit" class="pure-button pure-button-plain"><i class="fa fa-pencil"></i></a> <a href="/admin/teams/{{ $v.UUID }}/edit" class="pure-button pure-button-plain"><i class="fa fa-pencil"></i></a>
<a href="/admin/teams/{{ $v.UUID }}/delete" class="pure-button pure-button-plain"><i class="fa fa-trash"></i></a> <a href="/admin/teams/{{ $v.UUID }}/delete" class="pure-button pure-button-plain"><i class="fa fa-trash"></i></a>

View File

@ -9,16 +9,15 @@
<table id="votes-table" class="sortable pure-table pure-table-bordered center"> <table id="votes-table" class="sortable pure-table pure-table-bordered center">
<thead> <thead>
<tr> <tr>
<th>Timestamp</th> <th>Time</th>
<th>Client ID</th>
<th>Rankings</th> <th>Rankings</th>
<th class="only-large">Client ID</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{{ range $i, $v := .TemplateData.AllVotes }} {{ range $i, $v := .TemplateData.AllVotes }}
<tr> <tr>
<td>{{ $v.Timestamp }}</td> <td>{{ $v.Timestamp }}</td>
<td>{{ $v.ClientId }}</td>
<td> <td>
<ol> <ol>
{{ range $ci, $cv := $v.Choices }} {{ range $ci, $cv := $v.Choices }}
@ -26,6 +25,7 @@
{{ end }} {{ end }}
</ol> </ol>
</td> </td>
<td class="only-large">{{ $v.ClientId }}</td>
</tr> </tr>
{{ end }} {{ end }}
</tbody> </tbody>