diff --git a/SmearcarDB/static/index.css b/SmearcarDB/static/index.css index 07ff414..a68c01f 100644 --- a/SmearcarDB/static/index.css +++ b/SmearcarDB/static/index.css @@ -1,19 +1,22 @@ /* Layout Elements and General Formatting */ html { - width: 100%; height: 100%; + width: 100%; } body { - margin: 0; - padding: 0; - height: 100%; - font-family: 'Open Sans Condensed', sans-serif; - color: white; display: grid; + + height: 100%; + overflow: hidden; + padding: 0; + margin: 0; + + color: white; + font-family: 'Open Sans Condensed', sans-serif; + grid-template-columns: 13% auto; grid-template-rows: 8% auto; - overflow: hidden; } h1,h2,h3,h4,h5,p { @@ -21,23 +24,28 @@ h1,h2,h3,h4,h5,p { } .transition { - -webkit-transition: all 0.3s cubic-bezier(.25,.8,.25,1); - -moz-transition: all 0.3s cubic-bezier(.25,.8,.25,1); + -webkit-transition: all 0.3s cubic-bezier(.25,.8,.25,1); + transition: all 0.3s cubic-bezier(.25,.8,.25,1); + + -moz-transition: all 0.3s cubic-bezier(.25,.8,.25,1); -ms-transition: all 0.3s cubic-bezier(.25,.8,.25,1); - transition: all 0.3s cubic-bezier(.25,.8,.25,1); } #header1 { + display: grid; + + background-color: #F47922; + + text-align: center; + grid-column: 1; grid-row: 1; - background-color: #F47922; - text-align: center; cursor: pointer; - display: grid; } #header1 h1 { margin: auto 0 auto 0; + font-weight: 300; } @@ -46,22 +54,26 @@ h1,h2,h3,h4,h5,p { } #header2 { + background-color: #524948; + grid-column: 2; grid-row: 1; - background-color: #524948; } #sidebar { + background-color: #524948; + grid-column: 1; grid-row: 2; - background-color: #524948; } .navi { - width: 100%; - height: 6vh; - cursor: pointer; display: grid; + + height: 6vh; + width: 100%; + + cursor: pointer; grid-template-columns: 1fr 3fr 7fr; } @@ -70,53 +82,158 @@ h1,h2,h3,h4,h5,p { } .navi i { - grid-column: 2; - text-align: center; margin: auto 0 auto 0; + font-size: 130%; + text-align: center; + + grid-column: 2; } .navi p { - grid-column: 3; margin: auto 0 auto 0; + font-size: 110%; + + grid-column: 3; } #mainContainer { + overflow-y: auto; + padding: 2vh; + + background-color: #F8F3F0; + + font-family: 'Saira Condensed', sans-serif; + grid-column: 2; grid-row: 2; - padding: 2vh; - background-color: #F8F3F0; - overflow-y: auto; } -.card { - background-color: #FEFEFE; - box-shadow: 1px 1px 1px 1px #000; +/* Dropdown */ + +.dropdown { + position: relative; + display: grid; + + border-left: 5px solid #F88A3C; + + background-color: rgba(0,0,0,0.05); + + grid-template-columns: 100%; + grid-template-rows: auto 0%; + cursor: pointer; +} + +.dropdown:hover { + background-color: rgba(0,0,0,0.1); +} + +.dropdown .button { + display: grid; + + padding-left: 2%; + margin: auto 0 auto 0; + + font-size: 170%; + + grid-column: 1; + grid-row: 1; + grid-template-columns: 14fr 1fr; + grid-template-rows: 100%; +} + +.dropdown .button p { + font-weight: 300; + grid-column: 1; + grid-row: 1; +} + +.dropdown .button i { + margin: auto 0 auto 0; + + grid-column: 2; + grid-row: 1; +} + +.dropdown .opCont { + position: absolute; + opacity: 0; + display: none; + + width: 100%; border-radius: 2px; + + background-color: #FEFEFE; box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); - transition: all 0.3s cubic-bezier(.25,.8,.25,1); + + grid-column: 1; + grid-row: 2; + + overflow-y: auto; + max-height: 30vh; } -.card:hover { - box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23); +.dropdown .opCont p { + padding: 2% 0 2% 4%; + + font-size: 130%; +} + +.dropdown .opCont p:hover { + background-color: rgba(0,0,0,0.1); } /* Main Body */ #home, #dataValues, #files, #updates { - width: 100%; - height: 100%; display: none; + + height: 100%; + width: 100%; opacity: 0; + + transition: opacity 0.3s cubic-bezier(.25,.8,.25,1); + grid-gap: 2vh; grid-template-columns: 1fr 1fr; grid-template-rows: 2fr 4fr 4fr; - transition: opacity 0.3s cubic-bezier(.25,.8,.25,1); +} + +.card { + display: grid; + + border-radius: 2px; + + background-color: #FEFEFE; + box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); + + color: black; + + transition: all 0.3s cubic-bezier(.25,.8,.25,1); + + grid-template-columns: 1fr; + grid-template-rows: 6fr 11fr; +} + +.card:hover { + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); +} + +.card h2 { + width: 35%; + margin: auto 0 auto 2%; + + font-weight: 300; + border-bottom: 1px solid #D5D5D5; + + grid-column: 1; + grid-row: 1; } #home { display: grid; + opacity: 1; } @@ -125,6 +242,15 @@ h1,h2,h3,h4,h5,p { grid-row: 1; } +#langSelect .dropdown { + height: 50%; + width: 85%; + margin: auto 0 auto 5%; + + grid-column: 1; + grid-row: 2; +} + #dataInfo { grid-column: 2; grid-row: 1; diff --git a/SmearcarDB/static/index.js b/SmearcarDB/static/index.js index e74c182..1ee476c 100644 --- a/SmearcarDB/static/index.js +++ b/SmearcarDB/static/index.js @@ -2,6 +2,7 @@ var navSelect = "home"; var serverURL = window.location.href; var data; + var navi = [ // Array containing navigation items in form [Font-Awesome class name, Display Text, Onclick function]. ["home", "Home", "home"], ["bar-chart", "Data Values", "dataValues"], @@ -9,27 +10,34 @@ var navi = [ // Array containing navigation items in form [Font-Awesome class na ["bell", "Updates and Progress", "updates"] ]; -for (var i = 0; i < navi.length; i++) { // Create navigation tabs. - var side = document.getElementById("sidebar"); - var div = document.createElement("div"); - div.className = "navi transition"; - div.setAttribute("option", navi[i][2]); - div.onclick = function() { - var op = this.getAttribute("option"); - if (navSelect === op) return; - updateMain(op); - }; - var ic = document.createElement("i"); - ic.className = "fa fa-" + navi[i][0]; - ic["aria-hidden"] = true; - var p = document.createElement("p"); - p.appendChild(document.createTextNode(navi[i][1])); - div.appendChild(ic); - div.appendChild(p); - side.appendChild(div); -} +var dropOp = { + //Insert correct +}; -updateNav(navSelect); + +var dropOpStore = {}; + +function createNav() { + for (var i = 0; i < navi.length; i++) { // Create navigation tabs. + var side = document.getElementById("sidebar"); + var div = document.createElement("div"); + div.className = "navi transition"; + div.setAttribute("option", navi[i][2]); + div.onclick = function() { + var op = this.getAttribute("option"); + if (navSelect === op) return; + updateMain(op); + }; + var ic = document.createElement("i"); + ic.className = "fa fa-" + navi[i][0]; + ic["aria-hidden"] = true; + var p = document.createElement("p"); + p.appendChild(document.createTextNode(navi[i][1])); + div.appendChild(ic); + div.appendChild(p); + side.appendChild(div); + } +} function updateMain(op) { updateNav(op); @@ -61,6 +69,8 @@ function getData() { .then( function success(incoming) { data = incoming; + generateDropOp(); + createDrop(); }, function error(e) { console.log(e); @@ -73,3 +83,77 @@ function language(language) { return element.name === language; }); } + +function generateDropOp() { + dropOp["langSelect"] = ["Select language..."].concat(data.languages); +} + +function createDrop() { + var dropButtons = document.getElementsByClassName("dropdown"); + for(var i = 0; i < dropButtons.length; i++) { + var div = document.createElement("div"); + div.className = "button"; + var p = document.createElement("p"); + var op = dropButtons[i].getAttribute("option"); + p.appendChild(document.createTextNode(dropOp[op][0])); + var ic = document.createElement("i"); + ic.className = "fa fa-angle-down"; + ic["aria-hidden"] = true; + div.appendChild(p); + div.appendChild(ic); + var div2 = document.createElement("div"); + div2.className = "opCont transition"; + for(var j = 1; j < dropOp[op].length; j++) { + var p2 = document.createElement("p"); + p2.className = "transition"; + p2.onclick = function(e) { + e.stopPropagation(); + dropOpStore[op] = this.textContent; + dropOpUpdate(op); + let opCont = this.parentNode; + opCont.style.opacity = "0"; + setTimeout(function() { + opCont.style.display = "none"; + }, 300); + }; + p2.appendChild(document.createTextNode(dropOp[op][j])); + div2.appendChild(p2); + } + div.onclick = function(e) { + e.stopPropagation(); + let opCont = this.nextElementSibling; + if(opCont.style.display === "block") { + opCont.style.opacity = "0"; + setTimeout(function() { + opCont.style.display = "none"; + }, 300); + } else { + opCont.style.display = "block"; + setTimeout(function() { + opCont.style.opacity = "1"; + }, 30); + } + }; + dropButtons[i].appendChild(div); + dropButtons[i].appendChild(div2); + } +} + +function dropOpUpdate(op) { + var dropdown = document.querySelectorAll(".dropdown[option="+op+"] .button p")[0]; + dropdown.textContent = dropOpStore[op]; +} + +document.onclick = function(event) { + for(var i = 0 ; i < document.getElementsByClassName("dropdown").length; i++) { + var opCont = document.querySelectorAll(".dropdown .opCont")[i]; + opCont.style.opacity = "0"; + setTimeout(function() { + opCont.style.display = "none"; + }, 300); + } +} + +getData(); +createNav(); +updateNav(navSelect); diff --git a/SmearcarDB/templates/index.html b/SmearcarDB/templates/index.html index 1f98342..bcaa1c1 100644 --- a/SmearcarDB/templates/index.html +++ b/SmearcarDB/templates/index.html @@ -7,6 +7,7 @@ + @@ -24,6 +25,9 @@
+

Language

+