-
Notifications
You must be signed in to change notification settings - Fork 0
/
task-list.js
144 lines (111 loc) · 4.05 KB
/
task-list.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
'use strict';
/**
* HTML要素を取得
*/
const taskMonth = document.getElementById("taskmonth");
const taskStatus = document.getElementById("taskstatus");
const taskTitle = document.getElementById("tasktitle");
const taskDetail = document.getElementById("taskdetail");
const submitButton = document.getElementById("submit");
const taskListTbody = document.getElementById("tasklist");
//タスクを管理する配列
let tasks = [];
//登録ボタンがクリックされたら、入力された値を代入されたタスクオブジェクトを生成して、tasksに追加する
submitButton.onclick = () => {
let task = {
month : taskMonth.value,
status : taskStatus.value,
title : taskTitle.value,
detail : taskDetail.value
}
addTask(task);
updateStorage();
};
/** taskを受け取って、tasks配列に追加する
* @param task
* @return tasks
*/
function addTask(x) {
tasks.push(x);
displayTaskList();
}
//削除するtaskの添え数deleteIndexを受け取り、tasksとlocalStorageから対応するtaskを削除して、displayTaskListを呼ぶ
/**
* @param {int} deleteIndex
* @return tasks
*/
function deleteTask(deleteIndex){
tasks.splice(deleteIndex,1); //spliceも配列オブジェクトの組み込みメソッド
updateStorage();
displayTaskList();
}
/** tasksを受け取って、その要素をストレージに保存する
* @param {array} tasks
* @return localStrage
*/
function updateStorage() {
//初期化
localStorage.clear();
for(let i = 0; i < tasks.length; i++){
const taskJSON = JSON.stringify(tasks[i]);
localStorage.setItem(i , taskJSON);
}
}
// localStrageに保存されているtaskの添え数を受け取り、対応するtaskを削除する
//tasksの情報をtaskListTbodyに移して、それを表示する
function displayTaskList() {
//初期化(これを書かないで実験してみると...)
taskListTbody.innerText = "";
for(let i = 0; i < tasks.length; i++) {
const task = tasks[i];
let taskTr = document.createElement('tr');
let taskTd = document.createElement('td');
taskTd.innerText = task.month;
taskTr.appendChild(taskTd);
taskTd = document.createElement('td');
taskTd.innerText = task.status;
taskTr.appendChild(taskTd);
taskTd = document.createElement('td');
taskTd.innerText = task.title;
taskTr.appendChild(taskTd);
taskTd = document.createElement('td');
taskTd.innerText = task.detail;
taskTr.appendChild(taskTd);
//削除ボタンを作成する
let deleteTd = document.createElement('td');
const deleteButton = document.createElement('button');
deleteButton.innerText = "削除";
//削除ボタンが押されたときの処理
deleteButton.onclick = () => {
deleteTask(i);
}
deleteTd.appendChild(deleteButton);
taskTr.appendChild(deleteTd);
taskListTbody.appendChild(taskTr);
};
}
//HTML作成時に記述したサンプルデータをtaskListTbodyに登録する
function addSample() {
let task = {
month : "2021-07",
status : "済",
title : "A社経営統合プロジェクト",
detail : "統合計画に伴う業務プロセス統合プロジェクト。\nプロジェクトリーダー(メンバー4人)として担当。\nQDC目標いずれも達成。 CS評価で5をいただいた。"
};
addTask(task);
}
//一回目にブラウザを読み込んだときはサンプルをtasksに追加して表示する。そうでないときは、ストレージに保存したタスクを追加して表示する
function loadBrowser() {
if (localStorage.length === 0) {
addSample();
} else {
//初期化
tasks = [];
for (let i = 0; i < localStorage.length; i++) {
const taskParsed = JSON.parse(localStorage.getItem(i));
tasks.push(taskParsed);
displayTaskList(tasks);
};
};
}
loadBrowser();