노션 (자바스크립트) 클론 코딩 (4) EditorPage - css수정 및 NewButton 만들기
2024. 11. 16. 17:04ㆍ프로젝트
728x90
반응형
우선 components폴더에 NewBtn.js 파일을 하나 만들어서 SidebarPage에서 생성해주도록 하겠습니다.
import NewBtn from './NewBtn.js'
export default function SidebarPage({ $target, initalState }) {
this.state = initalState
this.createTreeView = (data) => {
let str = ''
for (const key in data) {
if (data[key].documents.length > 0) {
str += `
<li class="dataList">
📄 ${data[key].title}
<button class="addBtn">➕</button>
<button class="delBtn">🗑️</button>
<ul>${this.createTreeView(data[key].documents)}</ul>
</li>`
} else {
str += `
<li class="dataList">
📄 ${data[key].title}
<button class="addBtn">➕</button>
<button class="delBtn">🗑️</button>
</li>`
}
}
return str
}
const $page = document.createElement('div')
$page.classList.add('listContainer')
$page.innerHTML = `
<ul>
${this.state
.map(
(document) =>
`<li class="dataList">📄 ${document.title}
<button class="addBtn">➕</button>
<button class="delBtn">🗑️</button>
</li>
${
document.documents.length > 0
? `<ul> ${this.createTreeView(
document.documents
)}</ul>`
: ''
}
`
)
.join('')}
</ul>
`
$target.appendChild($page)
const $newBtn = new NewBtn({ $target: $page })
}
NewBtn 생성자에 target : page를 넘겨주어 NewBtn 파일에 넘겨주도록 하겠습니다.
NewBtn.js
export default function NewBtn({ $target }) {
const $newBtn = document.createElement('button')
$newBtn.textContent = '+ New Button'
$newBtn.className = 'newBtn'
$target.appendChild($newBtn)
}
style.css
@import 'reset.css';
#app {
display: flex;
flex-decoration: row;
}
/* sidebar */
ul {
list-style-type: circle;
}
li {
margin-top: 4%;
}
.listContainer {
width: 300px;
height: 1000px;
background-color: #f7f6f3;
overflow: auto;
resize: horizontal;
}
.dataList {
margin: 10% 0;
color: #808080;
}
.addBtn,
.delBtn {
background-color: #f7f6f3;
color: black;
border: none;
}
.addBtn:hover,
.delBtn:hover {
cursor: pointer;
}
.newBtn {
background-color: #f7f6f3;
border: none;
font-size: 1.2rem;
text-align: left;
width: 100%;
height: 20px;
color: #696969;
}
.newBtn:hover {
cursor: pointer;
color: #000000;
}
그다음에는 EditorPage를 꾸며주도록 하겠습니다.
App.js에 EditorPage를 생성해주도록 하겠습니다.
const editorpage = new EditorPage({
$target: $listContainer,
initialState: editorDummyData,
})
또한 상태값을 더미데이터로 넘겨주도록 하겠습니다.
const editorDummyData = {
title: '노션을 만들자',
content: '노션을 만들기',
}
export default function EditorPage({ $target, initialState }) {
const $page = document.createElement('div')
$page.className = 'editorPage '
$page.innerHTML = `
<input placeholder='제목없음' class='editorTitle' value=${initialState.title}/>
<textarea placeholder='내용입력하세요' class='editorContent' >${initialState.content}</textarea>
`
$target.appendChild($page)
}
style.css 파일에 추가해주세요
.editorPage {
display: flex;
flex-direction: column;
margin: 10% 20%;
}
.editorTitle {
border: none;
font-size: 2.5rem;
width: 1000px;
outline: none;
}
.editorContent {
margin-top: 30px;
border: none;
width: 1000px;
height: 600px;
font-size: 1.5rem;
outline: none;
resize: none;
}
EditorPage를 꾸미는것은 여기까지 하고 다음시간에 api를 이용해서 구현하겠습니다.
'프로젝트' 카테고리의 다른 글
노션 (자바스크립트) 클론 코딩 (6) 삭제 및 추가 구현하기 (1) | 2024.11.19 |
---|---|
노션 (자바스크립트) 클론 코딩 (5) api 연결해서 글 불러오기 (0) | 2024.11.18 |
노션 (자바스크립트) 클론 코딩 (3) 디자인 수정 (4) | 2024.11.16 |
노션 (자바스크립트) 클론 코딩 (2) (0) | 2024.11.15 |
노션 (자바스크립트) 클론 코딩 (1) vscode 기본 세팅 (3) | 2024.11.15 |