Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/webpro/DOMtastic
Small, fast, and modular DOM and event library for modern browsers.
https://github.com/webpro/DOMtastic
dom events jquery microjs modular performance selector
Last synced: 13 days ago
JSON representation
Small, fast, and modular DOM and event library for modern browsers.
- Host: GitHub
- URL: https://github.com/webpro/DOMtastic
- Owner: webpro
- Archived: true
- Created: 2013-08-19T20:00:40.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2022-02-23T20:28:52.000Z (over 2 years ago)
- Last Synced: 2024-10-26T21:50:15.669Z (14 days ago)
- Topics: dom, events, jquery, microjs, modular, performance, selector
- Language: JavaScript
- Homepage: https://domtastic.js.org
- Size: 1.35 MB
- Stars: 762
- Watchers: 18
- Forks: 46
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# DOMtastic
- Small, fast, and modular **DOM & Event** library for modern browsers.
- Same familiar API as jQuery (but without the extra "weight" of modules like `$.ajax`, `$.animate`, and `$.Deferred`).
- Dependency-free. Weighs in at only 1KB to 12KB (minified), depending on included modules. Full bundle is about 4KB gzipped.
- Works great stand-alone or paired up with e.g. Backbone or Angular.
- The [source](https://github.com/webpro/DOMtastic) is written in ES6 format.
- [Rollup](http://rollupjs.org) and [babel](https://babeljs.io) are used to create a [UMD](https://github.com/umdjs/umd) bundle (supporting AMD, CommonJS, and fallback to browser global).
- Supercharge your components and extend from the [base class](#es6-class).
- Easy to create a [custom build](#custom-build) to include or exclude parts.
- DOMtastic also serves as a starting point for your own application-specific DOM API ([read more](#build-a-custom-api-for-your-application)).## Quicklinks
- Bundled sources: [domtastic.js](https://cdn.jsdelivr.net/npm/domtastic@latest/dist/domtastic.js), [domtastic.min.js](https://cdn.jsdelivr.net/npm/domtastic@latest/dist/domtastic.min.js)
- [API documentation](https://domtastic.js.org/doc/)
- [Run tests](https://domtastic.js.org/test/)
- Coverage: [Istanbul](https://domtastic.js.org/coverage/), [Coveralls](https://coveralls.io/github/webpro/DOMtastic)
- [Run benchmarks](https://domtastic.js.org/benchmark/)[![Build Status](https://travis-ci.org/webpro/DOMtastic.png?branch=master)](https://travis-ci.org/webpro/DOMtastic)
[![Coverage Status](https://coveralls.io/repos/github/webpro/DOMtastic/badge.svg)](https://coveralls.io/github/webpro/DOMtastic)
![BrowserStack Status](https://www.browserstack.com/automate/badge.svg?badge_key=MUcvSm9ES1VaYlpTMnk0NytOVDdML3FxRlJNM0VNR2RQdnBPMGduNUowZz0tLUNHWkJ4V2t0SXNqUkRRQUJjTWVnekE9PQ==--c64c417a0144336c1f174ecbe35b4801f82b74e0)
[![Code Climate](https://codeclimate.com/github/webpro/DOMtastic/badges/gpa.svg)](https://codeclimate.com/github/webpro/DOMtastic)
[![gzip size](http://img.badgesize.io/https://unpkg.com/domtastic/dist/domtastic.min.js?compression=gzip)](https://unpkg.com/domtastic/dist/domtastic.min.js)
[![](https://data.jsdelivr.com/v1/package/npm/domtastic/badge)](https://www.jsdelivr.com/package/npm/domtastic)## Usage
### ES6 (with e.g. Babel)
```bash
npm install domtastic
``````javascript
import $ from 'domtastic';
```### CommonJS (with e.g. Browserify)
```bash
npm install domtastic
``````javascript
var $ = require('domtastic');
```### AMD
```bash
bower install domtastic
``````javascript
requirejs.config({
baseUrl: 'bower_components',
packages: [
{
name: 'domtastic',
main: 'domtastic'
}
]
});require(['domtastic'], function($) {
$('.earth').addClass('evergreen').on('sunrise', '.people', awake);
});
```### Browser Global
```html
```
```javascript
$('.planet').addClass('evergreen').on('sunrise', '.grass', grow);
```### ES6 Class
```javascript
import $ from 'domtastic';class MyComponent extends $.BaseClass {
progress(value) {
return this.attr('data-progress', value);
}
}let component = new MyComponent('.my-anchor');
component.progress('ive').append('enhancement
');
```Read more in the [baseClass article](https://medium.com/@webprolific/domtastic-s-baseclass-437f142e8bf4) or the [docs](https://domtastic.js.org/doc/#baseClass).
## API
### [Array](https://domtastic.js.org/doc/#array)
every
filter
forEach (alias: each)
indexOf
map
pop
push
reduce
reduceRight
reverse
shift
some
unshift### [CSS](https://domtastic.js.org/doc#css)
css
### [DOM](https://domtastic.js.org/doc/#dom/index)
after
append
before
clone
prepend### [DOM/attr](https://domtastic.js.org/doc#dom/attr)
attr
removeAttr### [DOM/class](https://domtastic.js.org/doc#dom/class)
addClass
hasClass
removeClass
toggleClass### [DOM/contains](https://domtastic.js.org/doc#dom/contains)
contains
### [DOM/data](https://domtastic.js.org/doc#dom/data)
data
prop### [DOM/extra](https://domtastic.js.org/doc#dom/extra)
appendTo
empty
remove
replaceWith
text
val### [DOM/html](https://domtastic.js.org/doc#dom/html)
html
### [Event](https://domtastic.js.org/doc/#event/index)
on (alias: bind)
off (alias: unbind)
one### [Event/ready](https://domtastic.js.org/doc#event/ready)
ready
### [Event/trigger](https://domtastic.js.org/doc#event/trigger)
trigger
triggerHandler### [NoConflict](https://domtastic.js.org/doc#noconflict)
noConflict
### [Selector](https://domtastic.js.org/doc/#selector/index)
$
find
matches### [Selector/closest](https://domtastic.js.org/doc#selector/closest)
closest
### [Selector/extra](https://domtastic.js.org/doc#selector/extra)
children
concat
contents
eq
first
get
parent
siblings
slice### [Type](https://domtastic.js.org/doc#type)
isArray
isFunction### [Util](https://domtastic.js.org/doc/#util)
extend
## But it doesn't even have _awesomest-method_!
As mentioned in the introduction, DOMtastic doesn't feature methods for Ajax, Animation, Promise, etc. Please find your own libraries to fill in the gaps as needed. Here are just some examples:
- Ajax: [microjs#ajax](http://microjs.com/#ajax), [rest.js](https://github.com/cujojs/rest)
- Animation: [microjs#animation](http://microjs.com/#animation), [Move.js](http://visionmedia.github.io/move.js/), [Animate.css](https://daneden.me/animate/)
- Promises: [when.js](https://github.com/cujojs/when), [RSVP.js](https://github.com/tildeio/rsvp.js)Please note that you can extend the `$.fn` object, just like [jQuery Plugins](http://learn.jquery.com/plugins/basic-plugin-creation/).
Feel free to [open an issue](https://github.com/webpro/DOMtastic/issues) if you feel an important method is missing.
## Browser Support
Latest versions of Chrome, Firefox, Safari, Opera, Android, Chrome Mobile iOS, and Mobile Safari. Internet Explorer 10 and up. IE9 requires a polyfill for `classList`.
## Performance
Run the [benchmark suite](https://domtastic.js.org/benchmark/) to compare the performance of various methods of jQuery, Zepto and DOMtastic (tl/dr; it's fast!).
## Custom Build
You can build a custom bundle that _excludes_ specific modules that you don't need:
```bash
git clone [email protected]:webpro/DOMtastic.git
cd DOMtastic
npm install
npm run bundle -- --exclude=css,dom/html,event/trigger
```Alternatively, you can do the opposite and _include_ what you need:
```bash
npm run bundle -- --include=array,selector/index,dom/class
```Find the output in the `dist/` folder.
### jQuery Compatibility
Some iterator method signatures in jQuery are different (i.e. non-standard), most notably the `index` before `element` argument in `each`, `filter` and `map`). However, a custom build that is compatible with jQuery can be created by using the `--jquery-compat` flag:
```bash
npm run bundle -- --jquery-compat
```### Build a custom API for your application
You can also build a custom API from the ground up. By default, DOMtastic [does it](https://github.com/webpro/DOMtastic/blob/master/src/index.js) for you, but you can easily do it yourself in a highly custom approach. Grab the `$` function from the `selector`, and extend the `$.fn` object with methods from specific modules:
```javascript
var selector = require('domtastic/commonjs/selector'),
dom = require('domtastic/commonjs/dom');var $ = selector.$;
$.fn = {};
$.fn.append = dom.append; // Or e.g. _.extend($, dom)
$.fn.prepend = dom.prepend;module.exports = $;
```This way, you don't have the slight overhead of the UMD boilerplate in a custom bundle, and a single location/module to define the API for your application. Works great with either AMD or Browserify.
## Tests
Run the hosted [test suite](https://domtastic.js.org/test/) in your browser. You can also clone this repo, and run the tests locally with [jsdom](https://github.com/tmpvar/jsdom) (using `npm test`). Run `npm run test:bs` to run the tests in real browsers using BrowserStack.
## Credits
Many thanks to these sources of inspiration:
- [jQuery](http://jquery.com/)
- [madrobby/zepto](https://github.com/madrobby/zepto/)
- [remy/min.js](https://github.com/remy/min.js)
- [Knockout](https://github.com/knockout/knockout/blob/master/src/utils.js)
- [inkling/Backbone.Native](https://github.com/inkling/backbone.native/blob/master/backbone.native.js)Thanks to the [jsDelivr Open Source CDN](https://www.jsdelivr.com/) for [hosting DOMtastic](https://www.jsdelivr.com/projects/domtastic).
[](https://www.jsdelivr.com)
Thanks to [BrowserStack](https://www.browserstack.com) for their real device cloud.
[](https://www.browserstack.com)
## License
[MIT](http://webpro.mit-license.org)