ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • scalatags 를 이용해 Email 로 전송할 Html 생성하기
    web/scalajs 2021. 11. 14. 20:50

    문제

    Email 로 전송할 Html String 을 생성하려고 한다.

    scalatags 를 이용해 typesafe 한 아래 모양의 Html 을 만들어 보자

     

    코드

    build.sbt 에 아래 라이브러리를 추가한다.

     libraryDependencies ++= Seq(
       "com.lihaoyi" %% "scalatags" % "0.9.4"
     )

     

    Html 을 생성하는 코드를 아래와 같이 작성한다.

    import scalatags.Text
    import scalatags.Text.all._
    
    object EmailHtml {
      case class Item(no: Int, engine: String, url: String)
    
      def main(args: Array[String]): Unit = {
        val items: Seq[Item] = List(
          Item(1, "naver", "http://www.naver.com"),
          Item(2, "google", "http://www.google.com")
        )
    
        val TH: Text.TypedTag[String] = th(border := "1px solid black", padding := "10px")
        val TD: Text.TypedTag[String] = td(border := "1px solid black", padding := "10px")
    
        val headerRow: Text.TypedTag[String] = tr(
          TH("순서"),
          TH("검색엔진"),
          TH("LINK")
        )
    
        val contentRows: Seq[Text.TypedTag[String]] = items.map { item =>
          tr(
            TD(item.no),
            TD(item.engine),
            TD(a(href := item.url, target := "_blank")(p(item.url)))
          )
        }
    
        val rows: Seq[Text.TypedTag[String]] = headerRow +: contentRows
    
        val message: Text.TypedTag[String] = html(
          body(
            table(
              width := "100%",
              border := "1px solid black",
              borderCollapse := "collapse"
            )(rows),
            footer(
              p("문의: https://github.com/windbird123")
            )
          )
        )
    
        println(message.render)
      }
    }

     

    생성된 Html

    <html>
       <body>
          <table style="width: 100%; border: 1px solid black; border-collapse: collapse;">
             <tr>
                <th style="border: 1px solid black; padding: 10px;">순서</th>
                <th style="border: 1px solid black; padding: 10px;">검색엔진</th>
                <th style="border: 1px solid black; padding: 10px;">LINK</th>
             </tr>
             <tr>
                <td style="border: 1px solid black; padding: 10px;">1</td>
                <td style="border: 1px solid black; padding: 10px;">naver</td>
                <td style="border: 1px solid black; padding: 10px;">
                   <a href="http://www.naver.com" target="_blank">
                      <p>http://www.naver.com</p>
                   </a>
                </td>
             </tr>
             <tr>
                <td style="border: 1px solid black; padding: 10px;">2</td>
                <td style="border: 1px solid black; padding: 10px;">google</td>
                <td style="border: 1px solid black; padding: 10px;">
                   <a href="http://www.google.com" target="_blank">
                      <p>http://www.google.com</p>
                   </a>
                </td>
             </tr>
          </table>
          <footer>
             <p>문의: https://github.com/windbird123</p>
          </footer>
       </body>
    </html>

    'web > scalajs' 카테고리의 다른 글

    javascript callback 을 scala Future 로 facade 작성  (0) 2023.12.11
    href 값으로 empty 지정하기  (0) 2021.09.01
    uri encoding  (0) 2021.08.11

    댓글

Designed by Tistory.