๋ง์ CSS ํดํท์๋ ๋ชจ๋ฌ ๋ํ ์์๋ฅผ ์์ฑํ๊ธฐ ์ํ ์คํ์ผ(๋ฐ JavaScript)์ด ํฌํจ๋์ด ์์ต๋๋ค. ์ด ์์ ์์๋ HTMX๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ๋ํ ์์๋ฅผ UIKit์ ์ฌ์ฉํ์ฌ ํ์ํ๋ ๋ฐฉ๋ฒ๊ณผ JavaScript๋ฅผ ๊ฑฐ์ ๋๋ ์ ํ ์ฌ์ฉํ์ง ์๊ณ ๋ ์ ๋๋ฉ์ด์ ์คํ์ผ์ ํธ๋ฆฌ๊ฑฐํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
๋จผ์ , ๋ํ ์์๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ๋ฒํผ๊ณผ ๋ํ ์์๊ฐ ๋ก๋๋ DIV๋ฅผ ๋งํฌ์ ํ๋จ์ ์ถ๊ฐํฉ๋๋ค:
์ด ์์ ๋ HTMX๋ฅผ ์ฌ์ฉํ์ฌ ์๊ฒฉ์ผ๋ก ๋ชจ๋ฌ ๋ํ ์์๋ฅผ ๋ก๋ํ๊ณ UIKit์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ์ด ์์ ์์๋ Hyperscript๋ฅผ ์ฌ์ฉํ์ฌ htmx์ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ผ๋ง๋ ๊น๋ํ๊ฒ ๊ฒฐํฉํ ์ ์๋์ง ์์ฐํฉ๋๋ค.
<button
id="showButton"
hx-get="/uikit-modal.html"
hx-target="#modals-here"
class="uk-button uk-button-primary"
_="on htmx:afterOnLoad wait 10ms then add .uk-open to #modal">Open Modal</button>
<div id="modals-here"></div>
์ด ๋ฒํผ์ ํด๋ฆญ ์ /uikit-modal.html
์ GET
์์ฒญ์ ๋ณด๋
๋๋ค. ์ด ํ์ผ์ ๋ด์ฉ์ #modals-here
DIV ์๋์ DOM์ ์ถ๊ฐ๋ฉ๋๋ค.
ํ์ค UIKit JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋์ , ์ฐ๋ฆฌ๋ Hyperscript๋ฅผ ์ฌ์ฉํ์ฌ UIKit์ ๋ถ๋๋ฌ์ด ์ ๋๋ฉ์ด์ ์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค. ์ ๋๋ฉ์ด์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์คํ๋ ์ ์๋๋ก 10ms์ ์ง์ฐ์ด ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก, ์๋ฒ๋ UIKit์ ํ์ค ๋ชจ๋ฌ์ ์ฝ๊ฐ ์์ ํ ๋ฒ์ ์ผ๋ก ์๋ตํฉ๋๋ค:
<div id="modal" class="uk-modal" style="display:block;">
<div class="uk-modal-dialog uk-modal-body">
<h2 class="uk-modal-title">Modal Dialog</h2>
<p>This modal dialog was loaded dynamically by HTMX.</p>
<form _="on submit take .uk-open from #modal">
<div class="uk-margin">
<input class="uk-input" placeholder="What is Your Name?">
</div>
<button type="button" class="uk-button uk-button-primary">Save Changes</button>
<button
id="cancelButton"
type="button"
class="uk-button uk-button-default"
_="on click take .uk-open from #modal wait 200ms then remove #modal">Close</button>
</form>
</div>
</div>
๋ฒํผ๊ณผ ํผ์ Hyperscript๋ ์ด ๋ํ ์์๊ฐ ์๋ฃ๋๊ฑฐ๋ ์ทจ์๋ ๋ ์ ๋๋ฉ์ด์ ์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค. Hyperscript๋ฅผ ์ฌ์ฉํ์ง ์๋๋ผ๋ ๋ชจ๋ฌ์ ์๋ํ์ง๋ง UIKit์ ํ์ด๋ ์ธ ์ ๋๋ฉ์ด์ ์ด ํธ๋ฆฌ๊ฑฐ๋์ง ์์ต๋๋ค.
๋ฌผ๋ก , ์ด ์์ ์ ์ํด JavaScript๋ฅผ ์ฌ์ฉํ ์๋ ์์ง๋ง, ์ฝ๋๊ฐ ํจ์ฌ ๊ธธ์ด์ง๋๋ค.
// This triggers the fade-in animation when a modal dialog is loaded and displayed
window.document.getElementById("showButton").addEventListener("htmx:afterOnLoad", function() {
setTimeout(function(){
window.document.getElementById("modal").classList.add("uk-open")
}, 10)
})
// This triggers the fade-out animation when the modal is closed.
window.document.getElementById("cancelButton").addEventListener("click", function() {
window.document.getElementById("modal").classList.remove("uk-open")
setTimeout(function(){
window.document.getElementById("modals-here").innerHTML = ""
,200
})
})