From 04c918e67dc9e77b0318fd167a164539df706a03 Mon Sep 17 00:00:00 2001 From: Parkjoopika Date: Fri, 13 Mar 2020 17:35:31 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=EC=95=84=EB=AC=B4=EA=B1=B0=EB=82=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mission001/origin/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mission001/origin/index.html b/mission001/origin/index.html index b1180c7..7e36dde 100644 --- a/mission001/origin/index.html +++ b/mission001/origin/index.html @@ -18,7 +18,7 @@

TODOS

  • - +
    From 172c05d979dd749bbc1fce1dfbb07e90547ed6e4 Mon Sep 17 00:00:00 2001 From: Parkjoopika Date: Fri, 13 Mar 2020 17:38:45 +0900 Subject: [PATCH 2/3] joohan start --- mission001/joohan/css/style.css | 334 ++++++++++++++++++++++++++++++++ mission001/joohan/index.html | 61 ++++++ mission001/joohan/todos.js | 0 3 files changed, 395 insertions(+) create mode 100644 mission001/joohan/css/style.css create mode 100644 mission001/joohan/index.html create mode 100644 mission001/joohan/todos.js diff --git a/mission001/joohan/css/style.css b/mission001/joohan/css/style.css new file mode 100644 index 0000000..14a905e --- /dev/null +++ b/mission001/joohan/css/style.css @@ -0,0 +1,334 @@ +html, +body { + margin: 0; + padding: 10px; +} + +button { + margin: 0; + padding: 0; + border: 0; + background: none; + font-size: 100%; + vertical-align: baseline; + font-family: inherit; + font-weight: inherit; + color: inherit; + -webkit-appearance: none; + appearance: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body { + font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif; + line-height: 1.4em; + background: #f5f5f5; + color: #4d4d4d; + min-width: 230px; + max-width: 550px; + margin: 0 auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-weight: 300; +} + +:focus { + outline: 0; +} + +.hidden { + display: none; +} + +.todoapp { + background: #fff; + margin: 130px 0 40px 0; + position: relative; + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), + 0 25px 50px 0 rgba(0, 0, 0, 0.1); +} + +.todoapp input::-webkit-input-placeholder { + font-style: italic; + font-weight: 300; + color: #e6e6e6; +} + +.todoapp h1 { + position: absolute; + top: -125px; + width: 100%; + font-size: 60px; + text-align: center; + color: dimgray; + font-weight: 100; + font-family: Helvetica Neue, Helvetica, Arial, sans-serif; +} + +.new-todo, +.edit { + position: relative; + margin: 0; + width: 100%; + font-size: 24px; + font-family: inherit; + font-weight: inherit; + line-height: 1.4em; + border: 0; + color: inherit; + padding: 6px; + box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2); + box-sizing: border-box; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.new-todo { + padding: 16px 16px 16px 60px; + border: none; + background: rgba(0, 0, 0, 0.003); + box-shadow: inset 0 -2px 1px rgba(0,0,0,0.03); +} + +.main { + position: relative; + z-index: 2; + border-top: 1px solid #e6e6e6; +} + +.toggle-all { + width: 1px; + height: 1px; + border: none; + opacity: 0; + position: absolute; + right: 100%; + bottom: 100%; +} + +.toggle-all + label { + width: 60px; + height: 34px; + font-size: 0; + position: absolute; + top: -52px; + left: -13px; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); +} + +.toggle-all + label:before { + content: '❯'; + font-size: 22px; + color: #e6e6e6; + padding: 10px 27px 10px 27px; +} + +.toggle-all:checked + label:before { + color: #737373; +} + +.todo-list { + margin: 0; + padding: 0; + list-style: none; +} + +.todo-list li { + position: relative; + font-size: 24px; + border-bottom: 1px solid #ededed; +} + +.todo-list li:last-child { + border-bottom: none; +} + +.todo-list li.editing { + border-bottom: none; + padding: 0; +} + +.todo-list li.editing .edit { + display: block; + width: calc(100% - 43px); + padding: 12px 16px; + margin: 0 0 0 43px; +} + +.todo-list li.editing .view { + display: none; +} + +.todo-list li .toggle { + text-align: center; + width: 40px; + height: auto; + position: absolute; + top: 0; + bottom: 0; + margin: auto 0; + border: none; + -webkit-appearance: none; + appearance: none; +} + +.todo-list li .toggle { + opacity: 0; +} + +.todo-list li .toggle + label { + background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23ededed%22%20stroke-width%3D%223%22/%3E%3C/svg%3E'); + background-repeat: no-repeat; + background-position: center left; +} + +.todo-list li .toggle:checked + label { + background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23bddad5%22%20stroke-width%3D%223%22/%3E%3Cpath%20fill%3D%22%235dc2af%22%20d%3D%22M72%2025L42%2071%2027%2056l-4%204%2020%2020%2034-52z%22/%3E%3C/svg%3E'); +} + +.todo-list li label { + word-break: break-all; + padding: 15px 15px 15px 60px; + display: block; + line-height: 1.2; + transition: color 0.4s; +} + +.todo-list li.completed label { + color: #d9d9d9; + text-decoration: line-through; +} + +.todo-list li .destroy { + display: none; + position: absolute; + top: 0; + right: 10px; + bottom: 0; + width: 40px; + height: 40px; + margin: auto 0; + font-size: 30px; + color: #cc9a9a; + margin-bottom: 11px; + transition: color 0.2s ease-out; + cursor: pointer; +} + +.todo-list li .destroy:hover { + color: #af5b5e; +} + +.todo-list li .destroy:after { + content: '×'; +} + +.todo-list li:hover .destroy { + display: block; +} + +.todo-list li .edit { + display: none; +} + +.todo-list li.editing:last-child { + margin-bottom: -1px; +} + +.count-container { + color: #777; + padding: 10px 15px; + height: 20px; + text-align: center; + border-top: 1px solid #e6e6e6; +} + +.count-container:before { + content: ''; + position: absolute; + right: 0; + bottom: 0; + left: 0; + height: 50px; + overflow: hidden; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), + 0 8px 0 -3px #f6f6f6, + 0 9px 1px -3px rgba(0, 0, 0, 0.2), + 0 16px 0 -6px #f6f6f6, + 0 17px 2px -6px rgba(0, 0, 0, 0.2); +} + +.todo-count { + float: left; + text-align: left; +} + +.todo-count strong { + font-weight: 300; +} + +.filters { + margin: 0; + padding: 0; + list-style: none; + position: absolute; + right: 0; + left: 0; +} + +.filters li { + display: inline; +} + +.filters li a { + color: inherit; + margin: 3px; + padding: 3px 7px; + text-decoration: none; + border: 1px solid transparent; + border-radius: 3px; +} + +.filters li a:hover { + border-color: rgba(175, 47, 47, 0.1); +} + +.filters li a.selected { + border-color: rgba(175, 47, 47, 0.2); +} + +.clear-completed, html .clear-completed:active { + float: right; + position: relative; + line-height: 20px; + text-decoration: none; + cursor: pointer; +} + +.clear-completed:hover { + text-decoration: underline; +} + +.info { + margin: 65px auto 0; + color: #bfbfbf; + font-size: 10px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-align: center; +} + +.info p { + line-height: 1; +} + +.info a { + color: inherit; + text-decoration: none; + font-weight: 400; +} + +.info a:hover { + text-decoration: underline; +} diff --git a/mission001/joohan/index.html b/mission001/joohan/index.html new file mode 100644 index 0000000..a3e4169 --- /dev/null +++ b/mission001/joohan/index.html @@ -0,0 +1,61 @@ + + + + + + 이벤트 - TODOS + + + +
    +
    +

    TODOS

    + +
    +
    + +
      +
    • +
      + + + +
      + +
    • +
    • +
      + + + +
      + +
    • +
    • +
      + + + +
      + +
    • +
    +
    +
    + 0 + +
    +
    + + + diff --git a/mission001/joohan/todos.js b/mission001/joohan/todos.js new file mode 100644 index 0000000..e69de29 From 3081ee9d8006e483db753196614a21797cb0ac81 Mon Sep 17 00:00:00 2001 From: Parkjoopika Date: Sun, 15 Mar 2020 19:13:23 +0900 Subject: [PATCH 3/3] toDo complited --- mission001/joohan/css/style.css | 8 + mission001/joohan/index.html | 31 +--- mission001/joohan/todos.js | 249 ++++++++++++++++++++++++++++++++ 3 files changed, 263 insertions(+), 25 deletions(-) diff --git a/mission001/joohan/css/style.css b/mission001/joohan/css/style.css index 14a905e..7c0cd13 100644 --- a/mission001/joohan/css/style.css +++ b/mission001/joohan/css/style.css @@ -332,3 +332,11 @@ body { .info a:hover { text-decoration: underline; } + +.pikachu { + display: none; +} + +.showing { + display: block; +} \ No newline at end of file diff --git a/mission001/joohan/index.html b/mission001/joohan/index.html index a3e4169..9a1120d 100644 --- a/mission001/joohan/index.html +++ b/mission001/joohan/index.html @@ -10,36 +10,17 @@

    TODOS

    - +
    + +
    +
      -
    • -
      - - - -
      - -
    • -
    • -
      - - - -
      - -
    • -
    • -
      - - - -
      - -
    • +
    +
    0 diff --git a/mission001/joohan/todos.js b/mission001/joohan/todos.js index e69de29..fb9e8b3 100644 --- a/mission001/joohan/todos.js +++ b/mission001/joohan/todos.js @@ -0,0 +1,249 @@ +const section = document.querySelector(".todoapp"), +form = section.querySelector(".new-todo-1"), +input = form.querySelector("input"), +ul = section.querySelector(".todo-list"), +countDiv = section.querySelector('.count-container'), +span = countDiv.querySelector(".todo-count");; + +const finishForm = section.querySelector('.toDoFinish') +const TODOS_LS = "todos"; +const all = document.querySelector(".all") +const active = document.querySelector(".active") +const completed = document.querySelector(".completed") +let toDo = []; +const checkClick = { + All: true, + Active: false, + Completed: false +} + +function clearScreen(){ + const li = ul.querySelectorAll("li") + li.forEach(function(li){ + ul.removeChild(li); + }) +} +function clickAll(){ + clearScreen(); + toDo = [] + loadToDo(); + all.classList.add("selected") + completed.classList.remove("selected") + active.classList.remove("selected") + checkClick.All = true + checkClick.Active = false + checkClick.Completed = false +} + + +function clickActive(){ + clearScreen(); + const currentToDo = JSON.parse(localStorage.getItem(TODOS_LS)); + const filtToDo = currentToDo.filter(function(toDo){ + return !toDo.finish + }) + toDo = [] + filtToDo.forEach(function(toDos){ + paintToDo(toDos.text, toDos.id, toDos.finish) + }) + toDo = currentToDo; + saveToDo(); + all.classList.remove("selected") + completed.classList.remove("selected") + active.classList.add("selected") + checkClick.All = false + checkClick.Active = true + checkClick.Completed = false +} + + +function clickCom(){ + clearScreen(); + const currentToDo = JSON.parse(localStorage.getItem(TODOS_LS)); + const filtToDo = currentToDo.filter(function(toDo){ + return toDo.finish + }) + toDo = [] + filtToDo.forEach(function(toDos){ + paintToDo(toDos.text, toDos.id, toDos.finish) + }) + toDo = currentToDo; + saveToDo(); + all.classList.remove("selected") + completed.classList.add("selected") + active.classList.remove("selected") + checkClick.All = false + checkClick.Active = false + checkClick.Completed = true +} + +function paintToDo(todos, id, finish){ + const li = document.createElement("li"); + const div = document.createElement('div'); + const input = document.createElement('input'); + const input_2 = document.createElement('input'); + const label = document.createElement('label'); + const btn = document.createElement('button'); + btn.addEventListener("click", deleeteToDo); + div.classList.add("view"); + label.classList.add("label"); + btn.classList.add("destroy"); + input.classList.add("toggle"); + input.type = "checkbox" + input.value = "finish" + if(finish){ + input.checked = "checked" + li.classList.add("completed") + } else { + input.checked = "" + } + label.innerText = todos; + input_2.classList.add("edit"); + input_2.value = "새로운 타이틀"; + div.appendChild(input); + div.appendChild(label); + div.appendChild(btn); + li.appendChild(div); + li.appendChild(input_2); + li.id = id; + ul.appendChild(li); + const toDoObj = { + text: todos, + id: id, + finish: finish + }; + toDo.push(toDoObj); + saveToDo(); +} + +function paincount(){ + const toDos = localStorage.getItem("todos"); + const parseToDos = JSON.parse(toDos); + if(parseToDos !== null){ + span.innerHTML = `총 ${parseToDos.length} 개` + } +} + + +function deleeteToDo(event){ + const btn = event.target; + const div = btn.parentNode; + const li = div.parentNode; + ul.removeChild(li); + const filterToDo = toDo.filter(function(todo){ + return todo.id !== parseInt(li.id); + + }); + toDo = filterToDo; + saveToDo(); + paincount(); +} + +function saveToDo(){ + localStorage.setItem(TODOS_LS, JSON.stringify(toDo)); +} + +function addToDo(todos){ + const li = document.createElement("li"); + const div = document.createElement('div'); + const input = document.createElement('input'); + const input_2 = document.createElement('input'); + const label = document.createElement('label'); + const btn = document.createElement('button'); + let newId = 0 + if(toDo.length === 0){ + newId = toDo.length + 1 + } else { + const loadedToDo = JSON.parse(localStorage.getItem(TODOS_LS)); + const currentToDo = loadedToDo[loadedToDo.length-1] + newId = currentToDo.id + 1 + } + btn.addEventListener("click", deleeteToDo); + div.classList.add("view"); + label.classList.add("label"); + btn.classList.add("destroy"); + input.classList.add("toggle"); + input.type = "checkbox" + input.value = "finish" + input.checked = "" + input_2.classList.add("edit"); + input_2.value = "새로운 타이틀"; + label.innerText = todos; + div.appendChild(input); + div.appendChild(label); + div.appendChild(btn); + li.appendChild(div); + li.appendChild(input_2); + li.id = newId; + ul.appendChild(li); + const toDoObj = { + text: todos, + id: newId, + finish: false + }; + toDo.push(toDoObj); + saveToDo(); +} + +function handleSubmit(event){ + event.preventDefault(); + const currentValue = input.value; + input.value = ""; + addToDo(currentValue); + paincount(); + if(checkClick.All) { + clickAll(); + } else if (checkClick.Active){ + clickActive(); + } else if (checkClick.Completed){ + clickCom(); + } +} + +function loadToDo(){ + const loadedToDo = JSON.parse(localStorage.getItem(TODOS_LS)); + if(loadedToDo !== null){ + loadedToDo.forEach(function(toDo){ + paintToDo(toDo.text, toDo.id, toDo.finish) + }) + } else { + } + paincount(); +} + +function handleChek(event){ + event.preventDefault(); + const finish = event.target; + const div = finish.parentNode; + const li = div.parentNode; + toDo.forEach(function(todo){ + if(todo.id === parseInt(li.id)){ + if(event.target.checked){ + li.classList.add("completed") + todo.finish = true + } else { + li.classList.remove("completed") + todo.finish = false + } + } + }) + saveToDo(); + if(checkClick.All) { + + } else if (checkClick.Active){ + clickActive(); + } else if (checkClick.Completed){ + clickCom(); + } +} + +function init(){ + loadToDo(); + form.addEventListener("submit", handleSubmit); + finishForm.addEventListener("change", handleChek); + all.addEventListener("click", clickAll); + active.addEventListener("click", clickActive); + completed.addEventListener("click", clickCom); +} + +init(); \ No newline at end of file