Javascript API

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ดˆ์ ์€ ์•„๋‹ˆ์ง€๋งŒ htmx๋Š” ์ฃผ๋กœ extension development์ด๋‚˜ events ์ž‘์—…์„ ์œ„ํ•œ ํ—ฌํผ ๋ฉ”์„œ๋“œ์˜ ์ž‘์€ API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

hyperscript ํ”„๋กœ์ ํŠธ๋Š” htmx ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ณด๋‹ค ๊ด‘๋ฒ”์œ„ํ•œ ์Šคํฌ๋ฆฝํŒ… ์ง€์›์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

#Method - htmx.addClass()

์ด ๋ฉ”์„œ๋“œ๋Š” ์ง€์ •๋œ ์š”์†Œ์— ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

#Parameters

or

#Example
  // ID๊ฐ€ 'demo'์ธ ์š”์†Œ์— 'myClass' ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  htmx.addClass(htmx.find('#demo'), 'myClass');

  // 1์ดˆ ํ›„์— ID๊ฐ€ 'demo'์ธ ์š”์†Œ์— 'myClass' ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  htmx.addClass(htmx.find('#demo'), 'myClass', 1000);

#Method - htmx.ajax()

htmx ์Šคํƒ€์ผ์˜ AJAX ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” Promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ ์ฝ˜ํ…์ธ ๊ฐ€ DOM์— ์‚ฝ์ž…๋œ ํ›„ callback์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

#Parameters

or

or

#Example
    // /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!');
    });

#Method - htmx.closest()

๋ณธ์ธ ์š”์†Œ๋ฅผ ํฌํ•จํ•˜์—ฌ ์ฃผ์–ด์ง„ ์š”์†Œ์˜ ๋ถ€๋ชจ์—์„œ ๊ฐ€์žฅ ์ผ์น˜ํ•˜๋Š” ์š”์†Œ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

#Parameters
#Example
  // ID๊ฐ€ 'demo'์ธ ์š”์†Œ๋ฅผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์œ„์น˜์—์„œ ๋‘˜๋Ÿฌ์‹ธ๋Š” div๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
  htmx.closest(htmx.find('#demo'), 'div');

#Property - htmx.config

๋Ÿฐํƒ€์ž„์— htmx๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์„ฑ์„ ์ €์žฅํ•˜๋Š” ์†์„ฑ์ž…๋‹ˆ๋‹ค.

meta tag๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ด๋Ÿฌํ•œ ์†์„ฑ์„ ์„ค์ •ํ•˜๋Š” ๋ฐ ์„ ํ˜ธ๋˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋ผ๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”.

#Properties
#Example
  // ํžˆ์Šคํ† ๋ฆฌ ์บ์‹œ ํฌ๊ธฐ๋ฅผ 30์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  htmx.config.historyCacheSize = 30;

#Property - htmx.createEventSource

A์ƒˆ Server Sent Event ์†Œ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์†์„ฑ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ง€์ • SSE ์„ค์ •์„ ์ œ๊ณตํ•˜๋„๋ก ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

#Value
#Example
  // ์ž๊ฒฉ ์ฆ๋ช…์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก SSE ์ด๋ฒคํŠธ ์†Œ์Šค๋ฅผ ์žฌ์ •์˜
  htmx.createEventSource = function(url) {
    return new EventSource(url, {withCredentials:false});
  };

#Property - htmx.createWebSocket

์ƒˆ WebSocket์„ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” property์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ง€์ • ์›น์†Œ์ผ“ ์„ค์ •์„ ์ œ๊ณตํ•˜๋„๋ก ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

#Value
#Example
  // ํŠน์ • ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๋„๋ก WebSocket์„ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  htmx.createWebSocket = function(url) {
    return new WebSocket(url, ['wss']);
  };

#Method - htmx.defineExtension()

์ƒˆ htmx ํ™•์žฅ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

#Parameters
#Example
  // 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!")
    }
  });

#Method - htmx.find()

์„ ํƒ์ž์™€ ์ผ์น˜ํ•˜๋Š” ์š”์†Œ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

#Parameters

or

#Example
    // ID๊ฐ€ my-div์ธ div ์ฐพ๊ธฐ
    var div = htmx.find("#my-div")

    // ํ•ด๋‹น div ๋‚ด์—์„œ ID๊ฐ€ another-div์ธ div๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
    var anotherDiv = htmx.find(div, "#another-div")

#Method - htmx.findAll()

์„ ํƒ์ž์™€ ์ผ์น˜ํ•˜๋Š” ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

#Parameters

or

#Example
    // ๋ชจ๋“  div ์ฐพ๊ธฐ
    var allDivs = htmx.findAll("div")

    // ์ฃผ์–ด์ง„ div ๋‚ด์˜ ๋ชจ๋“  p๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
    var allParagraphsInMyDiv = htmx.findAll(htmx.find("#my-div"), "p")

#Method - htmx.logAll()

๋””๋ฒ„๊น…์— ์œ ์šฉํ•œ ๋ชจ๋“  htmx ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

#Example
    htmx.logAll();

#Method - htmx.logNone()

์ด์ „์— ๋””๋ฒ„๊ฑฐ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•œ ๊ฒฝ์šฐ ์ด ์˜ต์…˜์„ ํ˜ธ์ถœํ•˜์—ฌ htmx๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋กํ•˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

#Example
    htmx.logNone();

#Property - htmx.logger

htmx๊ฐ€ ๋กœ๊ทธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” logger

#Value
#Example
    htmx.logger = function(elt, event, data) {
        if(console) {
            console.log("INFO:", event, elt, data);
        }
    }

