A very small, modular DOM utility for modern web apps.
Hobo core is only 7k minified and just 11k minified with all extended methods built in! Gzip and you're doing even better!
View the jsdocs for hobo.
Install hobo as a package dependency.
npm install properjs-hobo --save-dev
Import hobo into your app.
import $ from "properjs-hobo";
If you only want to use hobo core then you are done. See the next section for custom builds.
You can also create custom hobo builds with any of the available extended methods. First add a postinstall
script to your package.json
. Something like this:
{
"scripts": {
"postinstall": "cd ./node_modules/properjs-hobo && npm install && npm run build -- 'is eq not attr filter detach remove append'",
}
}
This is the easiest way to manage your custom hobo builds. If you ever want to add or remove a method just add it to the list and rum npm run postinstall
.
The small, powerful core methods that get the job done.
- on() - supports
mouseenter
andmouseleave
- off()
- find()
- data()
- ajax() - supports
xhr
andjsonp
- addClass()
- removeClass()
These are swiped from the Array prototype for zero overhead.
- map()
- push()
- forEach() - alias available as
each()
These are methods that can make hobo even more powerful.
- is()
- eq()
- not()
- one()
- next()
- prev()
- attr()
- last()
- first()
- index()
- parent()
- filter()
- detach()
- append()
- remove()
- trigger()
- prepend()
- closest()
- children()
- removeAttr()
- toggleClass()
If you are familiar with libraries like jQuery then hobo will be real easy.
import $ from "properjs-hobo";
// Hobo gives you a chainable method wrapper
$( ".js-element" )
// Events
.on( "click", ( e ) => {
// Handle stuff
})
.on( "click", ".js-delegate-selector", ( e ) => {
// Handle stuff
})
.off( "click", handlerFunction )
// Data
.data()
.data( "key" )
.data( "key", "value" )
.data({
key: "value",
and: [1, 2, 3]
})
// ClassNames
.addClass( "new-class" )
.removeClass( "old-class" )
// Querying
.find( ".js-child-elements" );
// Hobo gives you utility methods for XHR and Promise.
// Hobo loves promises, so the ajax method returns one.
$.ajax({
// String url
url: "/some/endpoint",
// Object hash to pass to endpoint
data: {
foo: "bar",
baz: "bot"
},
// This can be "html", "json" or "jsonp"
dataType: "json",
// The request method type, "POST" etc...
method: "GET",
// This sets the JSONP callback function name, the default is "callback"
jsonp: "someCallbackName",
// This is for passing headers
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
// This is for application/json payloads
payload: {
sayWhat: "I'm sending JSON"
}
}).then(function ( response ) {
// Success with response
}).catch(function ( error ) {
// Failure with error
});
Hobo uses Native Promises. You'll need a polyfill for IE if you're not already working with one. The es6-promise looks promising.
Hobo also uses Native DomStringMap with a fallback to NamedNodeMap.
Hobo is tested in Chrome 48.0.2564.116+, Firefox 44.0.2+, Safari 9.0.3+, IE 10+, iOS Mobile Safari 8.4+, Android 4.4.4+
- http://caniuse.com/#search=Promises
- http://caniuse.com/#search=DomStringMap
- http://caniuse.com/#search=NamedNodeMap
Submit an Issue or Pull Request if you find any bugs.