|
|
<!DOCTYPE html> |
|
|
<html lang="ko"> |
|
|
<head> |
|
|
<meta charset="UTF-8"> |
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
|
<title>๋ก๋ง์ 8์ฅ ์์ก ๋์ฐ๋ฏธ (๋ชจ๋ ์ ํ)</title> |
|
|
<style> |
|
|
|
|
|
body { |
|
|
background-color: #000; |
|
|
color: #FFFFFF; |
|
|
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; |
|
|
margin: 0; |
|
|
padding: 20px; |
|
|
line-height: 1.6; |
|
|
overflow-y: auto; |
|
|
-webkit-overflow-scrolling: touch; |
|
|
word-break: keep-all; |
|
|
} |
|
|
|
|
|
h1 { |
|
|
text-align: center; |
|
|
margin-bottom: 15px; |
|
|
color: #FFFF00; |
|
|
font-size: 1.8em; |
|
|
} |
|
|
|
|
|
|
|
|
.verse { |
|
|
display: none; |
|
|
margin-top: 20px; |
|
|
margin-bottom: 30px; |
|
|
} |
|
|
|
|
|
.verse.active { |
|
|
display: block; |
|
|
} |
|
|
|
|
|
.verse-number { |
|
|
font-weight: bold; |
|
|
margin-bottom: 15px; |
|
|
display: block; |
|
|
font-size: 1.2em; |
|
|
color: #FFFF00; |
|
|
text-align: center; |
|
|
} |
|
|
|
|
|
|
|
|
.parts-container { |
|
|
display: flex; |
|
|
flex-wrap: wrap; |
|
|
gap: 10px; |
|
|
justify-content: center; |
|
|
} |
|
|
|
|
|
|
|
|
.part { |
|
|
background-color: #333; |
|
|
padding: 12px 8px; |
|
|
border-radius: 5px; |
|
|
cursor: pointer; |
|
|
text-align: center; |
|
|
box-sizing: border-box; |
|
|
white-space: normal; |
|
|
|
|
|
|
|
|
flex: 0 0 calc(33.33% - 10px); |
|
|
min-width: 50px; |
|
|
|
|
|
transition: background-color 0.2s, color 0.2s, font-weight 0.1s; |
|
|
} |
|
|
|
|
|
|
|
|
body.preview-mode .part { |
|
|
color: #AAAAAA; |
|
|
} |
|
|
|
|
|
|
|
|
body.hide-mode .part { |
|
|
color: #333; |
|
|
} |
|
|
|
|
|
|
|
|
.part.active { |
|
|
color: #FFFF00 !important; |
|
|
background-color: #555; |
|
|
font-weight: bold; |
|
|
} |
|
|
|
|
|
|
|
|
.controls { |
|
|
text-align: center; |
|
|
margin-bottom: 20px; |
|
|
|
|
|
display: flex; |
|
|
justify-content: center; |
|
|
align-items: center; |
|
|
flex-wrap: wrap; |
|
|
gap: 15px; |
|
|
} |
|
|
|
|
|
|
|
|
.rate-control { |
|
|
display: flex; |
|
|
align-items: center; |
|
|
gap: 5px; |
|
|
color: #AAAAAA; |
|
|
font-size: 0.9em; |
|
|
} |
|
|
|
|
|
|
|
|
input[type="range"] { |
|
|
-webkit-appearance: none; |
|
|
appearance: none; |
|
|
width: 120px; |
|
|
height: 5px; |
|
|
background: #555; |
|
|
outline: none; |
|
|
opacity: 0.7; |
|
|
transition: opacity .2s; |
|
|
border-radius: 5px; |
|
|
} |
|
|
|
|
|
input[type="range"]:hover { |
|
|
opacity: 1; |
|
|
} |
|
|
|
|
|
|
|
|
input[type="range"]::-webkit-slider-thumb { |
|
|
-webkit-appearance: none; |
|
|
appearance: none; |
|
|
width: 15px; |
|
|
height: 15px; |
|
|
background: #FFFF00; |
|
|
cursor: pointer; |
|
|
border-radius: 50%; |
|
|
} |
|
|
|
|
|
input[type="range"]::-moz-range-thumb { |
|
|
width: 15px; |
|
|
height: 15px; |
|
|
background: #FFFF00; |
|
|
cursor: pointer; |
|
|
border-radius: 50%; |
|
|
} |
|
|
|
|
|
.controls button { |
|
|
padding: 12px 20px; |
|
|
background-color: #555; |
|
|
color: #FFFF00; |
|
|
border: none; |
|
|
border-radius: 5px; |
|
|
cursor: pointer; |
|
|
font-size: 0.9em; |
|
|
transition: background-color 0.2s; |
|
|
-webkit-appearance: none; |
|
|
appearance: none; |
|
|
} |
|
|
|
|
|
.controls button:hover:not(:disabled) { |
|
|
background-color: #777; |
|
|
} |
|
|
|
|
|
.controls button:disabled { |
|
|
opacity: 0.5; |
|
|
cursor: not-allowed; |
|
|
} |
|
|
|
|
|
|
|
|
@media (max-width: 768px) { |
|
|
body { padding: 15px; } |
|
|
h1 { font-size: 1.7em; margin-bottom: 10px; } |
|
|
.verse-number { font-size: 1.1em; } |
|
|
.controls { |
|
|
gap: 10px; |
|
|
} |
|
|
.controls button { padding: 10px 18px; font-size: 0.85em; } |
|
|
input[type="range"] { width: 90px; } |
|
|
.part { |
|
|
|
|
|
flex: 0 0 calc(33.33% - 10px); |
|
|
padding: 10px 6px; |
|
|
min-width: 50px; |
|
|
} |
|
|
.parts-container { gap: 10px; } |
|
|
} |
|
|
|
|
|
@media (max-width: 480px) { |
|
|
body { padding: 10px; } |
|
|
h1 { font-size: 1.5em; margin-bottom: 8px; } |
|
|
.verse-number { font-size: 1em; } |
|
|
.controls { |
|
|
flex-direction: column; |
|
|
gap: 8px; |
|
|
} |
|
|
.controls button { padding: 8px 15px; font-size: 0.8em; width: 80%;} |
|
|
.rate-control { |
|
|
width: 80%; |
|
|
justify-content: space-between; |
|
|
} |
|
|
input[type="range"] { width: 60%; } |
|
|
.part { |
|
|
|
|
|
flex: 0 0 calc(33.33% - 8px); |
|
|
padding: 8px 5px; |
|
|
min-width: 40px; |
|
|
font-size: 0.85em; |
|
|
} |
|
|
.parts-container { gap: 8px; } |
|
|
} |
|
|
|
|
|
|
|
|
</style> |
|
|
</head> |
|
|
|
|
|
<body class="preview-mode"> |
|
|
<h1>๋ก๋ง์ 8์ฅ</h1> |
|
|
|
|
|
<div class="controls"> |
|
|
<button id="prev-verse">์ด์ ์ </button> |
|
|
<button id="toggle-mode">๊ธ์ ๊ฐ๋ฆฌ๊ธฐ</button> |
|
|
<button id="next-verse">๋ค์ ์ </button> |
|
|
<div class="rate-control"> |
|
|
<label for="rate-slider">์๋:</label> |
|
|
<input type="range" id="rate-slider" min="0.5" max="2.0" step="0.1" value="1.0"> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div id="verse-display"> |
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
<script> |
|
|
|
|
|
const verses = [ |
|
|
"๊ทธ๋ฌ๋ฏ๋ก ์ด์ ๊ทธ๋ฆฌ์ค๋ ์์ ์์ ์๋ ์์๊ฒ๋ ๊ฒฐ์ฝ ์ ์ฃํจ์ด ์๋๋", |
|
|
"์ด๋ ๊ทธ๋ฆฌ์ค๋ ์์ ์์ ์๋ ์๋ช
์ ์ฑ๋ น์ ๋ฒ์ด ์ฃ์ ์ฌ๋ง์ ๋ฒ์์ ๋๋ฅผ ํด๋ฐฉํ์์์ด๋ผ", |
|
|
"์จ๋ฒ์ด ์ก์ ์ผ๋ก ๋ง๋ฏธ์์ ์ฐ์ฝํ์ฌ ํ ์ ์๋ ๊ทธ๊ฒ์ ํ๋๋์ ํ์๋๋ ๊ณง ์ฃ๋ก ๋ง๋ฏธ์์ ์๊ธฐ ์๋ค์ ์ฃ ์๋ ์ก์ ์ ๋ชจ์์ผ๋ก ๋ณด๋ด์ด ์ก์ ์ ์ฃ๋ฅผ ์ ํ์ฌ", |
|
|
"์ก์ ์ ๋ฐ๋ฅด์ง ์๊ณ ๊ทธ ์์ ๋ฐ๋ผ ํํ๋ ์ฐ๋ฆฌ์๊ฒ ์จ๋ฒ์ ์๊ตฌ๊ฐ ์ด๋ฃจ์ด์ง๊ฒ ํ๋ ค ํ์ฌ์ด๋๋ผ", |
|
|
"์ก์ ์ ๋ฐ๋ฅด๋ ์๋ ์ก์ ์ ์ผ์, ์์ ๋ฐ๋ฅด๋ ์๋ ์์ ์ผ์ ์๊ฐํ๋๋", |
|
|
"์ก์ ์ ์๊ฐ์ ์ฌ๋ง์ด์ ์์ ์๊ฐ์ ์๋ช
๊ณผ ํ์์ด๋๋ผ", |
|
|
"์ก์ ์ ์๊ฐ์ ํ๋๋๊ณผ ์์๊ฐ ๋๋๋ ์ด๋ ํ๋๋์ ๋ฒ์ ๊ตด๋ณตํ์ง ์๋ํ ๋ฟ ์๋๋ผ ํ ์๋ ์์์ด๋ผ", |
|
|
"์ก์ ์ ์๋ ์๋ค์ ํ๋๋์ ๊ธฐ์์๊ฒ ํ ์ ์๋๋๋ผ", |
|
|
"๋ง์ผ ๋ํฌ ์์ ํ๋๋์ ์์ด ๊ฑฐํ์๋ฉด ๋ํฌ๊ฐ ์ก์ ์ ์์ง ์๋ํ๊ณ ์์ ์๋๋ ๋๊ตฌ๋ ์ง ๊ทธ๋ฆฌ์ค๋์ ์์ด ์์ผ๋ฉด ๊ทธ๋ฆฌ์ค๋์ ์ฌ๋์ด ์๋๋ผ", |
|
|
"๋ ๊ทธ๋ฆฌ์ค๋๊ป์ ๋ํฌ ์์ ๊ณ์๋ฉด ๋ชธ์ ์ฃ๋ก ๋ง๋ฏธ์์ ์ฃฝ์ ๊ฒ์ด๋ ์์ ์๋ก ๋ง๋ฏธ์์ ์ด์ ์๋ ๊ฒ์ด๋๋ผ", |
|
|
"์์๋ฅผ ์ฃฝ์ ์ ๊ฐ์ด๋ฐ์ ์ด๋ฆฌ์ ์ด์ ์์ด ๋ํฌ ์์ ๊ฑฐํ์๋ฉด ๊ทธ๋ฆฌ์ค๋ ์์๋ฅผ ์ฃฝ์ ์ ๊ฐ์ด๋ฐ์ ์ด๋ฆฌ์ ์ด๊ฐ ๋ํฌ ์์ ๊ฑฐํ์๋ ๊ทธ์ ์์ผ๋ก ๋ง๋ฏธ์์ ๋ํฌ ์ฃฝ์ ๋ชธ๋ ์ด๋ฆฌ์๋ฆฌ๋ผ", |
|
|
"๊ทธ๋ฌ๋ฏ๋ก ํ์ ๋ค์ ์ฐ๋ฆฌ๊ฐ ๋น์ง ์๋ก๋ ์ก์ ์๊ฒ ์ ธ์ ์ก์ ๋๋ก ์ด ๊ฒ์ด ์๋๋๋ผ", |
|
|
"๋ํฌ๊ฐ ์ก์ ๋๋ก ์ด๋ฉด ๋ฐ๋์ ์ฃฝ์ ๊ฒ์ด๋ก๋ ์์ผ๋ก์จ ๋ชธ์ ํ์ค์ ์ฃฝ์ด๋ฉด ์ด๋ฆฌ๋", |
|
|
"๋ฌด๋ฆ ํ๋๋์ ์์ผ๋ก ์ธ๋ํจ์ ๋ฐ๋ ์ฌ๋์ ๊ณง ํ๋๋์ ์๋ค์ด๋ผ", |
|
|
"๋ํฌ๋ ๋ค์ ๋ฌด์์ํ๋ ์ข
์ ์์ ๋ฐ์ง ์๋ํ๊ณ ์์์ ์์ ๋ฐ์์ผ๋ฏ๋ก ์ฐ๋ฆฌ๊ฐ ์๋น ์๋ฒ์ง๋ผ๊ณ ๋ถ๋ฅด์ง๋๋๋ผ", |
|
|
"์ฑ๋ น์ด ์นํ ์ฐ๋ฆฌ์ ์๊ณผ ๋๋ถ์ด ์ฐ๋ฆฌ๊ฐ ํ๋๋์ ์๋
์ธ ๊ฒ์ ์ฆ์ธํ์๋๋", |
|
|
"์๋
์ด๋ฉด ๋ํ ์์์ ๊ณง ํ๋๋์ ์์์์ ๊ทธ๋ฆฌ์ค๋์ ํจ๊ป ํ ์์์๋ ์ฐ๋ฆฌ๊ฐ ๊ทธ์ ํจ๊ป ์๊ด์ ๋ฐ๊ธฐ ์ํ์ฌ ๊ณ ๋๋ ํจ๊ป ๋ฐ์์ผ ํ ๊ฒ์ด๋๋ผ", |
|
|
"์๊ฐํ๊ฑด๋ ํ์ฌ์ ๊ณ ๋์ ์ฅ์ฐจ ์ฐ๋ฆฌ์๊ฒ ๋ํ๋ ์๊ด๊ณผ ๋น๊ตํ ์ ์๋๋ค", |
|
|
"ํผ์กฐ๋ฌผ์ด ๊ณ ๋ํ๋ ๋ฐ๋ ํ๋๋์ ์๋ค๋ค์ด ๋ํ๋๋ ๊ฒ์ด๋", |
|
|
"ํผ์กฐ๋ฌผ์ด ํ๋ฌดํ ๋ฐ ๊ตด๋ณตํ๋ ๊ฒ์ ์๊ธฐ ๋ป์ด ์๋์ ์ค์ง ๊ตด๋ณตํ๊ฒ ํ์๋ ์ด๋ก ๋ง๋ฏธ์์์ด๋ผ", |
|
|
"๊ทธ ๋ฐ๋ผ๋ ๊ฒ์ ํผ์กฐ๋ฌผ๋ ์ฉ์ด์ง์ ์ข
๋
ธ๋ฆ ํ ๋ฐ์ ํด๋ฐฉ๋์ด ํ๋๋์ ์๋
๋ค์ ์๊ด์ ์์ ์ ์ด๋ฅด๋ ๊ฒ์ด๋๋ผ", |
|
|
"ํผ์กฐ๋ฌผ์ด ๋ค ์ด์ ๊น์ง ํจ๊ป ํ์ํ๋ฉฐ ํจ๊ป ๊ณ ํต์ ๊ฒช๊ณ ์๋ ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์๋๋๋ผ", |
|
|
"๊ทธ๋ฟ ์๋๋ผ ๋ํ ์ฐ๋ฆฌ ๊ณง ์ฑ๋ น์ ์ฒ์ ์ต์ ์ด๋งค๋ฅผ ๋ฐ์ ์ฐ๋ฆฌ๊น์ง๋ ์์ผ๋ก ํ์ํ์ฌ ์์ ๋ ๊ฒ ๊ณง ์ฐ๋ฆฌ ๋ชธ์ ์๋์ ๊ธฐ๋ค๋ฆฌ๋๋๋ผ", |
|
|
"์ฐ๋ฆฌ๊ฐ ์๋ง์ผ๋ก ๊ตฌ์์ ์ป์์ผ๋งค ๋ณด์ด๋ ์๋ง์ด ์๋ง์ด ์๋๋ ๋ณด๋ ๊ฒ์ ๋๊ฐ ๋ฐ๋ผ๋ฆฌ์", |
|
|
"๋ง์ผ ์ฐ๋ฆฌ๊ฐ ๋ณด์ง ๋ชปํ๋ ๊ฒ์ ๋ฐ๋ผ๋ฉด ์ฐธ์์ผ๋ก ๊ธฐ๋ค๋ฆด์ง๋๋ผ", |
|
|
"์ด์ ๊ฐ์ด ์ฑ๋ น๋ ์ฐ๋ฆฌ์ ์ฐ์ฝํจ์ ๋์ฐ์๋๋ ์ฐ๋ฆฌ๋ ๋ง๋
ํ ๊ธฐ๋ํ ๋ฐ๋ฅผ ์์ง ๋ชปํ๋ ์ค์ง ์ฑ๋ น์ด ๋งํ ์ ์๋ ํ์์ผ๋ก ์ฐ๋ฆฌ๋ฅผ ์ํ์ฌ ์นํ ๊ฐ๊ตฌํ์๋๋๋ผ", |
|
|
"๋ง์์ ์ดํผ์๋ ์ด๊ฐ ์ฑ๋ น์ ์๊ฐ์ ์์๋๋ ์ด๋ ์ฑ๋ น์ด ํ๋๋์ ๋ป๋๋ก ์ฑ๋๋ฅผ ์ํ์ฌ ๊ฐ๊ตฌํ์ฌ์ด๋๋ผ", |
|
|
"์ฐ๋ฆฌ๊ฐ ์๊ฑฐ๋์ ํ๋๋์ ์ฌ๋ํ๋ ์ ๊ณง ๊ทธ์ ๋ป๋๋ก ๋ถ๋ฅด์ฌ์ ์
์ ์๋ค์๊ฒ๋ ๋ชจ๋ ๊ฒ์ด ํฉ๋ ฅํ์ฌ ์ ์ ์ด๋ฃจ๋๋๋ผ", |
|
|
"ํ๋๋์ด ๋ฏธ๋ฆฌ ์์ ์๋ค์ ๋ํ ๊ทธ ์๋ค์ ํ์์ ๋ณธ๋ฐ๊ฒ ํ๊ธฐ ์ํ์ฌ ๋ฏธ๋ฆฌ ์ ํ์
จ์ผ๋ ์ด๋ ๊ทธ๋ก ๋ง์ ํ์ ์ค์์ ๋ง์๋ค์ด ๋๊ฒ ํ๋ ค ํ์ฌ์ด๋๋ผ", |
|
|
"๋ ๋ฏธ๋ฆฌ ์ ํ์ ๊ทธ๋ค์ ๋ํ ๋ถ๋ฅด์๊ณ ๋ถ๋ฅด์ ๊ทธ๋ค์ ๋ํ ์๋กญ๋ค ํ์๊ณ ์๋กญ๋ค ํ์ ๊ทธ๋ค์ ๋ํ ์ํ๋กญ๊ฒ ํ์
จ๋๋๋ผ", |
|
|
"๊ทธ๋ฐ์ฆ ์ด ์ผ์ ๋ํ์ฌ ์ฐ๋ฆฌ๊ฐ ๋ฌด์จ ๋ง ํ๋ฆฌ์ ๋ง์ผ ํ๋๋์ด ์ฐ๋ฆฌ๋ฅผ ์ํ์๋ฉด ๋๊ฐ ์ฐ๋ฆฌ๋ฅผ ๋์ ํ๋ฆฌ์", |
|
|
"์๊ธฐ ์๋ค์ ์๋ผ์ง ์๋ํ์๊ณ ์ฐ๋ฆฌ ๋ชจ๋ ์ฌ๋์ ์ํ์ฌ ๋ด์ฃผ์ ์ด๊ฐ ์ด์ฐ ๊ทธ ์๋ค๊ณผ ํจ๊ป ๋ชจ๋ ๊ฒ์ ์ฐ๋ฆฌ์๊ฒ ์ฃผ์์ง ์๋ํ๊ฒ ๋๋", |
|
|
"๋๊ฐ ๋ฅํ ํ๋๋๊ป์ ํํ์ ์๋ค์ ๊ณ ๋ฐํ๋ฆฌ์ ์๋กญ๋ค ํ์ ์ด๋ ํ๋๋์ด์๋", |
|
|
"๋๊ฐ ์ ์ฃํ๋ฆฌ์ ์ฃฝ์ผ์ค ๋ฟ ์๋๋ผ ๋ค์ ์ด์๋์ ์ด๋ ๊ทธ๋ฆฌ์ค๋ ์์์๋ ๊ทธ๋ ํ๋๋ ์ฐํธ์ ๊ณ์ ์์ ์ฐ๋ฆฌ๋ฅผ ์ํ์ฌ ๊ฐ๊ตฌํ์๋ ์์๋๋ผ", |
|
|
"๋๊ฐ ์ฐ๋ฆฌ๋ฅผ ๊ทธ๋ฆฌ์ค๋์ ์ฌ๋์์ ๋์ผ๋ฆฌ์ ํ๋์ด๋ ๊ณค๊ณ ๋ ๋ฐํด๋ ๊ธฐ๊ทผ์ด๋ ์ ์ ์ด๋ ์ํ์ด๋ ์นผ์ด๋ด", |
|
|
"๊ธฐ๋ก๋ ๋ฐ ใฑ)์ฐ๋ฆฌ๊ฐ ์ข
์ผ ์ฃผ๋ฅผ ์ํ์ฌ ์ฃฝ์์ ๋นํ๊ฒ ๋๋ฉฐ ๋์ด ๋นํ ์ ๊ฐ์ด ์ฌ๊น์ ๋ฐ์๋์ด๋ค ํจ๊ณผ ๊ฐ์ผ๋๋ผ", |
|
|
"๊ทธ๋ฌ๋ ์ด ๋ชจ๋ ์ผ์ ์ฐ๋ฆฌ๋ฅผ ์ฌ๋ํ์๋ ์ด๋ก ๋ง๋ฏธ์์ ์ฐ๋ฆฌ๊ฐ ๋๋ํ ์ด๊ธฐ๋๋๋ผ", |
|
|
"๋ด๊ฐ ํ์ ํ๋
ธ๋ ์ฌ๋ง์ด๋ ์๋ช
์ด๋ ์ฒ์ฌ๋ค์ด๋ ๊ถ์ธ์๋ค์ด๋ ํ์ฌ ์ผ์ด๋ ์ฅ๋ ์ผ์ด๋ ๋ฅ๋ ฅ์ด๋", |
|
|
"๋์์ด๋ ๊น์์ด๋ ๋ค๋ฅธ ์ด๋ค ํผ์กฐ๋ฌผ์ด๋ผ๋ ์ฐ๋ฆฌ๋ฅผ ์ฐ๋ฆฌ ์ฃผ ๊ทธ๋ฆฌ์ค๋ ์์ ์์ ์๋ ํ๋๋์ ์ฌ๋์์ ๋์ ์ ์์ผ๋ฆฌ๋ผ" |
|
|
]; |
|
|
|
|
|
const body = document.body; |
|
|
const verseDisplay = document.getElementById('verse-display'); |
|
|
const prevButton = document.getElementById('prev-verse'); |
|
|
const nextButton = document.getElementById('next-verse'); |
|
|
const rateSlider = document.getElementById('rate-slider'); |
|
|
const toggleModeButton = document.getElementById('toggle-mode'); |
|
|
let currentVerseIndex = 0; |
|
|
|
|
|
|
|
|
|
|
|
function displayVerse(index) { |
|
|
|
|
|
if (index < 0 || index >= verses.length) { |
|
|
return; |
|
|
} |
|
|
|
|
|
currentVerseIndex = index; |
|
|
|
|
|
|
|
|
verseDisplay.innerHTML = ''; |
|
|
|
|
|
|
|
|
const verseDiv = document.createElement('div'); |
|
|
verseDiv.classList.add('verse', 'active'); |
|
|
|
|
|
|
|
|
const verseNumberSpan = document.createElement('span'); |
|
|
verseNumberSpan.classList.add('verse-number'); |
|
|
verseNumberSpan.textContent = `๋ก๋ง์ 8์ฅ ${currentVerseIndex + 1}์ `; |
|
|
verseDiv.appendChild(verseNumberSpan); |
|
|
|
|
|
|
|
|
const parts = verses[currentVerseIndex].split(' '); |
|
|
|
|
|
|
|
|
const partsContainer = document.createElement('div'); |
|
|
partsContainer.classList.add('parts-container'); |
|
|
|
|
|
|
|
|
parts.forEach(partText => { |
|
|
|
|
|
if (partText.trim() !== '') { |
|
|
const partDiv = document.createElement('div'); |
|
|
partDiv.classList.add('part'); |
|
|
|
|
|
partDiv.textContent = partText.trim(); |
|
|
|
|
|
|
|
|
partDiv.addEventListener('click', function() { |
|
|
|
|
|
|
|
|
|
|
|
const allPartsInVerse = partsContainer.querySelectorAll('.part'); |
|
|
|
|
|
|
|
|
allPartsInVerse.forEach(p => { |
|
|
p.classList.remove('active'); |
|
|
}); |
|
|
|
|
|
|
|
|
this.classList.add('active'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const textToSpeak = this.textContent; |
|
|
|
|
|
|
|
|
if (textToSpeak && 'speechSynthesis' in window) { |
|
|
|
|
|
window.speechSynthesis.cancel(); |
|
|
|
|
|
|
|
|
const utterance = new SpeechSynthesisUtterance(textToSpeak); |
|
|
|
|
|
|
|
|
utterance.lang = 'ko-KR'; |
|
|
|
|
|
|
|
|
utterance.rate = parseFloat(rateSlider.value); |
|
|
|
|
|
|
|
|
|
|
|
window.speechSynthesis.speak(utterance); |
|
|
} else if (!('speechSynthesis' in window)) { |
|
|
console.warn("Text-to-speech is not supported in this browser."); |
|
|
} |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
partsContainer.appendChild(partDiv); |
|
|
} |
|
|
}); |
|
|
|
|
|
|
|
|
verseDiv.appendChild(partsContainer); |
|
|
|
|
|
|
|
|
verseDisplay.appendChild(verseDiv); |
|
|
|
|
|
|
|
|
prevButton.disabled = currentVerseIndex === 0; |
|
|
nextButton.disabled = currentVerseIndex === verses.length - 1; |
|
|
|
|
|
if ('speechSynthesis' in window) { |
|
|
window.speechSynthesis.cancel(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
prevButton.addEventListener('click', () => { |
|
|
displayVerse(currentVerseIndex - 1); |
|
|
}); |
|
|
|
|
|
|
|
|
nextButton.addEventListener('click', () => { |
|
|
displayVerse(currentVerseIndex + 1); |
|
|
}); |
|
|
|
|
|
|
|
|
toggleModeButton.addEventListener('click', () => { |
|
|
|
|
|
const isPreviewMode = body.classList.contains('preview-mode'); |
|
|
|
|
|
if (isPreviewMode) { |
|
|
|
|
|
body.classList.remove('preview-mode'); |
|
|
body.classList.add('hide-mode'); |
|
|
toggleModeButton.textContent = "๊ธ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ"; |
|
|
} else { |
|
|
|
|
|
body.classList.remove('hide-mode'); |
|
|
body.classList.add('preview-mode'); |
|
|
toggleModeButton.textContent = "๊ธ์ ๊ฐ๋ฆฌ๊ธฐ"; |
|
|
} |
|
|
|
|
|
if ('speechSynthesis' in window) { |
|
|
window.speechSynthesis.cancel(); |
|
|
} |
|
|
|
|
|
const allPartsInVerse = verseDisplay.querySelectorAll('.part'); |
|
|
allPartsInVerse.forEach(p => p.classList.remove('active')); |
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
document.addEventListener('DOMContentLoaded', () => { |
|
|
displayVerse(currentVerseIndex); |
|
|
}); |
|
|
|
|
|
</script> |
|
|
</body> |
|
|
</html> |