feat: ✨ Turnieje
Zmiana dodająca mozliwosc dodawania, edycji i usuwania turniejów
This commit is contained in:
parent
ddbcc3cb46
commit
5d6a42135b
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"livePreview.defaultPreviewPath": "/frontend/tworzenie_/index.html"
|
||||
}
|
187
frontend/panel_organizatora/index.html
Normal file
187
frontend/panel_organizatora/index.html
Normal file
@ -0,0 +1,187 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>Todo App</title>
|
||||
<link href='https://fonts.googleapis.com/css?family=Lato:300,400,700' rel='stylesheet' type='text/css'>
|
||||
<link rel="stylesheet" href="style.css" type="text/css" media="screen" charset="utf-8">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<header>
|
||||
<p> Padel</p>
|
||||
<a href="#">Wiadomości</a>
|
||||
<a href="#">Kalendarz turniejów</a>
|
||||
<a href="#">Ranking</a>
|
||||
<a href="#">Wyniki</a>
|
||||
<a href="#">Kontakt</a>
|
||||
<span class="dot">JM</span>
|
||||
</header>
|
||||
<div class="container">
|
||||
<div class="tournametns_add">
|
||||
<style scoped>
|
||||
ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
li * {
|
||||
float: left;
|
||||
}
|
||||
|
||||
li,
|
||||
h3 {
|
||||
clear: both;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
input,
|
||||
button {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
button.edit {
|
||||
padding: 10;
|
||||
}
|
||||
|
||||
button.delete {
|
||||
padding: 10;
|
||||
}
|
||||
|
||||
button {
|
||||
background: none;
|
||||
border: 0px;
|
||||
color: #888;
|
||||
font-size: 15px;
|
||||
width: 60px;
|
||||
font-family: Lato, sans-serif;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
h3,
|
||||
label[for='new-task'] {
|
||||
color: gray;
|
||||
font-weight: 700;
|
||||
font-size: 15px;
|
||||
border-bottom: 2px solid #333;
|
||||
padding: 30px 0 10px;
|
||||
margin: 0;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
input[type="text"] {
|
||||
margin: 0;
|
||||
font-size: 18px;
|
||||
line-height: 18px;
|
||||
height: 18px;
|
||||
padding: 10px;
|
||||
border: 1px solid #ddd;
|
||||
background: #fff;
|
||||
border-radius: 6px;
|
||||
font-family: Lato, sans-serif;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
input[type="text"]:focus {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
/* Nowy turniej */
|
||||
label[for='new-task'] {
|
||||
display: block;
|
||||
margin: 0 0 20px;
|
||||
}
|
||||
|
||||
input#new-task {
|
||||
float: left;
|
||||
width: 318px;
|
||||
}
|
||||
|
||||
p>button:hover {
|
||||
color: #0FC57C;
|
||||
}
|
||||
|
||||
/*lista turniejów*/
|
||||
li {
|
||||
overflow: hidden;
|
||||
padding: 20px 0;
|
||||
border-bottom: 1px solid lightblue;
|
||||
}
|
||||
|
||||
li>input[type="checkbox"] {
|
||||
margin: 0 10px;
|
||||
position: relative;
|
||||
top: 15px;
|
||||
}
|
||||
|
||||
li>label {
|
||||
font-size: 18px;
|
||||
line-height: 40px;
|
||||
width: 237px;
|
||||
padding: 0 0 0 11px;
|
||||
}
|
||||
|
||||
li>input[type="text"] {
|
||||
width: 226px;
|
||||
}
|
||||
|
||||
li>.delete:hover {
|
||||
color: #CF2323;
|
||||
}
|
||||
|
||||
ul li input[type=text] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
ul li.editMode input[type=text] {
|
||||
display: block;
|
||||
}
|
||||
|
||||
ul li.editMode label {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
<p>
|
||||
<label for="new-task">Dodawanie turnieju</label>
|
||||
<input id="new-task" type="text">
|
||||
<button>Dodaj</button>
|
||||
</p>
|
||||
|
||||
<h3>Turnieje</h3>
|
||||
<ul id="incomplete-tasks">
|
||||
<li>
|
||||
<input type="checkbox">
|
||||
<label>Turniej w Rzeszowie</label>
|
||||
<input type="text">
|
||||
<button class="edit">Edytuj</button>
|
||||
<button class="delete">Usuń</button>
|
||||
</li>
|
||||
<li class="editMode">
|
||||
<input type="checkbox">
|
||||
<label>Turniej w Łodzi</label>
|
||||
<input type="text" value="Turniej w">
|
||||
<button class="edit">Edytuj</button>
|
||||
<button class="delete">Usuń</button>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3>Rankingowe</h3>
|
||||
<ul id="completed-tasks">
|
||||
<li>
|
||||
<input type="checkbox" checked="">
|
||||
<label>Turniej w Warszawie</label>
|
||||
<input type="text">
|
||||
<button class="edit">Edycja</button>
|
||||
<button class="delete">Usuń</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<script type="text/javascript" src="myscript.js"></script>
|
||||
|
||||
</html>
|
154
frontend/panel_organizatora/myscript.js
Normal file
154
frontend/panel_organizatora/myscript.js
Normal file
@ -0,0 +1,154 @@
|
||||
//Problem: user interaction doesn't provide desired results
|
||||
//Solution: add interactivity so the user can manage daily tasks.
|
||||
|
||||
var taskInput = document.getElementById("new-task"); // new-task
|
||||
var addButton = document.getElementsByTagName("button")[0];//first button
|
||||
var incompleteTasksHolder = document.getElementById("incomplete-tasks"); //incomplete-tasks
|
||||
var completedTasksHolder = document.getElementById("completed-tasks"); //completed-tasks
|
||||
|
||||
//New Task List item
|
||||
|
||||
var createNewTaskElement = function (taskString) {
|
||||
// create List Item
|
||||
var listItem = document.createElement("li");
|
||||
// input checkbox
|
||||
var checkBox = document.createElement("input");
|
||||
// label
|
||||
var label = document.createElement("label");
|
||||
// input (text)
|
||||
var editInput = document.createElement("input");
|
||||
// button.edit
|
||||
var editButton = document.createElement("button");
|
||||
// button.delete
|
||||
var deleteButton = document.createElement("button");
|
||||
|
||||
//Each element needs modified
|
||||
|
||||
checkBox.type = "checkBox";
|
||||
editInput.type = "text";
|
||||
|
||||
editButton.innerText = "Edytuj";
|
||||
editButton.className = "edit";
|
||||
deleteButton.innerText = "Usuń";
|
||||
deleteButton.className = "delete";
|
||||
|
||||
label.innerText = taskString;
|
||||
|
||||
// Each element needs appending
|
||||
listItem.appendChild(checkBox);
|
||||
listItem.appendChild(label);
|
||||
listItem.appendChild(editInput);
|
||||
listItem.appendChild(editButton);
|
||||
listItem.appendChild(deleteButton);
|
||||
|
||||
return listItem;
|
||||
}
|
||||
|
||||
|
||||
//Add a new task
|
||||
var addTask = function () {
|
||||
console.log("Add Task...");
|
||||
//Create a new list item with the text from the #new-task:
|
||||
var listItem = createNewTaskElement(taskInput.value);
|
||||
//Append listItem to incompleteTaskHolder
|
||||
incompleteTasksHolder.appendChild(listItem);
|
||||
bindTaskEvents(listItem, taskCompleted);
|
||||
taskInput.value = "";
|
||||
}
|
||||
|
||||
//Edit an existing task
|
||||
var editTask = function () {
|
||||
console.log("Edit Task...");
|
||||
|
||||
var listItem = this.parentNode;
|
||||
|
||||
var editInput = listItem.querySelector("input[type=text]");
|
||||
var label = listItem.querySelector("label");
|
||||
|
||||
var containsClass = listItem.classList.contains("editMode");
|
||||
|
||||
|
||||
// if class of the parent is .editMode
|
||||
if (containsClass) {
|
||||
//Switch from .editMode
|
||||
//label text become the input's value
|
||||
label.innerText = editInput.value;
|
||||
} else {
|
||||
//Switch to .editMode
|
||||
//input value becomes the labels text
|
||||
editInput.value = label.innerText;
|
||||
}
|
||||
//Toggle .editMode on the parent
|
||||
listItem.classList.toggle("editMode");
|
||||
}
|
||||
|
||||
//Delete an existing task
|
||||
var deleteTask = function () {
|
||||
console.log("Delete Task...");
|
||||
//Remove the parent list item from the ul
|
||||
var listItem = this.parentNode;
|
||||
var ul = listItem.parentNode;
|
||||
|
||||
ul.removeChild(listItem);
|
||||
}
|
||||
|
||||
//Mark a task as complete
|
||||
var taskCompleted = function () {
|
||||
console.log("Task Complete...");
|
||||
//When the Checkbox is checked
|
||||
//Append the task list item to the #completed-tasks ul
|
||||
var listItem = this.parentNode;
|
||||
completedTasksHolder.appendChild(listItem);
|
||||
bindTaskEvents(listItem, taskIncomplete);
|
||||
}
|
||||
|
||||
|
||||
//Mark a task as incomplete
|
||||
var taskIncomplete = function () {
|
||||
console.log("Task Incomplete...");
|
||||
//When the checkbox is unchecked appendTo #incomplete-tasks
|
||||
var listItem = this.parentNode;
|
||||
incompleteTasksHolder.appendChild(listItem);
|
||||
bindTaskEvents(listItem, taskCompleted);
|
||||
}
|
||||
|
||||
|
||||
//Set the click handler to the addTask function
|
||||
addButton.addEventListener("click", addTask);
|
||||
|
||||
|
||||
var bindTaskEvents = function (taskListItem, checkBoxEventHandler) {
|
||||
console.log("Bind List item events");
|
||||
// select listitems chidlren
|
||||
var checkBox = taskListItem.querySelector('input[type="checkbox"]');
|
||||
var editButton = taskListItem.querySelector("button.edit");
|
||||
var deleteButton = taskListItem.querySelector("button.delete");
|
||||
//bind editTask to edit button
|
||||
editButton.onclick = editTask;
|
||||
//bind deleteTask to delete button
|
||||
deleteButton.onclick = deleteTask;
|
||||
//bind checkBoxEventHandler to checkbox
|
||||
checkBox.onchange = checkBoxEventHandler;
|
||||
|
||||
}
|
||||
|
||||
//cycle over incompleteTaskHolder ul list items
|
||||
for (var i = 0; i < incompleteTasksHolder.children.length; i++) {
|
||||
//bind events to list item's children (taskCompleted)
|
||||
bindTaskEvents(incompleteTasksHolder.children[i], taskCompleted);
|
||||
}
|
||||
|
||||
//cycle over completedTaskHolder ul list items
|
||||
for (var i = 0; i < completedTasksHolder.children.length; i++) {
|
||||
//bind events to list item's children (taskCompleted)
|
||||
bindTaskEvents(completedTasksHolder.children[i], taskIncomplete);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
108
frontend/panel_organizatora/style.css
Normal file
108
frontend/panel_organizatora/style.css
Normal file
@ -0,0 +1,108 @@
|
||||
* {
|
||||
/* border: solid; */
|
||||
}
|
||||
|
||||
a {
|
||||
text-align: center;
|
||||
line-height: 2;
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
|
||||
header {
|
||||
display: flex;
|
||||
flex-flow: row wrap;
|
||||
justify-content: space-between;
|
||||
background-color: #0f64f2;
|
||||
margin: auto;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
padding-right: 30px;
|
||||
padding-left: 30px;
|
||||
|
||||
}
|
||||
|
||||
header>p {
|
||||
text-align: center;
|
||||
line-height: 0;
|
||||
}
|
||||
|
||||
.container {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
||||
}
|
||||
|
||||
.eventHeader {
|
||||
text-align: center;
|
||||
padding-top: 5px;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
|
||||
.event {
|
||||
background-color: #0f64f2;
|
||||
color: white;
|
||||
border-style: solid;
|
||||
border-width: 2px;
|
||||
margin-top: 25px;
|
||||
margin-right: 25px;
|
||||
flex-direction: column;
|
||||
flex-wrap: wrap;
|
||||
height: auto;
|
||||
|
||||
|
||||
}
|
||||
|
||||
.eventInside {
|
||||
background-color: white;
|
||||
color: #4C8BF5;
|
||||
height: auto;
|
||||
border: solid;
|
||||
border-color: lightgray;
|
||||
padding: 10px;
|
||||
|
||||
}
|
||||
|
||||
.eventInside>p {
|
||||
color: lightgray;
|
||||
}
|
||||
|
||||
.myButton {
|
||||
background-color: #4C8BF5;
|
||||
border-radius: 28px;
|
||||
border: 1px solid #4C8BF5;
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
color: #ffffff;
|
||||
font-family: Arial;
|
||||
font-size: 9px;
|
||||
padding: 8px 13px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.dot {
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
color: white;
|
||||
background-color: skyblue;
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
|
||||
@media all and (max-width: 800px) {
|
||||
header {
|
||||
justify-content: space-around;
|
||||
}
|
||||
}
|
||||
|
||||
@media all and (max-width: 800px) {
|
||||
header {
|
||||
flex-direction: colum;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user