Skip to content

Instantly share code, notes, and snippets.

@bogdan-nourescu
Last active June 15, 2019 10:11
Show Gist options
  • Save bogdan-nourescu/c7a9249769a77b9f259b166d9d8c9fbd to your computer and use it in GitHub Desktop.
Save bogdan-nourescu/c7a9249769a77b9f259b166d9d8c9fbd to your computer and use it in GitHub Desktop.
<!DOCTYPE html>
<html>
<head>
<title>Linkuri Utile</title>
<style>
table{
border-collapse:collapse;
width:100%;
}
.brain{
width:40px;
height:40px;
vertical-align:middle;
}
.tag{
border: 1px solid orange;
border-radius:15px;
padding:3px 7px;
}
.editBtn{
display: inline-block;
width: 30px;
height: 30px;
background-position: center;
background-repeat: no-repeat;
background-size: contain;
background-image: url(61456.svg);
}
.delBtn{
display: inline-block;
width: 30px;
height: 30px;
background-position: center;
background-repeat: no-repeat;
background-size: contain;
background-image: url(627249-delete3-512.png);
}
.hidden{
display:none;
}
</style>
<script>
var lista = [];
var indexEdit = -1;
var complexityColors = ["yellow","green","blue","teal","black","red"];
/*async function forCuAjax(){
var promiseArr = [];
for(var i=0;i<lista.length;i++){
promiseArr.push(ajaxPromise());
}
var responseArray = await Promise.all(promiseArr);
}*/
function ajax(url, method, body, callback, callbackError){
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 ){
if (this.status == 200) {
if(typeof callback==="function"){
callback(this.responseText);
}
}else{
if(typeof callbackError==="function"){
callbackError(this.responseText);
}
}
}
};
xhttp.open(method, url, true);
xhttp.send(body);
}
async function ajaxPromise(url, method, body){
return new Promise(function(resolve,reject){
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 ){
if (this.status == 200) {
resolve(this.responseText);
}else{
reject(this);
}
}
};
xhttp.open(method, url, true);
xhttp.send(body);
});
}
async function getLista(){
/*ajax("https://linkuri-utile-grupa-6.firebaseio.com/.json",
"GET",
undefined,
function(responseText){
window.lista = JSON.parse(responseText);
draw();
},
function(){
alert("a crapat");
});*/
/*return ajaxPromise("https://linkuri-utile-grupa-6.firebaseio.com/.json","GET")
.then(function(responseText){
window.lista = JSON.parse(responseText);
draw();
});*/
var responseText = await ajaxPromise("https://linkuri-utile-grupa-6.firebaseio.com/.json","GET");
window.lista = JSON.parse(responseText);
draw();
}
async function del(idx){
if(confirm(`Are you sure you want to delete ${lista[idx].name} ?`)){
//lista.splice(idx,1);
/*ajax(`https://linkuri-utile-grupa-6.firebaseio.com/${idx}.json`,
"DELETE",
undefined,
getLista
);*/
/*return ajaxPromise(`https://linkuri-utile-grupa-6.firebaseio.com/${idx}.json`,"DELETE")
.then(getLista);*/
await ajaxPromise(`https://linkuri-utile-grupa-6.firebaseio.com/${idx}.json`,"DELETE");
getLista();
}
}
function edit(idx){
showForm();
var form = document.querySelector("#addForm");
form.querySelector("[name=\"name\"]").value=lista[idx].name;
form.querySelector("[name=\"url\"]").value=lista[idx].url;
form.querySelector("[name=\"description\"]").value=lista[idx].description;
form.querySelector("[name=\"tags\"]").value=lista[idx].tags.join("\n");
form.querySelector("[name=\"complexity\"]").value=lista[idx].complexity;
indexEdit = idx;
}
function showForm(){
document.querySelector("#addForm").classList.remove("hidden");
document.querySelector("#addForm").reset();
indexEdit = -1;
}
function hideForm(){
document.querySelector("#addForm").classList.add("hidden");
}
async function add(event,form){
event.preventDefault();
var obj = {
name: form.querySelector("[name=\"name\"]").value,
url: form.querySelector("[name=\"url\"]").value,
description: form.querySelector("[name=\"description\"]").value,
tags: form.querySelector("[name=\"tags\"]").value.split(/[\n\r]+/g),
complexity: form.querySelector("[name=\"complexity\"]").value
};
if(indexEdit===-1){
//lista.push(obj);
/*ajax("https://linkuri-utile-grupa-6.firebaseio.com/.json",
"POST",
JSON.stringify(obj),
function(){
getLista();
hideForm();
form.reset();
});*/
/*return ajaxPromise(
"https://linkuri-utile-grupa-6.firebaseio.com/.json",
"POST",
JSON.stringify(obj))
.then(function(){
getLista();
hideForm();
form.reset();
});*/
await ajaxPromise( "https://linkuri-utile-grupa-6.firebaseio.com/.json","POST",JSON.stringify(obj))
}else{
//lista[indexEdit]=obj;
/*ajax(`https://linkuri-utile-grupa-6.firebaseio.com/${indexEdit}.json`,
"PUT",
JSON.stringify(obj),
function(responseText){
getLista();
hideForm();
form.reset();
});*/
/*return ajaxPromise(
`https://linkuri-utile-grupa-6.firebaseio.com/${indexEdit}.json`,
"PUT",
JSON.stringify(obj))
.then(function(){
getLista();
hideForm();
form.reset();
});*/
await ajaxPromise(
`https://linkuri-utile-grupa-6.firebaseio.com/${indexEdit}.json`,
"PUT",
JSON.stringify(obj));
}
getLista();
hideForm();
form.reset();
}
function draw(){
var str = "";
for(var i in lista){
var tags = "";
for(var j=0;j<lista[i].tags.length;j++){
tags+=`<span class="tag">${lista[i].tags[j]}</span>`
}
str+=`
<tr>
<td>
<svg class="brain" style="fill:${complexityColors[lista[i].complexity]};" viewBox="0 0 100 100"><path d="M96.674,40.998c-0.018-0.042-0.048-0.077-0.09-0.1c-2.16-1.22-4.451-1.839-6.809-1.839c-3.1,0-6.219,1.092-9.268,3.244 c-0.248,0.174-0.537,0.266-0.838,0.266c-0.474,0-0.918-0.23-1.19-0.616c-0.462-0.655-0.306-1.564,0.351-2.027 c3.653-2.579,7.025-3.832,10.307-3.832c1.604,0,3.234,0.299,4.988,0.917c0.083,0.029,0.176,0.002,0.23-0.067 c0.057-0.07,1.369-1.779,0.662-5.938c-0.313-1.494-0.887-2.714-1.699-3.615c-1.637-2.077-3.297-2.513-4.402-2.513 c-0.686,0-1.12,0.171-1.139,0.178c-0.04,0.016-0.074,0.044-0.097,0.082c-1.588,2.497-3.431,4.174-6.798,6.189 c-0.227,0.135-0.484,0.206-0.746,0.206c-0.51,0-0.987-0.271-1.249-0.708c-0.412-0.688-0.187-1.583,0.501-1.995 c4.064-2.432,5.68-4.031,6.658-6.599c0.494-1.812-0.115-4.256-1.412-5.676l-0.26-0.319c-1.475-1.815-4.216-5.194-11.146-6.969 c-0.962-0.306-1.944-0.461-2.92-0.461c-2.824,0-4.666,1.271-4.743,1.325c-0.076,0.053-0.107,0.15-0.078,0.237 c0.275,0.808,1.113,3.266,0.26,6.018c-0.189,0.613-0.749,1.024-1.389,1.024c-0.146,0-0.291-0.021-0.432-0.065 c-0.765-0.238-1.195-1.054-0.957-1.82c0.565-1.823,0.444-3.433-0.369-4.92c-1.063-1.946-2.537-3.256-4.497-4.003 c-1.871-0.796-4.836-0.973-6.032-1.012c-7.705,0.042-13.198,0.538-20.15,3.025c-0.89,0.29-1.584,0.873-1.955,1.64 c-0.438,0.908-0.428,2.04,0.031,3.273c0.006,0.015,0.022,0.065,0.05,0.145c0.538,1.574,1.064,2.986,1.564,4.199 c0.148,0.359,0.148,0.754-0.001,1.113c-0.149,0.358-0.429,0.638-0.788,0.786c-0.178,0.073-0.364,0.11-0.554,0.11 c-0.587,0-1.115-0.354-1.346-0.901c-0.417-0.995-1.716-4.25-1.728-4.28c-0.024-0.064-0.626-1.574-2.565-1.574 c-1.456,0-3.263,0.867-5.366,2.575c-2.797,2.167-4.225,4.13-4.245,5.833c-0.014,1.201,0.703,1.796,0.753,1.835 c0.577,0.368,3.712,2.758,5.022,4.217c0.548,0.609,0.53,1.515-0.041,2.061c-0.272,0.26-0.629,0.403-1.005,0.403 c-0.401,0-0.774-0.16-1.051-0.449c-3.252-3.397-5.918-5.05-8.152-5.05c-0.314,0-0.622,0.034-0.916,0.101 c-0.867,0.199-2.273,1.198-3.119,2.514c-2.983,3.876-3.957,6.917-4.232,12.121c-0.166,3.115,0.675,6.155,1.619,7.476 c1.327,1.856,2.669,2.907,3.178,3.275c0,0,0.409,0.26,0.565,0.138c1.328-1.043,2.849-1.591,4.716-1.591 c1.117,0,2.38,0.188,3.754,0.56c0.364,0.099,0.668,0.337,0.855,0.671c0.192,0.342,0.239,0.755,0.128,1.132 c-0.18,0.616-0.753,1.046-1.396,1.046c-0.138,0-0.275-0.021-0.408-0.059c-0.96-0.28-1.856-0.399-2.662-0.423 c-0.794-0.021-2.242,0.054-2.898,0.795c-0.03,0.034-0.057,0.068-0.067,0.111c-0.009,0.041-0.164,3.581,4.875,5.387 c4.232,1.516,6.432,1.566,15.629,1.566c1.356,0,2.848-0.014,4.693-0.045c0.465-0.013,1.124-0.242,1.544-0.729 c0.32-0.37,0.457-0.834,0.396-1.319c-0.005-0.781,0.116-1.494,0.384-2.244c1.102-3.088,3.321-5.104,7.196-6.541 c0.164-0.061,0.333-0.092,0.506-0.092c0.605,0,1.152,0.382,1.363,0.95c0.135,0.364,0.121,0.759-0.042,1.112 c-0.162,0.354-0.451,0.622-0.815,0.758c-2.963,1.099-4.788,2.669-5.426,4.666c-1.075,3.37,1.413,7.07,1.443,7.1 c7.405,7.257,21.792,7.464,22.515,5.45c0.609-1.495,1.028-3.868-0.441-6.687c-2.301-4.414-10.107-4.688-10.186-4.692 c-0.801-0.022-1.436-0.693-1.413-1.492c0.021-0.78,0.675-1.415,1.489-1.415l0,0c0.391,0.011,9.591,0.313,12.688,6.255 c1.682,3.225,1.445,6.095,0.949,7.94c-0.119,0.495-0.029,0.995,0.24,1.338c0.172,0.216,0.493,0.474,1.063,0.474 c0,0,5.096,0.033,9.26-0.833c0.563-0.116,1.1,0.3,1.188,0.865c0.088,0.567-0.301,1.099-0.867,1.187 c-6.111,0.956-11.469,1.434-16.12,1.434c-5.62,0-10.209-0.699-13.853-2.098c0.062,2.569,0.935,4.809,2.522,6.642 c0.01,0.015,0.019,0.026,0.028,0.04c0.529,0.557,1.322,1.345,2.046,2.005c0.554,0.505,3.175,2.175,3.857,2.587 c1.316,0.768,7.3,4.45,7.875,4.82c2.634,1.697,3.414,3.539,3.496,3.649c0.281,0.372,0.426,1.476,0.426,1.476 c0.238,0.99,1.131,1.726,2.195,1.723c1.243-0.003,2.25-1.014,2.246-2.258c0,0,0.035-2.529-0.951-4.262 c-0.158-0.321-2.233-3.721-4.628-5.568c-0.727-0.561-2.442-1.815-2.442-1.815l-0.01-0.005c-0.195-0.133-0.256-0.395-0.131-0.598 c0.127-0.206,0.398-0.272,0.607-0.145c0,0,5.053,3.549,8.221,2.666c4.656-1.297,10.75-4.359,10.75-11.249 c0-1.024-0.102-1.987-0.296-2.894c0.646-0.344,1.288-0.733,1.929-1.18c0.752-0.602,0.976-1.348,1.031-1.868 c0.078-0.744-0.137-1.532-0.562-2.052l-3.068-3.951l-0.036-0.039c-0.639-0.812-1.475-0.982-2.065-0.982 c-0.503,0-0.897,0.121-1.108,0.201c-1.078,0.544-2.214,0.99-3.371,1.325c-0.762,0.219-1.585-0.244-1.801-0.994 c-0.107-0.373-0.064-0.766,0.123-1.106c0.188-0.34,0.496-0.586,0.87-0.693c2.64-0.763,7.403-2.869,9.661-8.402 c0.223-0.55,0.752-0.905,1.348-0.905c0.188,0,0.372,0.036,0.547,0.108c0.743,0.302,1.102,1.153,0.798,1.896 c-0.724,1.775-1.716,3.382-2.966,4.804c-0.57,0.92-0.496,1.873,0.234,2.922l2.004,2.604c0.027,0.037,0.064,0.063,0.107,0.074 c0.033,0.01,0.816,0.231,1.934,0.231c1.506,0,3.637-0.409,5.232-2.363c3.898-4.661,4.088-8.694,4.225-11.639 c0.015-0.293,0.027-0.578,0.044-0.882C98.668,42.479,97.29,41.384,96.674,40.998z M36.965,39.066 c-1.875,1.853-3.944,3.217-6.147,4.056c-0.025,0.009-0.046,0.023-0.064,0.041c-1.014,0.551-1.368,1.311-1.179,2.537l0.835,4.753 c0.075,0.381-0.003,0.769-0.22,1.091s-0.545,0.542-0.927,0.616c-0.785,0.155-1.556-0.374-1.708-1.146l-0.91-5.13 c-0.278-1.078-1.313-1.648-1.984-1.724c-0.027-0.015-0.059-0.024-0.093-0.025c-7.229-0.261-13.015-4.931-13.073-4.978 c-0.3-0.247-0.487-0.595-0.526-0.981c-0.038-0.386,0.077-0.765,0.322-1.065c0.277-0.339,0.688-0.533,1.126-0.533 c0.333,0,0.66,0.116,0.919,0.328c0.219,0.178,5.435,4.361,11.695,4.361c3.694,0,7.022-1.437,9.891-4.269 c0.552-0.546,1.51-0.541,2.056,0.013c0.273,0.276,0.422,0.643,0.419,1.031C37.396,38.429,37.242,38.793,36.965,39.066z M38.882,28.967c-4.545,0-7.796,2.812-7.933,2.931c-0.266,0.233-0.606,0.362-0.959,0.362c-0.419,0-0.818-0.18-1.093-0.494 c-0.256-0.292-0.384-0.666-0.358-1.054c0.024-0.387,0.199-0.742,0.491-0.998c1.991-1.75,5.635-3.619,9.889-3.619 c3.065,0,5.996,0.972,8.712,2.89c0.317,0.224,0.528,0.558,0.594,0.941c0.066,0.382-0.021,0.768-0.245,1.085 c-0.272,0.386-0.717,0.616-1.189,0.616c-0.301,0-0.59-0.092-0.837-0.267C43.705,29.772,41.325,28.967,38.882,28.967z M72.535,49.581 c-0.25,0.298-0.601,0.48-0.987,0.514c-6.263,0.549-10.929-0.831-13.767-4.08c-0.443-0.506-0.849-1.073-1.205-1.685 c-0.008-0.015-0.02-0.029-0.031-0.042c-0.377-0.379-0.893-0.582-1.535-0.605c-0.227-0.008-0.467,0.006-0.734,0.044 c-0.029-0.006-1.84,0.392-3.618,0.333c-4.008-0.132-6.585-2.011-6.692-2.09c-0.646-0.476-0.783-1.388-0.307-2.034 c0.284-0.387,0.742-0.608,1.222-0.59c0.291,0.01,0.569,0.106,0.806,0.279c0.081,0.058,2.017,1.343,5.049,1.523 c1.466,0.087,2.904-0.376,3.079-0.45c1.121-0.471,1.079-1.714,1.024-2.195c-0.238-2.811,0.26-5.053,0.28-5.148 c0.173-0.769,0.962-1.274,1.739-1.098c0.779,0.177,1.273,0.955,1.098,1.736c-0.014,0.063-1.338,6.288,2.026,10.122 c2.197,2.503,6.026,3.548,11.313,3.083c0.816-0.068,1.507,0.532,1.575,1.322C72.903,48.906,72.785,49.283,72.535,49.581z M71.393,27.072c-2.604,2.497-3.887,6.469-3.265,10.121c0.122,0.711-0.359,1.389-1.069,1.51c-0.074,0.013-0.149,0.019-0.223,0.019 c-0.639,0-1.211-0.453-1.288-1.089c-0.478-3.902,0.785-7.504,0.8-7.541c0.084-0.205,0.095-0.383,0.031-0.529 c-0.076-0.18-0.25-0.279-0.385-0.332c-3.904-0.432-10.935-1.918-14.2-7.014c-0.503-0.741-1.819-0.361-3.95-0.364 c-9.574-0.016-10.931-6.165-10.984-6.427c-0.069-0.342-0.001-0.692,0.192-0.983c0.193-0.292,0.487-0.491,0.83-0.56 c0.086-0.018,0.174-0.027,0.261-0.027c0.613,0,1.151,0.436,1.28,1.036c0.041,0.176,1.091,4.34,8.443,4.34 c0.364,0,0.743-0.01,1.126-0.031c0.845-0.103,1.318-0.548,1.441-1.358c0.121-2.833,2.255-4.939,3.497-5.736 c0.211-0.136,0.455-0.208,0.705-0.208c0.449,0,0.861,0.225,1.104,0.602c0.189,0.294,0.252,0.644,0.177,0.985 c-0.075,0.342-0.278,0.634-0.571,0.823c-0.135,0.089-3.305,2.208-1.962,5.336c2.418,5.634,10.642,6.83,14.065,7.082 c0.432-0.034,0.924-0.292,1.346-0.708c0.289-0.333,0.54-0.601,0.789-0.839c3.327-3.189,3.526-6.311,3.533-6.442 c0.037-0.72,0.652-1.28,1.367-1.243c0.715,0.032,1.275,0.639,1.248,1.353C75.725,19.022,75.523,23.114,71.393,27.072z"></path></svg>
<a href="${lista[i].url}">${lista[i].name}</a>
</td>
<td>${lista[i].description}</td>
<td>
${tags}
</td>
<td>
<div class="editBtn" onclick="edit('${i}')"></div>
<div class="delBtn" onclick="del('${i}')"></div>
</td>
</tr>
`;
}
document.querySelector("table tbody").innerHTML = str;
}
</script>
</head>
<body onload="getLista();">
<input type="button" value="ADD" onclick="showForm();"/>
<form id="addForm" class="hidden" onsubmit="add(event,this);">
<label>Name: <input type="text" name="name"/></label><br />
<label>Link: <input type="text" name="url"/></label><br />
<label>Description: <textarea name="description"></textarea></label><br />
<label>Tags: <textarea name="tags"></textarea></label><br />
<label>
Complexity:
<select name="complexity">
<option value="0">Basic</option>
<option value="1">Easy</option>
<option value="2">Medium</option>
<option value="3">Advanced</option>
<option value="4">Complex</option>
<option value="5">Guru</option>
</select>
</label><br />
<input type="submit" value="Add" />
<input type="button" value="Cancel" onclick="hideForm();"/>
</form>
<table border="1">
<thead>
<tr>
<th>Nume</th>
<th>Descriere</th>
<th>Taguri</th>
<th></th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment