Website Gitter chat Contribute to Docs Assets Builder
BunnyJS is a modern Vanilla JS and ES6 library and next-generation front-end framework, package of small stand-alone components without dependencies.
For help & ideas - DM me on Twitter
IE9+, last 2 versions of Chrome, Firefox, Safari, Android 4.4+, iOS 9+
npm install bunnyjs --save
dists
folder or any CDN.<script src="https://unpkg.com/bunnyjs/dist/..."></script>
Recommended way to use any of BunnyJS component is - "do not change the code you do not own". That means do not modify native prototypes or any 3rd party code.
base
or core
folder in your app,Object.assign()
or Object.create
import { Component as BunnyComponent } from 'bunnyjs/src/...';
export const Component = Object.assign({}, BunnyComponent, {
init(arg) {
// do whatever you want
console.log(arg);
// call default (parent)
return BunnyComponent.init(arg);
}
});
npm install assets-builder
first.examples
folder. File index.html
can be opened in the browser to view examples. Examples are generated with npm build
npm build dist -p
Learn how to build Vanilla JavaScript components on Medium.
src/DOMObserver
may be used to listen for DOM events like when new tag (component) was inserted into DOM or removed. It is based on latest Mutation Observer API (IE11+) and allows to automatically init components inserted into DOM later.
BunnyJS provides an experimental base abstract src/Component
which may be used to create custom components:
<script src="https://unpkg.com/bunnyjs/dist/component.min.js"></script>
Below is Clock example from Inferno. As you can see you can do everything in Vanilla JS with less code, size and it works natively.
const MyClock = Object.assign({}, Component, {
tagName: 'clock',
attributes: {
date: new Date,
},
addEvents(clock) {
clock._timer = setInterval(() => {
clock.date = new Date;
}, 1000);
},
uninit(clock) {
clearInterval(clock._timer);
},
__date(clock, newVal) {
clock.textContent = newVal.toLocaleTimeString();
}
});
MyClock.register();
Now just document.body.appendChild(document.createElement('clock'))
and it works.
To update the whole "state" of the component you may just use Vanilla JS Object.assign(component, {stateObject})
.
For example, you have a simple btn.counter = 1
or Object.assign(document.getElementsByTagName('btn')[0], {counter: 1})
;
You may also set default counter value with <btn counter="6">
For more examples look in examples/component
folder.
© Mev-Rael