๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ด์ ์ ์๋์ง๋ง htmx๋ ์ฃผ๋ก extension development์ด๋ events ์์ ์ ์ํ ํฌํผ ๋ฉ์๋์ ์์ API๋ฅผ ์ ๊ณตํฉ๋๋ค.
hyperscript ํ๋ก์ ํธ๋ htmx ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด๋ค ๊ด๋ฒ์ํ ์คํฌ๋ฆฝํ ์ง์์ ์ ๊ณตํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค.
htmx.addClass()
์ด ๋ฉ์๋๋ ์ง์ ๋ ์์์ ํด๋์ค๋ฅผ ์ถ๊ฐํฉ๋๋ค.
elt
- ํด๋์ค๊ฐ ์ถ๊ฐ๋ ์์class
- ์ถ๊ฐํ ํด๋์คor
elt
- ํด๋์ค๊ฐ ์ถ๊ฐ๋ ์์class
- ์ถ๊ฐํ ํด๋์คdelay
- ํด๋์ค๊ฐ ์ถ๊ฐ๋๊ธฐ ์ ์ง์ฐ์๊ฐ(๋ฐ๋ฆฌ์ด) // ID๊ฐ 'demo'์ธ ์์์ 'myClass' ํด๋์ค๋ฅผ ์ถ๊ฐํฉ๋๋ค.
htmx.addClass(htmx.find('#demo'), 'myClass');
// 1์ด ํ์ ID๊ฐ 'demo'์ธ ์์์ 'myClass' ํด๋์ค๋ฅผ ์ถ๊ฐํฉ๋๋ค.
htmx.addClass(htmx.find('#demo'), 'myClass', 1000);
htmx.ajax()
htmx ์คํ์ผ์ AJAX ์์ฒญ์ ๋ณด๋ ๋๋ค. ์ด ๋ฉ์๋๋ Promise๋ฅผ ๋ฐํํ๋ฏ๋ก ์ฝํ ์ธ ๊ฐ DOM์ ์ฝ์ ๋ ํ callback์ ์คํํ ์ ์์ต๋๋ค.
verb
- โGETโ, โPOSTโ, etc.path
- AJAX ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ํ URL ๊ฒฝ๋กelement
- target ์์ (defaults to the body
)or
verb
- โGETโ, โPOSTโ, etc.path
- AJAX ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ํ URL ๊ฒฝ๋กselector
- target ์ ํ์or
verb
- โGETโ, โPOSTโ, etc.path
- AJAX ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ํ URL ๊ฒฝ๋กcontext
- ๋ค์ ์ค ํ๋๋ฅผ ํฌํจํ๋ ์ปจํ
์คํธ ๊ฐ์ฒด
source
- ์์ฒญ์ source ์์event
- ์์ฒญ์ โํธ๋ฆฌ๊ฑฐโํ ์ด๋ฒคํธhandler
- ์๋ต HTML์ ์ฒ๋ฆฌํ callbacktarget
- ์๋ต์ผ๋ก ๊ต์ฒด๋ ๋์swap
- target์ ๊ธฐ์ค์ผ๋ก ์๋ต์ด ์ด๋ป๊ฒ ๊ต์ฒด๋ ์ง ๊ฒฐ์ ํฉ๋๋ค.values
- ์์ฒญ๊ณผ ํจ๊ป ์ ์ถํ ๊ฐ๋คheaders
- ์์ฒญ๊ณผ ํจ๊ป ์ ์ถํ ํค๋๋คselect
- ์๋ต์์ ๊ต์ฒดํ๋ ค๋ ์ฝํ
์ธ ๋ฅผ ์ ํํ ์ ์์ต๋๋ค. // /example๋ก GET์ ๋ณด๋ด๊ณ ์๋ต HTML์ #myDiv์ ์
๋ ฅํฉ๋๋ค.
htmx.ajax('GET', '/example', '#myDiv')
// /example์ GET์ ๋ณด๋ด๊ณ #myDiv๋ฅผ ์๋ต์ผ๋ก ๋ฐ๊ฟ๋๋ค.
htmx.ajax('GET', '/example', {target:'#myDiv', swap:'outerHTML'})
// ์ฝํ
์ธ ๊ฐ DOM์ ์ฝ์
๋ ํ ์ผ๋ถ ์ฝ๋๋ฅผ ์คํํฉ๋๋ค.
htmx.ajax('GET', '/example', '#myDiv').then(() => {
// ์ด ์ฝ๋๋ 'htmx:afterOnLoad' ์ด๋ฒคํธ ์ดํ์
// 'htmx:xhr:loadend' ์ด๋ฒคํธ ์ ์ ์คํ๋ฉ๋๋ค.
console.log('Content inserted successfully!');
});
htmx.closest()
๋ณธ์ธ ์์๋ฅผ ํฌํจํ์ฌ ์ฃผ์ด์ง ์์์ ๋ถ๋ชจ์์ ๊ฐ์ฅ ์ผ์นํ๋ ์์๋ฅผ ์ฐพ์ต๋๋ค.
elt
- ๊ธฐ์ค์ด ๋๋ ์์selector
- ์ฐพ์ ์ ํ์ // ID๊ฐ 'demo'์ธ ์์๋ฅผ ๊ฐ์ฅ ๊ฐ๊น์ด ์์น์์ ๋๋ฌ์ธ๋ div๋ฅผ ์ฐพ์ต๋๋ค.
htmx.closest(htmx.find('#demo'), 'div');
htmx.config
๋ฐํ์์ htmx๊ฐ ์ฌ์ฉํ๋ ๊ตฌ์ฑ์ ์ ์ฅํ๋ ์์ฑ์ ๋๋ค.
meta tag๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ด๋ฌํ ์์ฑ์ ์ค์ ํ๋ ๋ฐ ์ ํธ๋๋ ๋ฉ์ปค๋์ฆ์ด๋ผ๋ ์ ์ ์ ์ํ์ธ์.
attributesToSettle:["class", "style", "width", "height"]
- array of strings: ์ ๋ฆฌ ๋จ๊ณ์์ ์ ๋ฆฌํ ์์ฑrefreshOnHistoryMiss:false
- boolean: true
๋ก ์ค์ ํ๋ฉด htmx๋ ํ์คํ ๋ฆฌ ๋๋ฝ ์ AJAX ์์ฒญ์ ์ฌ์ฉํ๋ ๋์ ์ ์ฒด ํ์ด์ง ์๋ก ๊ณ ์นจ์ ์คํํฉ๋๋ค.defaultSettleDelay:20
- int: ์ฝํ
์ธ ๊ต์ฒด ์๋ฃ์ ์์ฑ ์ ๋ฆฌ ๋จ๊ณ ์ฌ์ด์ ๊ธฐ๋ณธ ์ง์ฐ ์๊ฐ์
๋๋ค.defaultSwapDelay:0
- int: ์๋ฒ๋ก๋ถํฐ ์๋ต์ ๋ฐ์ ํ ๊ต์ฒด๋ฅผ ์ํํ ๋๊น์ง์ ๊ธฐ๋ณธ ์ง์ฐ ์๊ฐ์
๋๋ค.defaultSwapStyle:'innerHTML'
- string: hx-swap
์ด ์๋ต๋ ๊ฒฝ์ฐ ์ฌ์ฉํ ๊ธฐ๋ณธ ๊ต์ฒด ์คํ์ผ์
๋๋ค.historyCacheSize:10
- int: ํ์คํ ๋ฆฌ ์ง์์ ์ํด localStorage
์ ๋ณด๊ดํ ํ์ด์ง ์์
๋๋ค.historyEnabled:true
- boolean: ํ์คํ ๋ฆฌ ์ฌ์ฉ ์ฌ๋ถincludeIndicatorStyles:true
- boolean: true์ด๋ฉด htmx๋ ํ์ด์ง์ ์๋์ CSS๋ฅผ ์ฝ์
ํ์ฌ htmx-indicator
ํด๋์ค๊ฐ ์์ผ๋ฉด ํ์๊ธฐ๋ฅผ ๋ณด์ด์ง ์๊ฒ ๋ง๋ญ๋๋ค.indicatorClass:'htmx-indicator'
- string: ์์ฒญ์ด ๋ณด๋ด์ง๋ ์ค์ผ ๋ indicator์ ํ์ํ ํด๋์คrequestClass:'htmx-request'
- string: ์์ฒญ์ด ๋ณด๋ด์ง๋ ์ค์ผ ๋ ํธ๋ฆฌ๊ฑฐ ์์์ ๋ฐฐ์นํ ํด๋์ค์
๋๋ค.addedClass:'htmx-added'
- string: htmx๊ฐ DOM์ ์ถ๊ฐํ ์์์ ์์๋ก ๋ฐฐ์นํ ํด๋์ค์
๋๋ค.settlingClass:'htmx-settling'
- string: HTMX๊ฐ ์ ๋ฆฌ ๋จ๊ณ์ ์์ ๋ ๋์ ์์์ ๋ฐฐ์นํ ํด๋์ค์
๋๋ค.swappingClass:'htmx-swapping'
- string: HTMX๊ฐ ๊ต์ฒด ๋จ๊ณ์ ์์ ๋ ๋์ ์์์ ๋ฐฐ์นํ ํด๋์ค์
๋๋ค.allowEval:true
- boolean: hx-vars
, ํธ๋ฆฌ๊ฑฐ ์กฐ๊ฑด ๋ฐ script ํ๊ทธ ํ๊ฐ๋ฅผ ํ์ฑํํ๊ธฐ ์ํด htmx์์ eval๊ณผ ์ ์ฌํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ฒ ํฉ๋๋ค. CSP ํธํ์ฑ์ ์ํด false
๋ก ์ค์ ํ ์ ์์ต๋๋ค.allowScriptTags:true
- boolean: ์๋ก์ด ์ฝํ
์ธ ์์ script ํ๊ทธ๊ฐ ํ๊ฐ๋๋๋ก ํ์ฉํฉ๋๋ค.inlineScriptNonce:''
- string: ์ธ๋ผ์ธ ์คํฌ๋ฆฝํธ์ ์ถ๊ฐํ nonceinlineStyleNonce:''
- string: ์ธ๋ผ์ธ ์คํ์ผ์ ์ถ๊ฐํ noncewithCredentials:false
- boolean: ์ฟ ํค, ์ธ์ฆ ํค๋ ๋๋ TLS ํด๋ผ์ด์ธํธ ์ธ์ฆ์์ ๊ฐ์ ์๊ฒฉ ์ฆ๋ช
์ ์ฌ์ฉํ์ฌ ๊ต์ฐจ ์ฌ์ดํธ Access-Control์ ํ์ฉํฉ๋๋ค.timeout:0
- int: ์์ฒญ์ด ์๋์ผ๋ก ์ข
๋ฃ๋๊ธฐ ์ ๊น์ง ๊ฑธ๋ฆด ์ ์๋ ์๊ฐ(๋ฐ๋ฆฌ์ด)์
๋๋ค.wsReconnectDelay:'full-jitter'
- string/function: Abnormal Closure
, Service Restart
๋๋ Try Again Later
์ด๋ฒคํธ ์ฝ๋์ ์ํด ์๊ธฐ์น ์์ ์ฐ๊ฒฐ ์์ค ํ ์ฌ์ฐ๊ฒฐ์ ์ํ getWebSocketReconnectDelay
์ ๊ธฐ๋ณธ ๊ตฌํ์
๋๋ค.wsBinaryType:'blob'
- string: WebSocket ์ฐ๊ฒฐ์ ํตํด ์์ ๋๋ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ ์ ํdisableSelector:"[hx-disable], [data-hx-disable]"
- array of strings: htmx๋ ์ด ์์ฑ์ด ์๋ ์์(๋ถ๋ชจ ์์๊ฐ ๊ฐ์ง๋ ๊ฒ๋ ํฌํจ)๋ฅผ ์ฒ๋ฆฌํ์ง ์์ต๋๋ค.scrollBehavior:'smooth'
- string: ํ์ด์ง ์ ํ ์ ๋ถ์คํธ๋ ๋งํฌ์ ๋์. ํ์ฉ๋๋ ๊ฐ์ auto
์ smooth
์
๋๋ค. smooth
๋ ํ์ด์ง ๋งจ ์๋ก ๋ถ๋๋ฝ๊ฒ ์คํฌ๋กคํ๋ฉฐ, auto
๋ ๊ธฐ๋ณธ ๋งํฌ์ฒ๋ผ ๋์ํฉ๋๋ค.defaultFocusScroll:false
- boolean: focus๋ ์์๊ฐ view๋ก ์คํฌ๋กค๋์ด์ผ ํ๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ฉฐ, focus-scroll ๊ต์ฒด ์์ ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ ์ํ ์ ์์ต๋๋ค.getCacheBusterParam:false
- boolean: true๋ก ์ค์ ํ๋ฉด htmx๋ GET
์์ฒญ์ org.htmx.cache-buster=targetElementId
ํ์์ผ๋ก ๋์ ์์๋ฅผ ์ถ๊ฐํฉ๋๋ค.globalViewTransitions:false
- boolean: true
๋ก ์ค์ ํ๋ฉด, htmx๋ ์๋ก์ด ์ฝํ
์ธ ๋ฅผ ๊ต์ฒดํ ๋ View Transition API๋ฅผ ์ฌ์ฉํฉ๋๋ค.methodsThatUseUrlParams:["get"]
- array of strings: htmx๋ ์ด๋ฌํ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์์ฒญ ๋ณธ๋ฌธ์ด ์๋ URL์ ์ธ์ฝ๋ฉํ์ฌ ์์ฒญ์ ํฌ๋งทํฉ๋๋ค.selfRequestsOnly:false
- boolean: true
๋ก ์ค์ ํ๋ฉด ํ์ฌ ๋ฌธ์์ ๋์ผํ ๋๋ฉ์ธ์ผ๋ก๋ง AJAX ์์ฒญ์ ํ์ฉํฉ๋๋ค.ignoreTitle:false
- boolean: true
๋ก ์ค์ ํ๋ฉด htmx๋ ์๋ก์ด ์ฝํ
์ธ ์์ title
ํ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ์ ๋ ๋ฌธ์ ์ ๋ชฉ์ ์
๋ฐ์ดํธํ์ง ์์ต๋๋ค.scrollIntoViewOnBoost:true
- boolean: ๋ถ์คํธ๋ ์์์ ๋์์ด ๋ทฐํฌํธ๋ก ์คํฌ๋กค๋๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋
๋๋ค. ๋ถ์คํธ๋ ์์์ hx-target
์ด ์๋ต๋ ๊ฒฝ์ฐ, ๋์์ ๊ธฐ๋ณธ์ ์ผ๋ก body
๋ก ์ค์ ๋์ด ํ์ด์ง๊ฐ ๋งจ ์๋ก ์คํฌ๋กค๋ฉ๋๋ค.triggerSpecsCache:null
- object: ํ๊ฐ๋ ํธ๋ฆฌ๊ฑฐ ์ฌ์์ ์ ์ฅํ์ฌ ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋์ ๊ตฌ๋ฌธ ๋ถ์ ์ฑ๋ฅ์ ํฅ์์ํค๋ ์บ์์
๋๋ค. ํญ์ ๋น์ฐ์ง ์๋ ์บ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๊ฐ๋จํ ๊ฐ์ฒด๋ฅผ ์ ์ํ๊ฑฐ๋ proxy object๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒด ์์คํ
์ ๊ตฌํํ ์ ์์ต๋๋ค. | // ํ์คํ ๋ฆฌ ์บ์ ํฌ๊ธฐ๋ฅผ 30์ผ๋ก ์
๋ฐ์ดํธํฉ๋๋ค.
htmx.config.historyCacheSize = 30;
htmx.createEventSource
A์ Server Sent Event ์์ค๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋๋ ์์ฑ์ ๋๋ค. ์ฌ์ฉ์ ์ง์ SSE ์ค์ ์ ์ ๊ณตํ๋๋ก ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค.
func(url)
- URL ๋ฌธ์์ด์ ๊ฐ์ ธ์ ์ EventSource
๋ฅผ ๋ฐํํ๋ ํจ์ // ์๊ฒฉ ์ฆ๋ช
์ ์ฌ์ฉํ์ง ์๋๋ก SSE ์ด๋ฒคํธ ์์ค๋ฅผ ์ฌ์ ์
htmx.createEventSource = function(url) {
return new EventSource(url, {withCredentials:false});
};
htmx.createWebSocket
์ WebSocket์ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋๋ property์ ๋๋ค. ์ฌ์ฉ์ ์ง์ ์น์์ผ ์ค์ ์ ์ ๊ณตํ๋๋ก ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค.
func(url)
- URL ๋ฌธ์์ด์ ๊ฐ์ ธ์ ์ WebSocket
์ ๋ฐํํ๋ ํจ์ // ํน์ ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋๋ก WebSocket์ ์ฌ์ ์ํฉ๋๋ค.
htmx.createWebSocket = function(url) {
return new WebSocket(url, ['wss']);
};
htmx.defineExtension()
์ htmx ํ์ฅ์ ์ ์ํฉ๋๋ค.
name
- ํ์ฅ ์ด๋ฆext
- ํ์ฅ ์ ์ // defines a silly extension that just logs the name of all events triggered
htmx.defineExtension("silly", {
onEvent : function(name, evt) {
console.log("Event " + name + " was triggered!")
}
});
htmx.find()
์ ํ์์ ์ผ์นํ๋ ์์๋ฅผ ์ฐพ์ต๋๋ค.
selector
- ์ผ์น์ํฌ ์ ํ์or
elt
- ์ผ์นํ๋ ์์๋ฅผ ์ฐพ์ ๋ฃจํธ ์์(๋ณธ์ธ ํฌํจ)selector
- ์ผ์น์ํฌ ์ ํ์ // ID๊ฐ my-div์ธ div ์ฐพ๊ธฐ
var div = htmx.find("#my-div")
// ํด๋น div ๋ด์์ ID๊ฐ another-div์ธ div๋ฅผ ์ฐพ์ต๋๋ค.
var anotherDiv = htmx.find(div, "#another-div")
htmx.findAll()
์ ํ์์ ์ผ์นํ๋ ๋ชจ๋ ์์๋ฅผ ์ฐพ์ต๋๋ค.
selector
- ์ผ์น์ํฌ ์ ํ์or
elt
- ์ผ์นํ๋ ์์๋ฅผ ์ฐพ์ ๋ฃจํธ ์์(๋ณธ์ธ ํฌํจ)selector
- ์ผ์น์ํฌ ์ ํ์ // ๋ชจ๋ div ์ฐพ๊ธฐ
var allDivs = htmx.findAll("div")
// ์ฃผ์ด์ง div ๋ด์ ๋ชจ๋ p๋ฅผ ์ฐพ์ต๋๋ค.
var allParagraphsInMyDiv = htmx.findAll(htmx.find("#my-div"), "p")
htmx.logAll()
๋๋ฒ๊น ์ ์ ์ฉํ ๋ชจ๋ htmx ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋กํฉ๋๋ค.
htmx.logAll();
htmx.logNone()
์ด์ ์ ๋๋ฒ๊ฑฐ๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์ ํ ๊ฒฝ์ฐ ์ด ์ต์ ์ ํธ์ถํ์ฌ htmx๊ฐ ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋กํ์ง ์๋๋ก ํฉ๋๋ค.
htmx.logNone();
htmx.logger
htmx๊ฐ ๋ก๊ทธํ๋ ๋ฐ ์ฌ์ฉํ๋ logger
func(elt, eventName, detail)
- ์์๋ฅผ ๊ฐ์ง๊ณ ์๋ ํจ์, eventName, ์ด๋ฒคํธ ์ธ๋ถ ์ ๋ณด ๋ฐ ๋ก๊ทธ htmx.logger = function(elt, event, data) {
if(console) {
console.log("INFO:", event, elt, data);
}
}
htmx.off()
์์์์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
eventName
- ๋ฆฌ์ค๋๋ฅผ ์ ๊ฑฐํ ์ด๋ฒคํธ ์ด๋ฆlistener
- ์ ๊ฑฐํ ๋ฆฌ์ค๋or
target
- ๋ฆฌ์ค๋๋ฅผ ์ ๊ฑฐํ ์์eventName
- ๋ฆฌ์ค๋๋ฅผ ์ ๊ฑฐํ ์ด๋ฒคํธ ์ด๋ฆlistener
- ์ ๊ฑฐํ ๋ฆฌ์ค๋ // BODY์์ click ๋ฆฌ์ค๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
htmx.off("click", myEventListener);
// ์ฃผ์ด์ง div์์ click ๋ฆฌ์ค๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
htmx.off("#my-div", "click", myEventListener)
htmx.on()
์์์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
eventName
- ๋ฆฌ์ค๋๋ฅผ ์ถ๊ฐํ ์ด๋ฒคํธ ์ด๋ฆlistener
- ์ถ๊ฐํ ๋ฆฌ์ค๋or
target
- ๋ฆฌ์ค๋๋ฅผ ์ถ๊ฐํ ์์eventName
- ๋ฆฌ์ค๋๋ฅผ ์ถ๊ฐํ ์ด๋ฒคํธ ์ด๋ฆlistener
- ์ถ๊ฐํ ๋ฆฌ์ค๋ // body์ click ๋ฆฌ์ค๋ ์ถ๊ฐ
var myEventListener = htmx.on("click", function(evt){ console.log(evt); });
// ์ฃผ์ด์ง div์ click ๋ฆฌ์ค๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
var myEventListener = htmx.on("#my-div", "click", function(evt){ console.log(evt); });
htmx.onLoad()
htmx:load
์ด๋ฒคํธ์ ๋ํ callback์ ์ถ๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก
์ฝํ
์ธ ๋ฅผ ์ด๊ธฐํํ๋ ๋ฑ ์๋ก์ด ์ฝํ
์ธ ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
callback(elt)
- ์๋ก ๋ก๋๋ ์ฝํ
์ธ ๋ฅผ ํธ์ถํ๊ธฐ ์ํ callback htmx.onLoad(function(elt){
MyLibrary.init(elt);
})
htmx.parseInterval()
htmx๊ฐ ์ํํ๋ ๋ฐฉ์๊ณผ ์ผ์นํ๋ ๊ฐ๊ฒฉ ๋ฌธ์์ด์ ๊ตฌ๋ฌธ ๋ถ์ํฉ๋๋ค. ํ์ด๋ฐ ๊ด๋ จ ์์ฑ์ด ์๋ ํ๋ฌ๊ทธ์ธ์ ์ ์ฉํฉ๋๋ค.
์ฃผ์: int ๋ค์์ s
๋๋ ms
๊ฐ ์ค๋ ๊ฒ์ ํ์ฉํฉ๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ๊ฐ์ parseFloat
๋ฅผ ์ฌ์ฉํฉ๋๋ค.
str
- timing string // returns 3000
var milliseconds = htmx.parseInterval("3s");
// returns 3 - Caution
var milliseconds = htmx.parseInterval("3m");
htmx.process()
์ ์ฝํ ์ธ ๋ฅผ ์ฒ๋ฆฌํ์ฌ htmx ๋์์ ํ์ฑํํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ผ๋ฐ์ ์ธ htmx ์์ฒญ ์ธ์ DOM์ ์๋ก ์ถ๊ฐ๋๋ ์ฝํ ์ธ ๊ฐ ์์ง๋ง htmx ์์ฑ์ด ๊ทธ ์ฝํ ์ธ ์์๋ ์๋ํ๋๋ก ํ๋ ค๋ ๊ฒฝ์ฐ์ ์ ์ฉํ ์ ์์ต๋๋ค.
elt
- ์ฒ๋ฆฌํ ์์ document.body.innerHTML = "<div hx-get='/example'>Get it!</div>"
// ์๋ก ์ถ๊ฐ๋ ์ฝํ
์ธ ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
htmx.process(document.body);
htmx.remove()
DOM์์ ์์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
elt
- ์ ๊ฑฐํ ์์or
elt
- ์ ๊ฑฐํ ์์delay
- ์์๊ฐ ์ ๊ฑฐ๋๊ธฐ ์ ์ ์ง์ฐ ์๊ฐ(๋ฐ๋ฆฌ์ด) // DOM์์ my-div๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
htmx.remove(htmx.find("#my-div"));
// 2์ด ์ง์ฐ ํ DOM์์ my-div๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
htmx.remove(htmx.find("#my-div"), 2000);
htmx.removeClass()
์ฃผ์ด์ง ์์์์ ํด๋์ค๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
elt
- ํด๋์ค๋ฅผ ์ ๊ฑฐํ ์์class
- ์ ๊ฑฐ๋ ํด๋์คor
elt
- ํด๋์ค๋ฅผ ์ ๊ฑฐํ ์์class
- ์ ๊ฑฐ๋ ํด๋์คdelay
- ํด๋์ค๊ฐ ์ ๊ฑฐ๋๊ธฐ ์ ์ ์ง์ฐ ์๊ฐ(๋ฐ๋ฆฌ์ด) // .myClass๋ฅผ my-div์์ ์ ๊ฑฐํฉ๋๋ค.
htmx.removeClass(htmx.find("#my-div"), "myClass");
// .myClass๋ฅผ my-div์์ 6์ด ํ์ ์ ๊ฑฐํฉ๋๋ค.
htmx.removeClass(htmx.find("#my-div"), "myClass", 6000);
htmx.removeExtension()
htmx์์ ์ง์ ๋ ํ์ฅ์ ์ ๊ฑฐํฉ๋๋ค.
name
- ์ ๊ฑฐํ ํ์ฅ ์ด๋ฆ htmx.removeExtension("my-extension");
htmx.swap()
HTML ์ฝํ ์ธ ์ ๊ต์ฒด(๋ฐ ์ ๋ฆฌ)์ ์ํํฉ๋๋ค.
target
- ๊ต์ฒด ๋์์ HTML ์์ ๋๋ ๋ฌธ์์ด๋ก ๋ ์ ํ์content
- ๊ต์ฒดํ ์ฝํ
์ธ ์ ๋ฌธ์์ด ํํswapSpec
- hx-swap
์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ํ๋ด๋ ๊ต์ฒด ์ฌ์
swapStyle
(required) - ๊ต์ฒด ์คํ์ผ(innerHTML
, externalHTML
, beforebegin
๋ฑ)swapDelay
, settleDelay
(number) - ๊ต์ฒด ๋ฐ ์ ๋ฆฌ ์ ๊ฐ๊ฐ์ ์ง์ฐtransition
(bool) - ๊ต์ฒด์ HTML transition์ ์ฌ์ฉํ ์ง ์ฌ๋ถignoreTitle
(bool) - ํ์ด์ง title ์
๋ฐ์ดํธ๋ฅผ ๋นํ์ฑํ ์ฌ๋ถhead
(string) - head
ํ๊ทธ ์ฒ๋ฆฌ ์ ๋ต(merge
, append
)์ ์ง์ ํฉ๋๋ค. head
์ฒ๋ฆฌ๋ฅผ ๋นํ์ฑํํ๋ ค๋ฉด ๋น์ ๋์ธ์.scroll
, scrollTarget
, show
, showTarget
, focusScroll
- ๊ต์ฒด ํ ์คํฌ๋กค ์ฒ๋ฆฌ๋ฅผ ์ง์ ํฉ๋๋ค.swapOptions
- ๊ต์ฒด๋ฅผ ์ํ ์ถ๊ฐ ์ ํ์ ๋งค๊ฐ๋ณ์
select
- ๊ต์ฒดํ ์ฝํ
์ธ ์ ๋ํ ์ ํ์(hx-select
์ ๋์ผ)selectOOB
- out of band์์ ๊ต์ฒดํ ์ฝํ
์ธ ์ ๋ํ ์ ํ์(hx-select-oob
์ ๋์ผ)eventInfo
- htmx:afterSwap
๋ฐ htmx:afterSettle
์์์ ์ฒจ๋ถํ ๊ฐ์ฒดanchor
- ์คํฌ๋กค์ ํธ๋ฆฌ๊ฑฐํ anchor ์์๋ ์ ์ฐฉ ์ view๋ก ์คํฌ๋กค๋ฉ๋๋ค. ์ ์ฒด ์คํฌ๋กค ์ฒ๋ฆฌ์ ๋ํ ๊ฐ๋จํ ๋์ ์ ๊ณตcontextElement
- ๊ต์ฒด ์์
์ ์ปจํ
์คํธ ์ญํ ์ ํ๋ DOM ์์์
๋๋ค. ํน์ ์์์ ๋ํด ํ์ฌ ํ์ฑํ๋ ํ์ฅ์ ์ฐพ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.afterSwapCallback
, afterSettleCallback
- ๊ฐ๊ฐ ๊ต์ฒด ๋ฐ ์ ๋ฆฌ ํ์ ํธ์ถ๋๋ callback ํจ์์
๋๋ค. ์ด๋ค ์ธ์๋ ์ฃผ์ง ๋ง์ธ์ // "Swapped!"์ด๋ผ๋ ํ
์คํธ๋ฅผ ์ฌ์ฉํ์ฌ #output ์์ ๋ด๋ถ HTML์ div ์์๋ก ๊ต์ฒดํฉ๋๋ค.
htmx.swap("#output", "<div>Swapped!</div>", {swapStyle: 'innerHTML'});
htmx.takeClass()
์ฃผ์ด์ง ์์์ ํ์ ์์๋ค๋ก๋ถํฐ ์ฃผ์ด์ง ํด๋์ค๋ฅผ ๊ฐ์ ธ์์, ํ์ ์์๋ค ์ค ์ฃผ์ด์ง ์์๋ง์ด ๊ทธ ํด๋์ค๋ฅผ ๊ฐ์ง๊ฒ ํฉ๋๋ค.
elt
- ํด๋์ค๋ฅผ ๊ฐ์ ธ๊ฐ ์์class
- ๊ฐ์ ธ๊ฐ์ง ํด๋์ค // tab2์ ํ์ ์๋งค๋ก๋ถํฐ selected ํด๋์ค๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
htmx.takeClass(htmx.find("#tab2"), "selected");
htmx.toggleClass()
์์์์ ์ง์ ๋ ํด๋์ค๋ฅผ ํ ๊ธํฉ๋๋ค.
elt
- ํด๋์ค๋ฅผ ํ ๊ธํ๋ ์์class
- ํ ํด๋ ํด๋์ค // tab2์์ selected ํด๋์ค๋ฅผ ํ ๊ธํฉ๋๋ค.
htmx.toggleClass(htmx.find("#tab2"), "selected");
htmx.trigger()
์์์์ ์ง์ ๋ ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค.
elt
- ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ์์name
- ํธ๋ฆฌ๊ฑฐํ ์ด๋ฒคํธ์ ์ด๋ฆdetail
- ์ด๋ฒคํธ ์ธ๋ถ์ ๋ณด // answer 42๋ก #tab2์์ myEvent ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค.
htmx.trigger("#tab2", "myEvent", {answer:42});
htmx.values()
htmx ๊ฐ ํ์ธ ๋ฉ์ปค๋์ฆ์ ํตํด ์ฃผ์ด์ง ์์์ ๋ํด ํ์ธ๋๋ input ๊ฐ์ ๋ฐํํฉ๋๋ค.
elt
- ๊ฐ์ ํ์ธํ ์์request type
- ์์ฒญ ์ ํ (์: get
๋๋ post
). GET์ด ์๋ ๊ฒฝ์ฐ ์์๋ฅผ ํฌํจํ๋ form์ด ํฌํจ๋ฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ post
์
๋๋ค. // ์ด form๊ณผ ๊ด๋ จ๋ ๊ฐ์ ๊ฐ์ ธ์ต๋๋ค.
var values = htmx.values(htmx.find("#myForm"));