start .
me .
HTML Document File : list-app_00.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>list app</title>
</head>
<body>
<script>
function list_item_html(item){
var done = item[1]=="done"?'checked':''
var checkbox = `<input ${done} type="checkbox" oninput="list_checkbox_input(this)">`
var edit = `<input type="text" value="${item[0]}" oninput="list_text_input(this)">`
var remove = `<button onclick="list_item_remove(this)">remove</button>`
var index = `<button onclick="alert(child_index(this.parentNode))">index</button>`
return "<div class='list_item_class'>" + checkbox + edit + remove + index + "</div>"
}
function list_item_add(button) {
var item = [prompt('task'),'todo']
var main_node = button.parentNode
main_node.data_content.push(item)
main_node.innerHTML += list_item_html(item)
}
function list_setup(list_content, main_node){
main_node.data_content = list_content
main_node.innerHTML = `<button onclick="list_item_add(this)">add</button>`
main_node.innerHTML += `<button onclick="list_visually_filter('all',this)">all</button>`
main_node.innerHTML += `<button onclick="list_visually_filter('todo',this)">todo</button>`
main_node.innerHTML += `<button onclick="list_visually_filter('done',this)">done</button>`
for(var item of list_content){
main_node.innerHTML += list_item_html(item)
}
}
function list_visually_filter(criterion, button){
var main_node = button.parentNode
var item_index = 0
for(var item of main_node.querySelectorAll(".list_item_class")){
var showed = true
if(criterion=='todo' || criterion=='done'){
showed = main_node.data_content[item_index][1]==criterion
}
item.style.display = showed?"":"none"
item_index += 1
}
}
function list_content_item_access(input_node){
var list_item_node = input_node.parentNode
var list_content_index = child_index(list_item_node)
var list_node = list_item_node.parentNode
var list_content = list_node.data_content
return [ list_content, list_content_index ]
}
function list_checkbox_input(checkbox){
var [ list_content, list_content_index ] = list_content_item_access(checkbox)
list_content[list_content_index][1] = list_content[list_content_index][1]=="todo"?"done":"todo"
}
function list_text_input(text){
var [ list_content, list_content_index ] = list_content_item_access(text)
list_content[list_content_index][0] = text.value
}
function list_item_remove(button){
var [ list_content, list_content_index ] = list_content_item_access(button)
list_content.splice(list_content_index,1)
button.parentNode.remove()
}
function child_index(element){
return Array.from(element.parentNode.children).indexOf(element)
}
</script>
<div id="list1_div"></div>
<script>
var list1_content = [
["task 1","done"],
["task 2","todo"],
["task 3","done"],
]
list_setup(list1_content, list1_div)
</script>
<hr>
<div id="list2_div"></div>
<script>
var list2_content = [
["task 1","done"],
["task 2","done"],
["task 3","done"],
]
list_setup(list2_content, list2_div)
</script>
<script src="/web/show-source.js"></script>
</body>
</html>