--- layout: layout.njk title: kutty - high power tools for html ---
## [Kutty in a Nutshell](#introduction) Kutty is a library that allows you to access modern browser features directly from HTML, rather than using javascript. To understand kutty, first lets take a look at an anchor tag: ``` html Blog ``` This anchor tag tells a browser: > "When a user clicks on this link, issue an HTTP GET request to '/blog' and load the response content > into the browser window". With that in mind, consider the following bit of HTML: ``` html
Click Me!
``` This tells kutty: > "When a user clicks on this div, issue an HTTP POST request to '/clicked' and load the response content into the inner > html of this element" Kutty extends the basic idea of that anchor tag, but opens up many more possibilities: * Any element can issue a HTTP request * Any event can trigger the request (not just clicks or form submissions) * HTTP requests are done via AJAX * Different HTTP verbs can used * The response replaces the content of the element, rather than the entire page When you are using kutty, you respond to the AJAX calls with *HTML* rather than *JSON*, often just a small amount of HTML rather than the whole page. Note that if you prefer, you can use the `data-` prefix when using kutty: ``` html Click Me! ``` ## [Installing](#installing) Kutty is a dependency-free javascript library. It can be used via [NPM](https://www.npmjs.com/) as "`kutty.org`" or downloaded or included from [unpkg](https://unpkg.com/browse/kutty.org/) or your other favorite NPM-based CDN: ``` html ``` ## [AJAX](#ajax) One of the primary features kutty provides are attributes that allow you to issue AJAX requests directly from HTML: * [kt-get](/attributes/kt-get) - Issues a `GET` request to the given URL * [kt-post](/attributes/kt-post) - Issues a `POST` request to the given URL * [kt-put](/attributes/kt-put) - Issues a `PUT` request to the given URL (see [details](#kutty-request-details)) * [kt-patch](/attributes/kt-patch) - Issues a `PATCH` request to the given URL (see [details](#kutty-request-details)) * [kt-delete](/attributes/kt-delete) - Issues a `GET` request to the given URL (see [details](#kutty-request-details)) Each of these attributes takes a URL to issue an AJAX request to. The element will issue a request of the specified type to the given URL when the element is [triggered](#triggers): ```html
Put To Messages
``` This tells the browser: > When a user clicks on this div, PUT to the URL /messages and load the response into the div ### [Triggering Requests](#triggers) By default AJAX requests are triggered by the "natural" event of an element: * `input`, `textarea` & `select`: the `change` event * `form`: the `submit` event * everything else: the `click` event If you don't want the request to happen on the default event, you can use the [kt-trigger](/attributes/kt-trigger) attribute to specify the event of interest. Here is a `div` that posts to `/mouse_entered` when a mouse enters it: ```html
[Here Mouse, Mouse!]
``` If you want a request to only happen once, you can use the `once` modifier for the trigger: ```html
[Here Mouse, Mouse!]
``` There are few other modifiers you can use for trigger: * `changed` - only issue a request if the value of the element has changed * `delay: