Merge pull request #7 from br0xen/master

Several Changes
This commit is contained in:
Brian Buller 2017-07-09 19:24:17 -05:00 committed by GitHub
commit 9bcfb5feaa
6 changed files with 210 additions and 98 deletions

182
assets.go
View File

@ -202,28 +202,29 @@ Y8Pj6dAeZ3gBzLZbhMnSW8r0f78+9y+zlDVuQ3ZNXD8zD+/mGzZjDfK53gEAAP//D/6XxHkAAAA=
"/assets/css/gjvote.css": {
local: "assets/css/gjvote.css",
size: 3784,
modtime: 1499536516,
size: 4044,
modtime: 1499645867,
compressed: `
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
`,
},
@ -318,22 +319,26 @@ H4sIAAAAAAAA/0rOzyvOz0nVy8lP11DydA5RcE/MTfVKzFVwTMnNzFPStOYCBAAA//8imS6KIgAAAA==
"/assets/js/gjvote.js": {
local: "assets/js/gjvote.js",
size: 2455,
modtime: 1498145831,
size: 3469,
modtime: 1499644439,
compressed: `
H4sIAAAAAAAA/6RWT0/jOhC/51OMysGJChF6lye1L0Lv8ZB2JUArwW21hzSeNqO6djd20o2g331lO0nT
0rRFywGI5/cnnhl7Mi9lZkhJMGqxEPgvX5H8lkoUYQRvAQBXWblCaeKfJRb1CwrMjCpCdrVCWbIozkSq
9SNpE3uBkOXEOUoWTYNtEAQdX8kl1lxtJCTQmoZYGW+DlYHE/X5/hw1JrjYxVijNNACo0gJIP+gsXaNl
p0KjXad5OFpiPQKS0ClBH2oN4iXWkCQw8qsj63CwPIqs3BZQaBwWuVccLeOvvz3cv0ELbN0/5tGDt0HQ
5VrnavOkeCpCtbYL2pPtPld2GZJd3hdoHgTaf/+rv/KQOcCNqrAQac2c+BmsISOQRTFJicUr/rKZbo1j
F4zu9h4no9EFsrqcnVRu4zvxdqXRp3mHnSletwk8Y2uhB5Z9lV4hD/SfFcfPeaTrNUp+n5PgH5V6LdDF
SmO6YgLMVRG61oUEbqdA8A8cIGOBcmHyKdB43LJ8G8yMnDaPHw2+04+Y9Es5W5HZ0cCS+p2TFZgabLYX
Mu3wvmPsz167n6enPWbz98hrufr2u+AwliSl5DgniTy6Y2wyhJsOe+QFzgcsbGjf4eqohcWdcMgEZcsB
Cxfb8+hus+hte8zMMU66pVoPuqVaX5AzhzvhsVaa3NVz3KYN7zsVtMjNUbsWPw2Crnf8kfzy+vTYP5ID
ZbX4tlcuwTY1P1NKi3SZeE5XVpnpdZohrMsCbzwF2Hgoe2N2PLjbqzfRMs2WsSBtUGIRdsfnTSqOk5mR
1+Am14S5wrPtdQcZao4G0B2wc9eTpx/cUDMjG4FtczU5dKxNLTCuSNOMBJna5sU9CWQW30xbnRVKiFcV
3l7DrR/e3bzKiaOfV382qIZfqPlo+Ow0a7qNXULsD449nrtvfUr/p+r8lrr02+TlJDDcseM5Fdq4grQ3
cy9Y4EpV2JTrKKf9VvgdAAD//3s8PKeXCQAA
H4sIAAAAAAAA/6xWT2/jthO9+1MMvAdJSCLIP+CHAlG1i3a7RQsk2wKbW9EDLY4kwhTpipSzQtbfvSD1
x5JM2UnbPWwszZt55JvRzGS1SDWTArTMc44/0JKJ34lA7gfwsgI4kApKFDUkQGValyh0+FeNVfMFOaZa
Vr73zti9IF4BsMw3D2HKiVIPTOkwlUITJpTvFYxSFF7QxoXlcJw0stbvrSsK7QWh0g3HsCRVzsQDZjrx
Nv+P9l+92AaaMVZYygOe+AzoCMgV/hfEkZuUUDpjXB1Xq9VAJcUOGyqfBSTQS+7jQbdi4EFDYv//9g2e
maDyOcQDCh13GWDqk0rJHo034Qo7rdc7bNbABAyRYAw1BOEOG0gSWLdv14Zh9np9LpEjyEdJ0Xj877vu
fvYEPbBnP6+iQYyh0lQhnx8lJdyXe/NCjSrNvB6XWo76E0fz88fmV+p7FnAnD1hx0rRKX8Fqpjl6QciE
wOoJvxqle+LQGoMPk8f79foVYVW9vRi5t5+C92+6+CwbsFtJm7Ovwk1roDPKcZRRImfxP0uKb+Mg+z0K
+rFgnJ5HGpXAYKu1HpIJkMnKt6ULCUQxMPgeZsiQo8h1EQO7uem92jLYahF3j+cEf7A/Q6a+1NuS6ZMb
GKdx5aQVEo3d9XxPWXxbMebfpNyvu5ORZ/fXcSyb33EVzG1JUguKGRNIgw+ed7+Ei5c5igqzBQpjmjK8
c1IY3AWGlLN0t0BhbROOoZsFL0cXmfW4yEaUWmQjSr1CM4u7wLGXitnW46bpzVOmiuWFdtL1+Hi1Gmqn
/SR/eXp8GH+SC2k1+L5WXoPtcn4llQZplfhMShPZU3uSIuzrCu9aF/BultS78dzG011bEiVIugs5UxoF
Vv7w+bwISfF+q8Ut2Ml179nEe8fbAbJUHB1g+MCutafWfdahtlp0AY5da7LoboIfmGJbxplujC72iaOd
5N20VWklOX+SfnQLURBP5lXBKLbz6t8NquUDdYvDW6dZV23eaxzHg2PiZ/ttK+lP7HD9SoP8RryCcfRP
3mHGKqVtQvrOPDK2i1mXLqePY1dA/TMnqnhEpUiOfqnyW0j5aGXIjPnCdkoUoxhaVJsG+3MyQUuVW8P5
xEq5c0q1IabbX8pNRQ+DcQ5xbaUtpi0IuScp002yMYaCCMpxcvF5TToQ/1wSlvnz85729oxQJvLT3q5Q
P7ESZa39jFD8rZ5k6BY2URQ5MunAvvXI7WEN3KhlduFzAYfVygASWK8DeOnhm/i0s5AU3kPkutMwz4bl
wEFjuzFJ4Q6iMNr0nct5x64rGWFOsrgz/HcAAAD//7SZAGGNDQAA
`,
},
@ -12178,56 +12183,63 @@ AAD//1puW/YhAwAA
"/templates/public-voting.html": {
local: "templates/public-voting.html",
size: 10440,
modtime: 1499536431,
size: 11767,
modtime: 1499645866,
compressed: `
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
J9UnIP8bAAD//60giU33LQAA
`,
},