#Method - htmx.off()

์š”์†Œ์—์„œ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

#Parameters

or

#Example
    // BODY์—์„œ click ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
    htmx.off("click", myEventListener);

    // ์ฃผ์–ด์ง„ div์—์„œ click ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
    htmx.off("#my-div", "click", myEventListener)

#Method - htmx.on()

์š”์†Œ์— ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

#Parameters

or

#Example
    // 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); });

#Method - htmx.onLoad()

htmx:load ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ callback์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋“ฑ ์ƒˆ๋กœ์šด ์ฝ˜ํ…์ธ ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

#Parameters
#Example
    htmx.onLoad(function(elt){
        MyLibrary.init(elt);
    })

#Method - htmx.parseInterval()

htmx๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์ผ์น˜ํ•˜๋Š” ๊ฐ„๊ฒฉ ๋ฌธ์ž์—ด์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. ํƒ€์ด๋ฐ ๊ด€๋ จ ์†์„ฑ์ด ์žˆ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์˜: int ๋‹ค์Œ์— s ๋˜๋Š” ms๊ฐ€ ์˜ค๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฐ’์€ parseFloat๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

#Parameters
#Example
    // returns 3000
    var milliseconds = htmx.parseInterval("3s");

    // returns 3 - Caution
    var milliseconds = htmx.parseInterval("3m");

#Method - htmx.process()

์ƒˆ ์ฝ˜ํ…์ธ ๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ htmx ๋™์ž‘์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ์ผ๋ฐ˜์ ์ธ htmx ์š”์ฒญ ์™ธ์— DOM์— ์ƒˆ๋กœ ์ถ”๊ฐ€๋˜๋Š” ์ฝ˜ํ…์ธ ๊ฐ€ ์žˆ์ง€๋งŒ htmx ์†์„ฑ์ด ๊ทธ ์ฝ˜ํ…์ธ ์—์„œ๋„ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

#Parameters
#Example
  document.body.innerHTML = "<div hx-get='/example'>Get it!</div>"
  // ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ์ฝ˜ํ…์ธ ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  htmx.process(document.body);

#Method - htmx.remove()

DOM์—์„œ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

#Parameters

or

#Example
  // DOM์—์„œ my-div๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  htmx.remove(htmx.find("#my-div"));

  // 2์ดˆ ์ง€์—ฐ ํ›„ DOM์—์„œ my-div๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  htmx.remove(htmx.find("#my-div"), 2000);

#Method - htmx.removeClass()

์ฃผ์–ด์ง„ ์š”์†Œ์—์„œ ํด๋ž˜์Šค๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

#Parameters

or

#Example
  // .myClass๋ฅผ my-div์—์„œ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  htmx.removeClass(htmx.find("#my-div"), "myClass");

  // .myClass๋ฅผ my-div์—์„œ 6์ดˆ ํ›„์— ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  htmx.removeClass(htmx.find("#my-div"), "myClass", 6000);

#Method - htmx.removeExtension()

htmx์—์„œ ์ง€์ •๋œ ํ™•์žฅ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

#Parameters
#Example
  htmx.removeExtension("my-extension");

#Method - htmx.swap()

HTML ์ฝ˜ํ…์ธ ์˜ ๊ต์ฒด(๋ฐ ์ •๋ฆฌ)์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

#Parameters
#Example
    // "Swapped!"์ด๋ผ๋Š” ํ…์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ #output ์š”์†Œ ๋‚ด๋ถ€ HTML์„ div ์š”์†Œ๋กœ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.
    htmx.swap("#output", "<div>Swapped!</div>", {swapStyle: 'innerHTML'});

#Method - htmx.takeClass()

์ฃผ์–ด์ง„ ์š”์†Œ์˜ ํ˜•์ œ ์š”์†Œ๋“ค๋กœ๋ถ€ํ„ฐ ์ฃผ์–ด์ง„ ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ ธ์™€์„œ, ํ˜•์ œ ์š”์†Œ๋“ค ์ค‘ ์ฃผ์–ด์ง„ ์š”์†Œ๋งŒ์ด ๊ทธ ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ง€๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

#Parameters
#Example
  // tab2์˜ ํ˜•์ œ์ž๋งค๋กœ๋ถ€ํ„ฐ selected ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  htmx.takeClass(htmx.find("#tab2"), "selected");

#Method - htmx.toggleClass()

์š”์†Œ์—์„œ ์ง€์ •๋œ ํด๋ž˜์Šค๋ฅผ ํ† ๊ธ€ํ•ฉ๋‹ˆ๋‹ค.

#Parameters
#Example
  // tab2์—์„œ selected ํด๋ž˜์Šค๋ฅผ ํ† ๊ธ€ํ•ฉ๋‹ˆ๋‹ค.
  htmx.toggleClass(htmx.find("#tab2"), "selected");

#Method - htmx.trigger()

์š”์†Œ์—์„œ ์ง€์ •๋œ ์ด๋ฒคํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

#Parameters
#Example
  // answer 42๋กœ #tab2์—์„œ myEvent ์ด๋ฒคํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  htmx.trigger("#tab2", "myEvent", {answer:42});

#Method - htmx.values()

htmx ๊ฐ’ ํ™•์ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ์ฃผ์–ด์ง„ ์š”์†Œ์— ๋Œ€ํ•ด ํ™•์ธ๋˜๋Š” input ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

#Parameters
#Example
  // ์ด form๊ณผ ๊ด€๋ จ๋œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  var values = htmx.values(htmx.find("#myForm"));