Merge branch 'master' of github.com:yamanq/smearcar-db

This commit is contained in:
yamanq 2018-04-19 21:13:23 -04:00
commit 8d8548b654
3 changed files with 380 additions and 297 deletions

View File

@ -170,6 +170,10 @@ a {
opacity: 1; opacity: 1;
} }
#home > div {
margin-bottom: 2vh;
}
.card { .card {
display: grid; display: grid;
border-radius: 2px; border-radius: 2px;
@ -359,7 +363,39 @@ a {
background-color: rgba(0, 0, 0, 0.05); background-color: rgba(0, 0, 0, 0.05);
} }
#newLanguage, #editLanguage, #login, #addUser { #header2 {
display:grid;
grid-template-columns: 80% 10% 10%;
grid-template-rows: 100%;
}
#signIn, #addUserButton, #addUpdateButton {
display: grid;
grid-template-columns: 70% 20%;
grid-template-rows: 100%;
grid-column: 3;
grid-row: 1;
cursor: pointer;
}
#addUpdateButton {
grid-column: 2;
}
#signIn:hover, #addUserButton:hover, #addUpdateButton:hover, #writePostButton:hover {
background-color: rgba(255,255,255,0.1);
}
#signIn p, #signIn i, #addUserButton p, #addUserButton i, #addUpdateButton p, #addUpdateButton i {
margin: auto;
font-size: 180%;
}
#addData, #editData, #addUserButton, #addUpdateButton {
display: none;
}
.modal {
position: absolute; position: absolute;
width: 100%; width: 100%;
height: 100%; height: 100%;
@ -368,124 +404,25 @@ a {
background-color: rgba(0,0,0,0.4); background-color: rgba(0,0,0,0.4);
} }
#newLanguage > div, #editLanguage > div, #login > div, #addUser > div { .modalSubmit {
position: absolute;
width: 20%;
height: 60%;
margin: 5% 40% 0 40%;
background-color: #F8F3F0;
grid-template-columns: 1fr;
grid-template-rows: 6vh 5% 70% auto;
}
#login > div {
height: 30%;
grid-template-rows: 6vh 1fr 1fr 1fr;
}
#addUser > div {
height: 40%;
grid-template-rows: 6vh 1fr 1fr 1fr 1fr;
}
#loginUsername, #loginPassword, #addUserUsername, #addUserPassword {
margin-left: 5%;
}
#login input, #addUser input {
border: 0;
background-color: rgba(0,0,0,0.1);
font-family: 'Saira Condensed', sans-serif;
font-size: 120%;
font-weight: 300;
padding: 2%;
width: 90%;
}
#newLanguageName, #editLanguageName, #loginUsername, #addUserUsername {
grid-row: 2;
}
#newLanguageName p, #editLanguageName p {
display: inline;
margin-left: 5%;
grid-row: 1;
}
#newLanguageName input, #editLanguageName input {
margin: auto 0 auto 0;
width: 50%;
grid-row: 1;
}
#newLanguagePhonemes, #editLanguagePhonemes, #loginPassword, #addUserAuthority {
grid-row: 3;
}
#addUserAuthority {
margin-left: 5%;
width: 90%;
}
#addUserPassword {
grid-row: 4;
}
#newLanguagePhonemes p, #editLanguagePhonemes p {
margin-left: 5%;
}
#newLanguagePhonemes textarea, #editLanguagePhonemes textarea {
width: 90%;
margin-left: 5%;
height: 90%;
resize: none;
font-family: 'Saira Condensed', sans-serif;
font-size: 1.5vh;
}
#newLanguageSubmit, #editLanguageSubmit, #loginSubmit, #addUserSubmit {
display: grid;
grid-row: 4;
}
#addUserSubmit {
grid-row: 5;
}
#newLanguageSubmit p, #editLanguageSubmit p, #loginSubmit p, #addUserSubmit p {
display: block; display: block;
width: 70%;
font-size: 3vh; font-size: 3vh;
margin: auto 10% auto; margin: auto;
padding: 1%; padding: 1%;
text-align: center; text-align: center;
cursor: pointer; cursor: pointer;
} }
#header2 { .modal input, .modal textarea {
display:grid; margin: 0 auto 0 auto;
grid-template-columns: 90% 10%; border: 0;
grid-template-rows: 100%; background-color: rgba(0,0,0,0.1);
} font-family: 'Saira Condensed', sans-serif;
font-size: 100%;
#signIn, #addUserButton { font-weight: 300;
display: grid; padding: 1vh;
grid-template-columns: 70% 20%; width: 90%;
grid-template-rows: 100%; outline: none;
grid-column: 2; resize: none;
grid-row: 1;
cursor: pointer;
}
#signIn:hover, #addUserButton:hover {
background-color: rgba(255,255,255,0.1);
}
#signIn p, #signIn i, #addUserButton p, #addUserButton i {
margin: auto;
font-size: 180%;
}
#addData, #editData, #addUserButton {
display: none;
} }

