-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.js
153 lines (126 loc) · 4.41 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
class State{
constructor(){
this.todo = [];
this.inprogress =[];
this.done = [];
}
addItemToState(key, item) {
if (Array.isArray(item)){
for (var index in item){
this[key].push(item[index]);
}
}else if (typeof item === 'object'){
this[key].push(item);
}
};
deleteItemFromState(key, item) {
this[key] = this[key].filter(element => element.id != item.id);
}
moveItemToOtherPanel(key1, key2, itemId) {
var item = state[key1].find(element => element.id == itemId);
this.deleteItemFromState(key1, item);
this.addItemToState(key2, item);
localStorage.state = JSON.stringify(state);
}
}
var state = new State();
var parsed = JSON.parse(localStorage.getItem('state'));
if (parsed){
var id_count = 0;
for (const prop in parsed) {
if (parsed.hasOwnProperty(prop)) {
state.addItemToState(prop,parsed[prop]);
console.log(parsed[prop])
parsed[prop].forEach((todo)=>{
if (todo.id > id_count){
id_count = todo.id;
}})
};
}
} else{
var id_count = 0;
state.todo = [{id: ++id_count, title: "Test todo 1"}, {id: ++id_count, title: "Test todo 2"}];
state.inprogress = [];
state.done = [{id: ++id_count, title: "Test todo 3"}];
}
document.addEventListener('DOMContentLoaded', initBoard);
// add button
let addButton = document.getElementById('add_new_todo');
document.getElementById('new_todo').addEventListener('keypress', function(e){
if (e.keyCode == 13){
addButton.click();
}
});
addButton.addEventListener('click',function(event){
let newTodo = document.getElementById("new_todo");
if (newTodo.value !== ''){
// очищаем таблицу
clearAll();
//добавляем новый обьект в state
state.todo.push({id: ++id_count, title: newTodo.value});
// перезапускаем заполнение канбан доски
initBoard();
localStorage.state = JSON.stringify(state);
newTodo.value = '';}
})
// кнопка загрузки с сервера
let downloadBurron = document.getElementById("download-tasks");
downloadBurron.addEventListener('click',function(event){
if (confirm('Все пункты будут заменены на удаленную версию')){
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
let response = JSON.parse(this.responseText);
state.todo = [];
state.inprogress = [];
state.done = [];
response.forEach(function(entry){
// inly for users with id 1
if (entry.userId === 1){
if (entry.completed === false){
state.todo.push({id: entry.id, title: entry.title});
}
if (entry.completed === true){
state.done.push({id: entry.id, title: entry.title});}
}
});
clearAll();
initBoard();
localStorage.state = JSON.stringify(state);
}
};
xhttp.open("GET", 'https://jsonplaceholder.typicode.com/todos');
xhttp.send();
};
})
// говорит какие столбцы наполнять и чем
function initBoard() {
// let userIdOneState =
initPanel('todo', state.todo);
initPanel('inprogress', state.inprogress);
initPanel('done', state.done);
}
// вставляет ToDoшку в заданный столбец из заданного поля обьекта state.
function initPanel(key, todoList) {
var panel = document.getElementById(key);
for(var i = 0; i< todoList.length; i++ ) {
var currentItemObject = todoList[i];
var newTodoElement = createTodoElement(currentItemObject.id, currentItemObject.title);
panel.getElementsByClassName('list-group')[0].appendChild(newTodoElement);
}
}
// настраивает ToDoшку перед добавлением
function createTodoElement(id, title) {
var todoElement = document.createElement("div");
todoElement.id = id;
todoElement.className += 'list-group-item';
todoElement.draggable = true; // for drag and drop
todoElement.ondragstart=onDragStart; // for drag and drop
todoElement.textContent = title;
return todoElement;
}
function clearAll(){
document.getElementById('todo').innerHTML = '<div class="list-group"></div>';
document.getElementById('inprogress').innerHTML = '<div class="list-group"></div>';
document.getElementById('done').innerHTML = '<div class="list-group"></div>';
}