Merged in develop (pull request #19)
Develop
This commit is contained in:
		
						commit
						4a2da9c89b
					
				@ -27,16 +27,17 @@ p {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
button {
 | 
					button {
 | 
				
			||||||
    cursor: pointer;
 | 
					    cursor: pointer;
 | 
				
			||||||
    font-size: 15px;
 | 
					    font-size: 16px;
 | 
				
			||||||
    font-weight: 500;
 | 
					    font-weight: 500;
 | 
				
			||||||
    color: #ffffff;
 | 
					    color: #ffffff;
 | 
				
			||||||
    background-color: #5e77aa;
 | 
					    background-color: #5e77aa;
 | 
				
			||||||
    padding: 8px 15px;
 | 
					    padding: 0 15px;
 | 
				
			||||||
 | 
					    height: 35px;
 | 
				
			||||||
    border: none;
 | 
					    border: none;
 | 
				
			||||||
    border-radius: 3px;
 | 
					    border-radius: 3px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
button:hover, button:focus {
 | 
					button:enabled:hover, button:enabled:focus {
 | 
				
			||||||
    background-color: #29457f;
 | 
					    background-color: #29457f;
 | 
				
			||||||
    outline: none;
 | 
					    outline: none;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -44,10 +45,34 @@ button:hover, button:focus {
 | 
				
			|||||||
button:disabled {
 | 
					button:disabled {
 | 
				
			||||||
    cursor: no-drop;
 | 
					    cursor: no-drop;
 | 
				
			||||||
    color: #dddddd;
 | 
					    color: #dddddd;
 | 
				
			||||||
    background-color: #808080;
 | 
					 | 
				
			||||||
    opacity: 0.7;
 | 
					    opacity: 0.7;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button.block {
 | 
				
			||||||
 | 
					    padding: 0;
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button.gray {
 | 
				
			||||||
 | 
					    background-color: #808080;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button.gray:hover, button.gray:focus {
 | 
				
			||||||
 | 
					    background-color: #555555;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.buttonContainer {
 | 
				
			||||||
 | 
					    height: 35px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.buttonContainer.top {
 | 
				
			||||||
 | 
					    margin-bottom: 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.buttonContainer.bottom {
 | 
				
			||||||
 | 
					    margin-top: 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#loading {
 | 
					#loading {
 | 
				
			||||||
    position: absolute;
 | 
					    position: absolute;
 | 
				
			||||||
    width: 40px;
 | 
					    width: 40px;
 | 
				
			||||||
@ -56,8 +81,7 @@ button:disabled {
 | 
				
			|||||||
    left: 50%;
 | 
					    left: 50%;
 | 
				
			||||||
    margin-top: -20px;
 | 
					    margin-top: -20px;
 | 
				
			||||||
    margin-left: -20px;
 | 
					    margin-left: -20px;
 | 
				
			||||||
    z-index: 2;
 | 
					    z-index: 3;
 | 
				
			||||||
    visibility: visible;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#panorama {
 | 
					#panorama {
 | 
				
			||||||
@ -68,57 +92,18 @@ button:disabled {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#guess {
 | 
					#guess {
 | 
				
			||||||
    position: absolute;
 | 
					    position: absolute;
 | 
				
			||||||
    right: 20px;
 | 
					 | 
				
			||||||
    bottom: 20px;
 | 
					    bottom: 20px;
 | 
				
			||||||
    width: 250px;
 | 
					    right: 20px;
 | 
				
			||||||
    height: 150px;
 | 
					 | 
				
			||||||
    opacity: 0.5;
 | 
					 | 
				
			||||||
    z-index: 2;
 | 
					    z-index: 2;
 | 
				
			||||||
    visibility: visible;
 | 
					 | 
				
			||||||
    transition-property: width, height, opacity;
 | 
					 | 
				
			||||||
    transition-duration: 0.1s;
 | 
					 | 
				
			||||||
    transition-delay: 0.8s;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#guess:hover {
 | 
					#guessMap {
 | 
				
			||||||
    width: 500px;
 | 
					 | 
				
			||||||
    height: 350px;
 | 
					 | 
				
			||||||
    opacity: 0.95;
 | 
					 | 
				
			||||||
    transition-delay: 0s;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#guess > #guessMap {
 | 
					 | 
				
			||||||
    height: 115px;
 | 
					 | 
				
			||||||
    width: 100%;
 | 
					    width: 100%;
 | 
				
			||||||
    transition-property: height;
 | 
					 | 
				
			||||||
    transition-duration: 0.1s;
 | 
					 | 
				
			||||||
    transition-delay: 0.8s;
 | 
					 | 
				
			||||||
    border-radius: 3px;
 | 
					    border-radius: 3px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#guess:hover > #guessMap {
 | 
					 | 
				
			||||||
    height: 315px;
 | 
					 | 
				
			||||||
    transition-delay: 0s;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#guessButtonContainer {
 | 
					 | 
				
			||||||
    margin-top: 5px;
 | 
					 | 
				
			||||||
    height: 30px;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#guessButton {
 | 
					 | 
				
			||||||
    padding: 0;
 | 
					 | 
				
			||||||
    width: 100%;
 | 
					 | 
				
			||||||
    height: 100%;
 | 
					 | 
				
			||||||
    box-sizing: border-box;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#result {
 | 
					#result {
 | 
				
			||||||
    position: absolute;
 | 
					    position: absolute;
 | 
				
			||||||
    top: 50px;
 | 
					 | 
				
			||||||
    left: 50px;
 | 
					 | 
				
			||||||
    right: 50px;
 | 
					 | 
				
			||||||
    bottom: 50px;
 | 
					 | 
				
			||||||
    opacity: 0.95;
 | 
					    opacity: 0.95;
 | 
				
			||||||
    z-index: 2;
 | 
					    z-index: 2;
 | 
				
			||||||
    visibility: hidden;
 | 
					    visibility: hidden;
 | 
				
			||||||
@ -152,8 +137,7 @@ button:disabled {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#scoreBarBase {
 | 
					#scoreBarBase {
 | 
				
			||||||
    height: 20px;
 | 
					    height: 24px;
 | 
				
			||||||
    width: 60%;
 | 
					 | 
				
			||||||
    margin: 0 auto;
 | 
					    margin: 0 auto;
 | 
				
			||||||
    background-color: #eeeeee;
 | 
					    background-color: #eeeeee;
 | 
				
			||||||
    border-radius: 3px;
 | 
					    border-radius: 3px;
 | 
				
			||||||
@ -162,6 +146,104 @@ button:disabled {
 | 
				
			|||||||
#scoreBar {
 | 
					#scoreBar {
 | 
				
			||||||
    height: 100%;
 | 
					    height: 100%;
 | 
				
			||||||
    width: 0;
 | 
					    width: 0;
 | 
				
			||||||
 | 
					    border-radius: 3px;
 | 
				
			||||||
    transition-property: width;
 | 
					    transition-property: width;
 | 
				
			||||||
    transition-duration: 2.0s;
 | 
					    transition-duration: 2.0s;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@media screen and (max-width: 599px) {
 | 
				
			||||||
 | 
					    button {
 | 
				
			||||||
 | 
					        padding: 0;
 | 
				
			||||||
 | 
					        width: 100%;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #showGuessButtonContainer {
 | 
				
			||||||
 | 
					        position: absolute;
 | 
				
			||||||
 | 
					        left: 20px;
 | 
				
			||||||
 | 
					        bottom: 20px;
 | 
				
			||||||
 | 
					        right: 20px;
 | 
				
			||||||
 | 
					        z-index: 2;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #guess {
 | 
				
			||||||
 | 
					        left: 20px;
 | 
				
			||||||
 | 
					        top: 20px;
 | 
				
			||||||
 | 
					        opacity: 0.95;
 | 
				
			||||||
 | 
					        visibility: hidden;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #guessMap {
 | 
				
			||||||
 | 
					        height: calc(100% - 80px);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #result {
 | 
				
			||||||
 | 
					        top: 20px;
 | 
				
			||||||
 | 
					        left: 20px;
 | 
				
			||||||
 | 
					        right: 20px;
 | 
				
			||||||
 | 
					        bottom: 20px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #scoreBarBase {
 | 
				
			||||||
 | 
					        width: 100%;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@media screen and (min-width: 600px) {
 | 
				
			||||||
 | 
					    #showGuessButtonContainer {
 | 
				
			||||||
 | 
					        visibility: hidden;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #guess {
 | 
				
			||||||
 | 
					        width: 500px;
 | 
				
			||||||
 | 
					        height: 350px;
 | 
				
			||||||
 | 
					        opacity: 0.95;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #guess.adapt {
 | 
				
			||||||
 | 
					        top: initial;
 | 
				
			||||||
 | 
					        width: 250px;
 | 
				
			||||||
 | 
					        height: 175px;
 | 
				
			||||||
 | 
					        opacity: 0.5;
 | 
				
			||||||
 | 
					        transition-property: width, height, opacity;
 | 
				
			||||||
 | 
					        transition-duration: 0.1s;
 | 
				
			||||||
 | 
					        transition-delay: 0.8s;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #guess.adapt:hover {
 | 
				
			||||||
 | 
					        width: 500px;
 | 
				
			||||||
 | 
					        height: 350px;
 | 
				
			||||||
 | 
					        opacity: 0.95;
 | 
				
			||||||
 | 
					        transition-delay: 0s;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #closeGuessButtonContainer {
 | 
				
			||||||
 | 
					        display: none;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #guessMap {
 | 
				
			||||||
 | 
					        height: calc(100% - 40px);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #result {
 | 
				
			||||||
 | 
					        top: 50px;
 | 
				
			||||||
 | 
					        left: 50px;
 | 
				
			||||||
 | 
					        right: 50px;
 | 
				
			||||||
 | 
					        bottom: 50px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #scoreBarBase {
 | 
				
			||||||
 | 
					        width: 60%;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     @media screen and (max-height: 389px) {
 | 
				
			||||||
 | 
					        #guess {
 | 
				
			||||||
 | 
					            top: 20px;
 | 
				
			||||||
 | 
					            height: initial;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #guess.adapt:hover {
 | 
				
			||||||
 | 
					            top: 20px;
 | 
				
			||||||
 | 
					            height: initial;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        realPosition: null,
 | 
					        realPosition: null,
 | 
				
			||||||
        panorama: null,
 | 
					        panorama: null,
 | 
				
			||||||
 | 
					        adaptGuess: false,
 | 
				
			||||||
        guessMap: null,
 | 
					        guessMap: null,
 | 
				
			||||||
        guessMarker: null,
 | 
					        guessMarker: null,
 | 
				
			||||||
        resultMap: null,
 | 
					        resultMap: null,
 | 
				
			||||||
@ -37,6 +38,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            document.getElementById('loading').style.visibility = 'hidden';
 | 
					            document.getElementById('loading').style.visibility = 'hidden';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (Core.adaptGuess) {
 | 
				
			||||||
 | 
					                document.getElementById('guess').classList.add('adapt');
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Core.panorama.setVisible(true);
 | 
					            Core.panorama.setVisible(true);
 | 
				
			||||||
            Core.panorama.setPov({ heading: 0, pitch: 0, zoom: 0 });
 | 
					            Core.panorama.setPov({ heading: 0, pitch: 0, zoom: 0 });
 | 
				
			||||||
            Core.panorama.setPano(data.location.pano);
 | 
					            Core.panorama.setPano(data.location.pano);
 | 
				
			||||||
@ -120,6 +125,10 @@
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!('ontouchstart' in document.documentElement)) {
 | 
				
			||||||
 | 
					        Core.adaptGuess = true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Core.guessMap = new google.maps.Map(document.getElementById('guessMap'), {
 | 
					    Core.guessMap = new google.maps.Map(document.getElementById('guessMap'), {
 | 
				
			||||||
        disableDefaultUI: true,
 | 
					        disableDefaultUI: true,
 | 
				
			||||||
        clickableIcons: false,
 | 
					        clickableIcons: false,
 | 
				
			||||||
@ -172,6 +181,16 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    Core.getNewPosition();
 | 
					    Core.getNewPosition();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    document.getElementById('showGuessButton').onclick = function () {
 | 
				
			||||||
 | 
					        this.style.visibility = 'hidden';
 | 
				
			||||||
 | 
					        document.getElementById('guess').style.visibility = 'visible';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    document.getElementById('closeGuessButton').onclick = function () {
 | 
				
			||||||
 | 
					        document.getElementById('showGuessButton').style.visibility = null;
 | 
				
			||||||
 | 
					        document.getElementById('guess').style.visibility = null;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    document.getElementById('guessButton').onclick = function () {
 | 
					    document.getElementById('guessButton').onclick = function () {
 | 
				
			||||||
        if (!Core.guessMarker) {
 | 
					        if (!Core.guessMarker) {
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
@ -231,15 +250,20 @@
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    document.getElementById('continueButton').onclick = function () {
 | 
					    document.getElementById('continueButton').onclick = function () {
 | 
				
			||||||
        document.getElementById('scoreBar').style.width = '0';
 | 
					        document.getElementById('scoreBar').style.width = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Core.resultMarkers.real.setMap(null);
 | 
					        Core.resultMarkers.real.setMap(null);
 | 
				
			||||||
        Core.resultMarkers.real = null;
 | 
					        Core.resultMarkers.real = null;
 | 
				
			||||||
        Core.resultMarkers.guess.setMap(null);
 | 
					        Core.resultMarkers.guess.setMap(null);
 | 
				
			||||||
        Core.resultMarkers.guess = null;
 | 
					        Core.resultMarkers.guess = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        document.getElementById('guess').style.visibility = 'visible';
 | 
					        if (Core.adaptGuess) {
 | 
				
			||||||
        document.getElementById('result').style.visibility = 'hidden';
 | 
					            document.getElementById('guess').classList.remove('adapt');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        document.getElementById('showGuessButton').style.visibility = null;
 | 
				
			||||||
 | 
					        document.getElementById('guess').style.visibility = null;
 | 
				
			||||||
 | 
					        document.getElementById('result').style.visibility = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Core.guessMap.fitBounds(guessMapBounds);
 | 
					        Core.guessMap.fitBounds(guessMapBounds);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -14,10 +14,16 @@ class GetNewPosition implements ControllerInterface
 | 
				
			|||||||
        // demo map
 | 
					        // demo map
 | 
				
			||||||
        $mapId = 1;
 | 
					        $mapId = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // using RAND() for the time being, could be changed in the future
 | 
					        $stmt = $mysql->prepare('SELECT COUNT(*) AS num FROM places WHERE map_id=?');
 | 
				
			||||||
        $stmt = $mysql->prepare('SELECT lat, lng FROM places WHERE map_id=? ORDER BY RAND() LIMIT 1');
 | 
					 | 
				
			||||||
        $stmt->bind_param("i", $mapId);
 | 
					        $stmt->bind_param("i", $mapId);
 | 
				
			||||||
        $stmt->execute();
 | 
					        $stmt->execute();
 | 
				
			||||||
 | 
					        $numberOfPlaces = $stmt->get_result()->fetch_assoc()['num'];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $randomOffset = random_int(0, $numberOfPlaces-1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $stmt = $mysql->prepare('SELECT lat, lng FROM places WHERE map_id=? ORDER BY id LIMIT 1 OFFSET ?');
 | 
				
			||||||
 | 
					        $stmt->bind_param("ii", $mapId, $randomOffset);
 | 
				
			||||||
 | 
					        $stmt->execute();
 | 
				
			||||||
        $place = $stmt->get_result()->fetch_assoc();
 | 
					        $place = $stmt->get_result()->fetch_assoc();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $position = new Position($place['lat'], $place['lng']);
 | 
					        $position = new Position($place['lat'], $place['lng']);
 | 
				
			||||||
 | 
				
			|||||||
@ -2,6 +2,7 @@
 | 
				
			|||||||
<html>
 | 
					<html>
 | 
				
			||||||
<head>
 | 
					<head>
 | 
				
			||||||
    <meta charset="utf-8">
 | 
					    <meta charset="utf-8">
 | 
				
			||||||
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1">
 | 
				
			||||||
    <title>MapGuesser</title>
 | 
					    <title>MapGuesser</title>
 | 
				
			||||||
    <link href="static/css/mapguesser.css" rel="stylesheet">
 | 
					    <link href="static/css/mapguesser.css" rel="stylesheet">
 | 
				
			||||||
    <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;500&display=swap" rel="stylesheet">
 | 
					    <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;500&display=swap" rel="stylesheet">
 | 
				
			||||||
@ -11,10 +12,16 @@
 | 
				
			|||||||
        <img src="static/img/loading.gif">
 | 
					        <img src="static/img/loading.gif">
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
    <div id="panorama"></div>
 | 
					    <div id="panorama"></div>
 | 
				
			||||||
 | 
					    <div id="showGuessButtonContainer">
 | 
				
			||||||
 | 
					        <button id="showGuessButton" class="block">Show guess map</button>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
    <div id="guess">
 | 
					    <div id="guess">
 | 
				
			||||||
 | 
					        <div id="closeGuessButtonContainer" class="buttonContainer top">
 | 
				
			||||||
 | 
					            <button id="closeGuessButton" class="block gray">Close</button>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
        <div id="guessMap"></div>
 | 
					        <div id="guessMap"></div>
 | 
				
			||||||
        <div id="guessButtonContainer">
 | 
					        <div class="buttonContainer bottom">
 | 
				
			||||||
            <button id="guessButton" disabled>Guess</button>
 | 
					            <button id="guessButton" class="block" disabled>Guess</button>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
    <div id="result">
 | 
					    <div id="result">
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user