View File

@ -5,11 +5,10 @@ var data;
var languageChart; var languageChart;
var dataOpen = false; var dataOpen = false;
var submittable = true; var submittable = true;
var dropOp = {};
var dropOpStore = {};
var loginInfo = {}; var loginInfo = {};
// var trelloInfo = {};
var navi = [ // Array containing navigation items in form [Font-Awesome class name, Display Text, Onclick function]. var navi = [ // Array containing navigation items in form [Font-Awesome class name, Display Text, Onclick function].
["home", "Home", "home"], ["home", "Home", "home"],
["bar-chart", "Data Values", "dataValues1"], ["bar-chart", "Data Values", "dataValues1"],
@ -17,10 +16,6 @@ var navi = [ // Array containing navigation items in form [Font-Awesome class na
["info", "About", "about"] ["info", "About", "about"]
]; ];
var members = [
"Kenneth Jao", "Yaman Qalieh", "Enrico Colon"
];
var authorityLabels = { var authorityLabels = {
0: "#0: Full access", 0: "#0: Full access",
1: "#1: Create updates", 1: "#1: Create updates",
@ -28,11 +23,137 @@ var authorityLabels = {
3: "#3: No access" 3: "#3: No access"
}; };
var dropOp = {
//Insert correct
};
var dropOpStore = {}; var modals = [
{
name: "Add Language",
modal: "newLanguage",
button: "addData",
structure: {
width: "20%",
form: [
{
name: "Name",
formType: "input"
},
{
name: "Source",
formType: "input",
inputType: "file"
},
{
name: "Phonemes",
formType: "textarea",
height: "25vh"
}
]
}
},
{
name: "Edit Language",
modal: "editLanguage",
button: "editData",
buttonClick: function() {
var langInfo = language(dropOpStore["langSelect"]);
document.querySelectorAll("#editLanguageName input")[0].value = langInfo.name;
var k = Object.keys(langInfo.phonemes);
var v = Object.values(langInfo.phonemes);
var str = "";
for(var i = 0; i < k.length; i++) {
str += k[i] + " " + v[i] + ((i === k.length-1) ? "" : "\n");
}
document.querySelectorAll("#editLanguagePhonemes textarea")[0].value = str;
//modal("editLanguage", true);
},
structure: {
width: "20%",
form: [
{
name: "Name",
formType: "input"
},
{
name: "Source",
formType: "input",
inputType: "file"
},
{
name: "Phonemes",
formType: "textarea",
height: "25vh"
}
]
}
},
{
name: "Login",
modal: "login",
button: "signIn",
structure: {
width: "20%",
form: [
{
name: "Username",
formType: "input"
},
{
name: "Password",
formType: "input",
inputType: "password"
},
]
}
},
{
name: "Add User",
modal: "addUser",
button: "addUserButton",
structure: {
width: "20%",
form: [
{
name: "Username",
formType: "input"
},
{
name: "Authority",
formType: "input",
inputType: "number"
},
{
name: "Password",
formType: "input",
inputType: "password"
}
]
}
},
{
name: "Write Update",
modal: "writePost",
button: "addUpdateButton",
structure: {
width: "40%",
form: [
{
name: "Title",
formType: "input",
},
{
name: "Author",
formType: "input",
},
{
name: "Message",
formType: "textarea",
height: "18vh"
}
]
}
},
];
function Rnd(item,fig) { function Rnd(item,fig) {
if(varType(item) === "Array") { if(varType(item) === "Array") {
@ -117,6 +238,7 @@ function getData(updatePage) {
dropOpUpdate("langSelect"); dropOpUpdate("langSelect");
document.querySelectorAll(".dropdown[option='langSelect'] .opCont p[dropoption='"+(dropOpStore["langSelect"])+"']")[0].click(); document.querySelectorAll(".dropdown[option='langSelect'] .opCont p[dropoption='"+(dropOpStore["langSelect"])+"']")[0].click();
} }
generateModals();
}, },
function error(e) { function error(e) {
console.log(e); console.log(e);
@ -258,9 +380,6 @@ function createDrop() {
var p3 = document.createElement("p"); var p3 = document.createElement("p");
p3.className = "transition"; p3.className = "transition";
p3.id = "addData"; p3.id = "addData";
p3.onclick = function() { // Open add language.
modal("newLanguage", true);
};
p3.appendChild(document.createTextNode("Add language...")); p3.appendChild(document.createTextNode("Add language..."));
div2.appendChild(p3); div2.appendChild(p3);
} }
@ -324,8 +443,10 @@ document.onclick = function(event) {
function homeCards() { function homeCards() {
// TODO GET posts from server var home = document.getElementById("home");
while (home.firstChild) {
home.removeChild(home.firstChild);
}
$.ajax({ $.ajax({
url: serverURL + '/updates', url: serverURL + '/updates',
type: 'GET' type: 'GET'
@ -333,15 +454,14 @@ function homeCards() {
.then( .then(
function success(incoming) { function success(incoming) {
var postList = incoming; var postList = incoming;
var home = document.getElementById("home"); for(var i = postList.length - 1; i >= 0 ; i--) {
for(var i = 0; i < postList.length; i++) {
var div = document.createElement("div"); var div = document.createElement("div");
div.className = "card"; div.className = "card";
var h2 = document.createElement("h2"); var h2 = document.createElement("h2");
h2.textContent = postList[i].title; h2.textContent = postList[i].title;
div.appendChild(h2); div.appendChild(h2);
var h3 = document.createElement("h3"); var h3 = document.createElement("h3");
h3.textContent = postList[i].date; h3.textContent = postList[i].author + " - " + postList[i].date;
div.appendChild(h3); div.appendChild(h3);
var p = document.createElement("p"); var p = document.createElement("p");
p.innerHTML = postList[i].content; p.innerHTML = postList[i].content;
@ -425,19 +545,7 @@ function modal(id, open) {
} }
} }
var modals = ["newLanguage", "editLanguage", "login", "addUser"]; /*document.querySelectorAll("#addUser > div")[0].onclick = function(event) {
for(var i = 0; i < modals.length; i++) {
let id = modals[i];
document.getElementById(modals[i]).onclick = function(event) {
modal(id, false);
for(var j = 0; j < document.getElementsByTagName("input"); j++) document.getElementsByTagName("input")[j].value = "";
dropOpStore["authority"] = "";
document.querySelectorAll(".dropdown[option=authority] .button p")[0].textContent = dropOp["authority"][1];
};
document.querySelectorAll("#"+modals[i]+" > div")[0].onclick = function(event) { event.stopPropagation(); };
}
document.querySelectorAll("#addUser > div")[0].onclick = function(event) {
event.stopPropagation(); event.stopPropagation();
for (var i = 0; i < document.getElementsByClassName("dropdown").length; i++) { for (var i = 0; i < document.getElementsByClassName("dropdown").length; i++) {
var opCont = document.querySelectorAll(".dropdown .opCont")[i]; var opCont = document.querySelectorAll(".dropdown .opCont")[i];
@ -446,25 +554,84 @@ document.querySelectorAll("#addUser > div")[0].onclick = function(event) {
opCont.style.display = "none"; opCont.style.display = "none";
}, 300); }, 300);
} }
}*/
function generateModals() {
while(document.getElementsByClassName("modal").length > 0) {
document.getElementsByTagName("body")[0].removeChild(document.getElementsByClassName("modal")[0]);
}
for(var i = 0; i < modals.length; i++) {
let eachModal = modals[i];
var overlay = document.createElement("div");
overlay.id = modals[i].modal;
overlay.className = "transition modal";
var modalCont = document.createElement("div");
modalCont.className = "card transition";
modalCont.style.position = "absolute";
modalCont.style.paddingBottom = "1vh";
modalCont.style.width = modals[i].structure.width;
var marg = 50-parseInt(modals[i].structure.width.replace("%",""))/2;
modalCont.style.margin = "5% " + marg + "% 0 " + marg+"%";
var h2 = document.createElement("h2");
h2.appendChild(document.createTextNode(modals[i].name));
h2.style.gridRow = "1";
modalCont.appendChild(h2);
var gridTemplate = "6vh ";
var form = modals[i].structure.form;
for(var j = 0; j < form.length; j++) {
gridTemplate += (form[j].formType === "input") ? "7vh " : "auto ";
var div = document.createElement("div");
div.id = modals[i].modal + form[j].name;
div.style.marginLeft = "5%";
div.style.gridRow = j+2;
var p = document.createElement("p");
p.appendChild(document.createTextNode(form[j].name + ":"));
var input = document.createElement(form[j].formType);
if(form[j].inputType) input.type = form[j].inputType;
if(form[j].height) input.style.height = form[j].height;
div.appendChild(p);
div.appendChild(input);
modalCont.appendChild(div);
}
gridTemplate += "7vh";
modalCont.style.gridTemplateRows = gridTemplate;
modalCont.style.gridTemplateColumns = "100%";
var submit = document.createElement("div");
submit.id = modals[i].modal + "Submit";
submit.style.gridRow = form.length+2;
submit.style.display = "grid";
submit.onclick = function() {
(eachModal.submitClick)();
}
var p2 = document.createElement("p");
p2.className = "card modalSubmit"; // Refer to modalSubmit CSS to edit.
p2.appendChild(document.createTextNode("Submit!"));
submit.appendChild(p2);
modalCont.appendChild(submit);
overlay.appendChild(modalCont);
document.getElementsByTagName("body")[0].appendChild(overlay);
console.log(modals[i].button);
document.getElementById(modals[i].button).onclick = function() {
if(eachModal.buttonClick) (eachModal.buttonClick)();
modal(eachModal.modal, true);
}
overlay.onclick = function(event) {
if(this !== event.target) return;
for(var i = 0; i < document.getElementsByTagName("input").length; i++) document.getElementsByTagName("input")[i].value = "";
modal(eachModal.modal, false);
}
}
} }
document.getElementById("editData").onclick = function() { // Open edit language. modals[0].submitClick = function() { // submitClick for newLanguage.
var langInfo = language(dropOpStore["langSelect"]);
document.querySelectorAll("#editLanguageName input")[0].value = langInfo.name;
var k = Object.keys(langInfo.phonemes);
var v = Object.values(langInfo.phonemes);
var str = "";
for(var i = 0; i < k.length; i++) {
str += k[i] + " " + v[i] + ((i === k.length-1) ? "" : "\n");
}
document.querySelectorAll("#editLanguagePhonemes textarea")[0].value = str;
modal("editLanguage", true);
};
document.getElementById("signIn").onclick = function() { modal("login", true); };
document.getElementById("addUserButton").onclick = function() { modal("addUser", true); };
document.querySelectorAll("#newLanguageSubmit p")[0].onclick = function() { // Function for adding a language.
if(!submittable) return; if(!submittable) return;
submittable = false; submittable = false;
var name = document.querySelectorAll("#newLanguageName input")[0].value; var name = document.querySelectorAll("#newLanguageName input")[0].value;
@ -491,16 +658,30 @@ document.querySelectorAll("#newLanguageSubmit p")[0].onclick = function() { // F
} }
phonemes[info[i][0]] = num; phonemes[info[i][0]] = num;
} }
var formData = new FormData();
var source = document.querySelectorAll("#newLanguageSource input")[0].files;
if(source.length === 0 || source[0].type) {
alert("Please give a source!");
submittable = true;
return;
}
formData.append("source", source[0]);
formData.append("name", name);
formData.append("phonemes", phonemes);
formData.append("editor", loginInfo);
var newLanguage = { var newLanguage = {
name: name, name: name,
source: null, source: sourceData,
phonemes: phonemes, phonemes: phonemes,
editor: loginInfo editor: loginInfo
}; };
this.innerText = "Processing..."; var p = document.querySelectorAll("#newLanguageSubmit p ")[0]
this.style.backgroundColor = "rgba(0,0,0,0.2)"; p.innerText = "Processing...";
var p = this; p.style.backgroundColor = "rgba(0,0,0,0.2)";
$.ajax({ $.ajax({
url: serverURL + '/server', url: serverURL + '/server',
type: 'POST', type: 'POST',
@ -528,7 +709,7 @@ document.querySelectorAll("#newLanguageSubmit p")[0].onclick = function() { // F
); );
}; };
document.querySelectorAll("#editLanguageSubmit p")[0].onclick = function() { // Function for submitting edits to language. modals[1].submitClick= function() { // submitClick for editLanguage.
if(!submittable) return; if(!submittable) return;
var langInfo = language(dropOpStore["langSelect"]); var langInfo = language(dropOpStore["langSelect"]);
submittable = false; submittable = false;
@ -559,9 +740,9 @@ document.querySelectorAll("#editLanguageSubmit p")[0].onclick = function() { //
} }
console.log(newPhonemes); console.log(newPhonemes);
this.innerText = "Processing..."; var p = document.querySelectorAll("#editLanguageSubmit p")[0]
this.style.backgroundColor = "rgba(0,0,0,0.2)"; p.innerText = "Processing...";
var p = this; p.style.backgroundColor = "rgba(0,0,0,0.2)";
var oldPhoneset = new Set(Object.keys(langInfo.phonemes)); var oldPhoneset = new Set(Object.keys(langInfo.phonemes));
var newPhoneset = new Set(Object.keys(newPhonemes)); var newPhoneset = new Set(Object.keys(newPhonemes));
@ -726,7 +907,7 @@ document.querySelectorAll("#editLanguageSubmit p")[0].onclick = function() { //
} }
}; };
document.querySelectorAll("#loginSubmit p")[0].onclick = function() { modals[2].submitClick = function() { // submitClick for login.
var info = [ var info = [
document.querySelectorAll("#loginUsername input")[0], document.querySelectorAll("#loginUsername input")[0],
document.querySelectorAll("#loginPassword input")[0] document.querySelectorAll("#loginPassword input")[0]
@ -744,20 +925,21 @@ document.querySelectorAll("#loginSubmit p")[0].onclick = function() {
document.getElementById("addData").style.display = "block"; document.getElementById("addData").style.display = "block";
document.getElementById("editData").style.display = "grid"; document.getElementById("editData").style.display = "grid";
document.getElementById("addUserButton").style.display = "grid"; document.getElementById("addUserButton").style.display = "grid";
document.getElementById("addUpdateButton").style.display = "grid";
document.getElementById("signIn").style.display = "none"; document.getElementById("signIn").style.display = "none";
setTimeout(function() { setTimeout(function() {
info[0].value = ""; info[0].value = "";
info[1].value = ""; info[1].value = "";
}, 300) }, 300);
}; };
document.querySelectorAll("#addUserSubmit p")[0].onclick = function() { modals[3].submitClick = function() {
if(!submittable) return; if(!submittable) return;
submittable = false; submittable = false;
var info = [ var info = [
document.querySelectorAll("#addUserUsername input")[0], document.querySelectorAll("#addUserUsername input")[0],
document.querySelectorAll("#addUserPassword input")[0], document.querySelectorAll("#addUserPassword input")[0],
parseInt(dropOpStore["authority"]) document.querySelectorAll("#addUserAuthority input")[0]
]; ];
if(info[0].value === "") { if(info[0].value === "") {
alert("Please enter in a username!"); alert("Please enter in a username!");
@ -773,19 +955,18 @@ document.querySelectorAll("#addUserSubmit p")[0].onclick = function() {
return; return;
} }
this.innerText = "Processing..."; var p = document.querySelectorAll("#addUserSubmit p")[0]
this.style.backgroundColor = "rgba(0,0,0,0.2)"; p.innerText = "Processing...";
var p = this; p.style.backgroundColor = "rgba(0,0,0,0.2)";
$.ajax({ $.ajax({
url: serverURL + '/editors', url: serverURL + '/editors',
type: 'POST', type: 'POST',
dataType: "json", dataType: "json",
contentType: 'application/json;charset=UTF-8', contentType: 'application/json;charset=UTF-8',
context: {counter: i},
data: JSON.stringify({ data: JSON.stringify({
username: info[0].value, username: info[0].value,
authority: info[2], authority: parseInt(info[2]),
password: info[1].value, password: info[1].value,
editor: loginInfo editor: loginInfo
}) })
@ -810,37 +991,67 @@ document.querySelectorAll("#addUserSubmit p")[0].onclick = function() {
} }
} }
); );
} };
/*function getTrelloCards() { modals[4].submitClick = function() {
Trello.authorize(); if(!submittable) return;
var cardArr, listArr, lists; submittable = false;
var cards = window.Trello.rest( var info = [
"GET", "boards/vm2c2IZd/cards", document.querySelectorAll("#writePostTitle input")[0],
function success() { document.querySelectorAll("#writePostAuthor input")[0],
cardArr = JSON.parse(cards.responseText); document.querySelectorAll("#writePostMessage textarea")[0]
lists = window.Trello.rest( ];
"GET", "boards/vm2c2IZd/lists", if(info[0].value === "") {
function success() { alert("Please enter in a title!");
listArr = JSON.parse(lists.responseText); submittable = true;
for(var i = 0; i < listArr.length; i++) { return;
var arr = cardArr.filter(function(obj) { } else if(info[1].value === "") {
return obj.idList === listArr[i].id; alert("Please enter in an author!");
}).map(a => a.name); submittable = true;
trelloInfo[listArr[i].name] = arr; return;
} else if(info[2].value === "") {
alert("Please enter in a message!");
submittable = true;
return;
} }
var p = document.querySelectorAll("#writePostSubmit p")[0]
p.innerText = "Processing...";
p.style.backgroundColor = "rgba(0,0,0,0.2)";
$.ajax({
url: serverURL + '/updates',
type: 'POST',
dataType: "json",
contentType: 'application/json;charset=UTF-8',
data: JSON.stringify({
title: info[0].value,
author: info[1].value,
content: info[2].value,
editor: loginInfo
})
})
.then(
function success(incoming) {
modal("writePost", false);
homeCards();
setTimeout(function() {
info[0].value = "";
info[1].value = "";
info[2].value = "";
submittable = true;
p.innerText = "Submit!";
p.style.backgroundColor = "#FEFEFE";
}, 300);
}, },
function error(e) { function error(e) {
alert("There was an error adding a post.");
console.log(e); console.log(e);
}); }
}, );
function error(e) { };
console.log(e);
});
}*/
getData(); getData();
homeCards(); homeCards();
createNav(); createNav();
updateNav(navSelect); updateNav(navSelect);

View File

@ -20,6 +20,10 @@
<h1>/'smi:ɹ̠ka:ɹ̠/</h1> <h1>/'smi:ɹ̠ka:ɹ̠/</h1>
</div> </div>
<div id="header2"> <div id="header2">
<div id="addUpdateButton" class="transition">
<p>Update</p>
<i class="fa fa-edit"></i>
</div>
<div id="signIn" class="transition"> <div id="signIn" class="transition">
<p>Login</p> <p>Login</p>
<i class="fa fa-sign-in"></i> <i class="fa fa-sign-in"></i>
@ -64,7 +68,7 @@
<canvas class="transition"></canvas> <canvas class="transition"></canvas>
</div> </div>
</div> </div>
<div id="dataValues2" class="optionContainer"> <!-- <div id="dataValues2" class="optionContainer">
<div class="row"> <div class="row">
<div id="langSelect" class="card"> <div id="langSelect" class="card">
<h2>Language</h2> <h2>Language</h2>
@ -89,7 +93,7 @@
<div id="langGraph" class="card"> <div id="langGraph" class="card">
<canvas class="transition"></canvas> <canvas class="transition"></canvas>
</div> </div>
</div> </div> -->
<div id="files" class="optionContainer"> <div id="files" class="optionContainer">
<div class="temp card"> <div class="temp card">
<h2>Currently in progress!</h2> <h2>Currently in progress!</h2>
@ -101,75 +105,6 @@
</div> </div>
</div> </div>
</div> </div>
<div id="newLanguage" class="transition">
<div class="card transition">
<h2>Add Language</h2>
<div id="newLanguageName">
<p>Name:</p>
<input>
</div>
<div id="newLanguagePhonemes">
<p>Phonemes:</p>
<textarea></textarea>
</div>
<div id="newLanguageSubmit">
<p class="card">Submit!</p>
</div>
</div>
</div>
<div id="editLanguage" class="transition">
<div class="card transition">
<h2>Edit Language</h2>
<div id="editLanguageName">
<p>Name:</p>
<input>
</div>
<div id="editLanguagePhonemes">
<p>Phonemes:</p>
<textarea></textarea>
</div>
<div id="editLanguageSubmit">
<p class="card">Submit!</p>
</div>
</div>
</div>
<div id="login" class="transition">
<div class="card transition">
<h2>Login</h2>
<div id="loginUsername">
<p>Username:</p>
<input>
</div>
<div id="loginPassword">
<p>Password:</p>
<input type="password">
</div>
<div id="loginSubmit">
<p class="card">Submit!</p>
</div>
</div>
</div>
<div id="addUser" class="transition">
<div class="card transition">
<h2>Add New User</h2>
<div id="addUserUsername">
<p>Username:</p>
<input>
</div>
<div id="addUserAuthority">
<p>Authority:</p>
<div option="authority" class="dropdown transition">
</div>
</div>
<div id="addUserPassword">
<p>Password:</p>
<input type="password">
</div>
<div id="addUserSubmit">
<p class="card">Submit!</p>
</div>
</div>
</div>
</body> </body>
<script src="{{ url_for('static', filename='index.js') }}"></script> <script src="{{ url_for('static', filename='index.js') }}"></script>