처음부터 블로그 게시물 편집기 만들기. 1부: 최소한의 것

소개


  • 이 시리즈의 궁극적인 목표는 Stackoverflow에 있는 마크다운 편집기를 구축하려고 시도하면서 제 여정을 기록하는 것입니다.

  • GitHub


  • HERE

  • 유튜브 버전


  • HERE

  • 최소한의


  • 따라서 궁극적인 목표는 처음부터 마크다운 편집기를 구축하는 것입니다. 글쎄, 실제로는 아닙니다. 자세히 살펴보면 가장 기본적인 마크다운 편집기도 여전히 기본 컴파일러 이론에 크게 의존하고 있음을 알 수 있습니다. 결국 나는 그런 종류의 것들에 대해 모두 배울 것이고 컴퓨터 과학에 관한 모든 것을 도와줄 무료 온라인 책도 찾았습니다. HERE .
  • 지금은 일부 단어를 입력하고, 화면에 표시하고, 스타일을 추가하고, 데이터베이스에 저장할 수 있기를 원합니다. 즉, 최소값은 다음과 같습니다
  • .


  • 마크다운에 있습니까? No
  • UI가 좋습니까? No
  • 텍스트가 실시간으로 업데이트됩니까? Yes
  • 스타일을 추가할 수 있습니까? Yes
  • 지금은 충분합니까? Yes!!!!!!!!!!!!!!!!!!

  • 구축 방법


  • 데이터베이스에 저장해야 하므로 기본 HTML 형식으로 시작합니다.

  • <form th:action="@{/admin/blogPost/create}" th:object="${blogPost}" method="post">
            <input type="text" th:field="*{title}" id="title" name="title" placeholder="title" class="editorInput">
            <input type="submit"/>
            <textarea id="my_text_area" th:field="*{body}"  name="story" rows="50" cols="90"></textarea>
    
    </form>
    <div id="editDisplay" class="display">
    
        </div>
    
    


  • 모든 th: 항목과 혼동되더라도 걱정하지 마십시오. 템플릿 엔진으로 스프링 부트와 thymleaf를 사용하고 있기 때문입니다. 그 중 어느 것도 우리가 원하는 읽기 시간 표시를 얻는 데 너무 중요하지 않습니다. 양식 내부에 입력할 수 있고 텍스트가 <div id="editDisplay" class="display"> 내부에 나타나기를 원하며 JavaScript를 사용하여 이를 수행한다는 점만 알아두십시오.

  • 자바스크립트


  • 이렇게 하려면 자바 스크립트 5줄만 있으면 됩니다. 너무 작기 때문에 인라인으로 만들기로 결정했습니다.

  • <script th:inline="javascript">
    /*<![CDATA[*/
        const textArea = document.getElementById('my_text_area');
        const editDisplay = document.getElementById('editDisplay');
    
    textArea.addEventListener('input', () => {
    
        editDisplay.innerHTML = textArea.value;
    })
    
    /*]]>*/
    </script>
    


  • thymleaf에 익숙하지 않은 경우 모든 이상한 구문에 대해 걱정하지 마십시오. 관심을 가져야 할 것은 input 이벤트를 사용하여 innerHTML를 양식에서 설정한 값으로 설정한다는 것입니다.

  • 데이터베이스 스키마




    @Entity(name = "blogpost")
    public class BlogPost extends AbstractEntity{
    
        public BlogPost(){}
    
        private String title;
    
        @Lob
        private String body;
        private Integer seriesNumber;
        private Date dateCreated;
    
        @ManyToOne
        @JoinColumn
        private Series series;
    
    //getters and setters below
    }
    
    


  • 스키마는 @Lob 주석을 제외하고 매우 간단합니다. 이것을 사용하여 우리 몸을 large object 유형으로 설정합니다. 이것은 Hibernate에게 이진 데이터를 가져와 pg_largeobject라는 테이블 내부에 저장할 큰 객체로 텍스트를 저장하도록 지시합니다. 본문을 Lob로 정의하지 않으면 문자열에 255자만 저장할 수 있으며 더 이상 앱이 다운될 수 있습니다.

  • 결론


  • 시간을 내어 제 블로그 게시물을 읽어주셔서 감사합니다. 질문이나 우려 사항이 있는 경우 아래에 의견을 말하거나 에서 저에게 연락하십시오.
  • 좋은 웹페이지 즐겨찾기