View File

@ -136,6 +136,10 @@ img.thumbnail {
margin-bottom: 5px;
}
.large {
font-size: 18px;
}
.big-space {
margin: 10px;
}
@ -216,6 +220,22 @@ table tfoot {
text-align: center;
}
div#embiggenedScreenShot {
cursor: pointer;
background-color: #FFF;
}
div.fullscreen {
height: 100%;
width: 100%;
position: absolute;
top: 0px;
left: 0px;
text-align: center;
margin: auto auto;
z-index:1001;
}
@media (min-width: 40em) {
#menu {
width: 150px;
@ -244,7 +264,7 @@ table tfoot {
}
aside.flash {
margin-left: 150px;
font-size: 24px;
}
aside.flash.error {

View File

@ -1,5 +1,12 @@
function toggleAdminPanel() {
document.querySelector('#menu').classList.toggle('hidden');
var menu = document.querySelector('#menu');
if(menu.classList.contains('hidden')) {
document.querySelector('#layout>.content').style.marginLeft='150px';
menu.classList.remove('hidden');
} else {
document.querySelector('#layout>.content').style.marginLeft='0';
menu.classList.add('hidden');
}
}
@ -64,3 +71,35 @@ function hideModal() {
buttonsDiv.removeChild(buttonsDiv.firstChild);
}
}
function setFlashMessage(msg, cls) {
var flash = document.querySelector('aside.flash');
flash.innerText = msg;
for(var i = 0; i < cls.length; i++) {
flash.classList.add(cls[i]);
}
flash.classList.remove('hidden');
flash.style.opacity=1;
handleFlashMessage();
}
function handleFlashMessage() {
var flash = document.querySelector('aside.flash');
if(flash.classList.contains('fading')) {
setTimeout(fadeOutFlashMessage, 1000);
}
}
function fadeOutFlashMessage() {
var flash = document.querySelector('aside');
var opac = flash.style.opacity;
if(opac == "") { opac = 1; }
if(opac > 0) {
setTimeout(function() {
flash.style.opacity = opac - 0.01;
fadeOutFlashMessage();
}, 10);
}
}
handleFlashMessage();

View File

@ -261,6 +261,7 @@ func InitPageData(w http.ResponseWriter, req *http.Request) *pageData {
if p.FlashClass == "" {
p.FlashClass = "hidden"
}
fmt.Println("Flash Message: " + p.FlashMessage + " (" + p.FlashClass + ")")
// Build the menu
if p.LoggedIn {

View File

@ -1,6 +1,8 @@
package main
import (
"fmt"
"math/rand"
"net/http"
"strings"
"time"
@ -12,10 +14,10 @@ func initPublicPage(w http.ResponseWriter, req *http.Request) *pageData {
}
func handleMain(w http.ResponseWriter, req *http.Request) {
page := initPublicPage(w, req)
page.SubTitle = ""
switch dbGetPublicSiteMode() {
case SiteModeWaiting:
page := initPublicPage(w, req)
page.SubTitle = ""
page.show("public-waiting.html", w)
case SiteModeVoting:
loadVotingPage(w, req)
@ -29,7 +31,17 @@ func loadVotingPage(w http.ResponseWriter, req *http.Request) {
Timestamp string
}
vpd := new(votingPageData)
vpd.Teams = dbGetAllTeams()
tms := dbGetAllTeams()
// Randomize the team list
rand.Seed(time.Now().Unix())
for len(tms) > 0 {
i := rand.Intn(len(tms))
fmt.Println("Chose Team: " + tms[i].Name)
vpd.Teams = append(vpd.Teams, tms[i])
tms = append(tms[:i], tms[i+1:]...)
}
vpd.Timestamp = time.Now().Format(time.RFC3339)
page.TemplateData = vpd
page.show("public-voting.html", w)
@ -60,5 +72,6 @@ func handlePublicSaveVote(w http.ResponseWriter, req *http.Request) {
if newVote, err := dbGetVote(page.ClientId, timestamp); err == nil {
site.Votes = append(site.Votes, *newVote)
}
page.session.setFlashMessage("Vote Saved!", "success large fading")
redirect("/", w, req)
}

View File

@ -50,7 +50,7 @@
</table>
</div>
<div class="content half">
<form action="/vote">
<form action="/vote" onsubmit="return validateVote();">
<input id="uservote" type="hidden" name="uservote" value="" />
<input id="timestamp" type="hidden" name="timestamp" value="{{.TemplateData.Timestamp}}" />
<button class="pure-button pure-button-primary space-vertical pull-right" type="submit">Submit Vote!</button>
@ -62,13 +62,14 @@
<label class="control-label">Click to view original size</label>
<div class="center-all horizontal-scroll thumbnail-container" id="thumbnail-container">
{{ range $imgi, $imgv := $v.Game.Screenshots }}
<a href="javascript:embiggenScreenshot(this.getElementsByTagName('img')[0]);">
<img data-teamid="{{ $v.UUID }}" data-ssid="{{ $imgv.UUID }}" class="thumbnail" alt="{{ $imgv.Description }}" src="data:image/png;base64,{{ $imgv.Image }}" />
<a href="javascript:embiggenScreenshot('{{$imgv.UUID}}');">
<img id="{{ $imgv.UUID }}" data-teamid="{{ $v.UUID }}" data-ssid="{{ $imgv.UUID }}" class="thumbnail" alt="{{ $imgv.Description }}" src="data:image/png;base64,{{ $imgv.Image }}" />
</a>
{{ end }}
</div>
</div>
{{ end }}
<div id="embiggenedScreenShot" class="hidden fullscreen" onclick="javascript:document.getElementById('embiggenedScreenShot').classList.add('hidden');"></div>
{{ end }}
<script>
var teamNames = { };
@ -89,11 +90,34 @@ function showScreenshots(tmuuid) {
click: hideModal
}]
});
}
function embiggenScreenshot(img) {
var ss = document.getElementById(img);
if(ss == null) {
// Couldn't find the screenshot... Error
setFlashMessage('Error viewing that screenshot, sorry...', ['error','fading']);
return;
}
var container = document.getElementById('embiggenedScreenShot');
var clone = ss.cloneNode(true);
clone.classList.remove('thumbnail');
while(container.hasChildNodes()) {
container.removeChild(container.firstChild);
}
var clickToCloseMsg = document.createElement('div');
clickToCloseMsg.innerText = "Click Image to Close";
container.appendChild(clickToCloseMsg);
container.appendChild(clone);
container.classList.remove('hidden');
}
function validateVote() {
var isValid = (getRanked().length > 0);
if(!isValid) {
setFlashMessage('You must choose at least one game.', ['error','fading']);
}
return (getRanked().length > 0);
}
function updateView() {
@ -243,9 +267,12 @@ function getRanked() {
// 'tbl' should be either 'ranked' or 'unranked'
function gameTableToArray(tbl) {
var ret = [];
snack.wrap('#'+tbl+'-table>tbody>tr').each(function(ele, idx) {
ret = ret.concat(getTeamObj(ele.dataset.teamid));
});
var trs = snack.wrap('#'+tbl+'-table>tbody>tr')
if(trs[0].length > 0) {
trs.each(function(ele, idx) {
ret = ret.concat(getTeamObj(ele.dataset.teamid));
});
}
return ret;
}