npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@jakub21/domi

v1.0.10

Published

Object oriented DOM manipulation package.

Downloads

6

Readme

Domi.js package

Object oriented DOM manipulation package.

(see ./demo for examples)

Setup

Install the package

The package is available on the NPM.

npm install @jakub21/domi

Setup

The package exposes the path to the bundled file. Use any server setup to make it accessible from the client (for example express).

const domiBundlePath = require('@jakub21/domi').path;

API

Domi objects

This is the core of the Domi package. Everything in this section is contained in a global object named simply $.

$.get(query, parent)

Creates new DomiObject from an existing DOM object. By default parent is the document. Query is passed to the native querySelector method.

$.get('#Content');

returns wrapper of an existing element with ID Content.

$.get('.fullWidth');

returns wrapper of first existing element with class fullWidth.

$.getArr(query, parent)

The same as $.get but creates an array of DomiObjects. Query is passed to the native querySelectorAll method.

$.getArr('.fullWidth');

returns array of wrappers of all existing elements with class fullWidth.

$.make(makeData)

Creates new DOM element and its DomiObject wrapper. makeData is a string with general information about the element. Tag name is required and must be the first word. Object's id and class can be defined by adding # and . prefixed words correspondingly. Additionally, bool flags can be set to true by adding their names prefixed by !.

$.make('div #Content .fullWidth .dark !hidden');

Creates a div tag with ID Content, classes fullWidth and dark and sets hidden property to true. The function then returns the element's DomiObject wrapper.

DomiObject

Wraps DOM objects, providing chainable manipulation methods.

var dobj = new $.DomiObject(domElement);

Example of chaining methods

$.get('#foo').empty() // find our element with ID 'foo' and remove its content
  .on('click', ()=>{console.log('Click!');}) // Add click event listener
  .append( // Inside #foo, append a child 'div' node with ID `newChild` ...
    $.make('div #newChild').prop({innerText: 'Bar'})) // ... and 'Bar' inner text
prop(config)

Change object properties. config is an object where keys are corresponding DOM object property names.

dobj.prop({title: 'This element now has a title!'});
remove()

Remove object from the DOM tree.

empty()

Delete all child nodes.

append(...others)

Append provided DomiObjects after the element's child nodes.

var foo = $.get('#foo');
var bar = $.make('div #bar');
dobj.append(foo, bar);
prepend(...others)

Append provided DomiObjects before the element's child nodes.

before(...others)

Insert provided DomiObjects before the element.

after(...others)

Insert provided DomiObjects after the element.

on(domEventKey, callback)

Alias for addEventListener. If domEventKey is an array, it creates listeners for all entries in it.

dobj_1.on('click', myFunc1);
dobj_2.on(['mousemove', 'keydown'], myFunc2);
onk(domEventKey, keyboard, keyName, callback)

Same as on but additionally creates case-sensitive keyboard binding. keyboard must be an instance of $.Keyboard. keyName is checked against key property of original DOM event.

var kb = new $.Keyboard(document.body);
dobj.onk('click', kb, 'a', myFunc);
onkIns(domEventKey, keyboard, keyName, callback)

Same as on but additionally creates case-insensitive keyboard binding.

DomiObject - SHP Methods

For these methods to work you need shp.js to be included in your project.

appendShp(shp)

Compile provided SHP code and append created nodes after the element's child nodes.

dobj.appendShp(`
  $button[#Button1 .red] {Click me}
  $button[#Button2 .blue] {No, click me!}
`);
prependShp(shp)

Compile provided SHP code and prepend created nodes before the element's child nodes.

beforeShp(shp)

Compile provided SHP code and insert created nodes before the element.

afterShp(shp)

Compile provided SHP code and insert created nodes after the element.

StyleManager

Each DomiObject has a StyleManager attached as a _s property. All its methods are chainable.

var sm = dobj._s;
set(property, value)

Adds inline CSS property.

sm.set('color', '#F00');
style(styles)

Adds many inline CSS properties. styles is an object with style definitions.

sm.style({color: '#F00', fontFamily: 'sans-serif'});
add(cssClass)

Adds CSS class to the element.

sm.add('fullWidth');
remove(cssClass)

Removes CSS class from the element.

sm.remove('fullWidth');
toggle(cssClass)

Toggles CSS class in the element.

sm.toggle('fullWidth');
choice(cssClass, choices)

Adds chosen class to the element and removes all other. Chosen class must be in the choices array.

sm.choice('red', ['red', 'green', 'blue']);
nextChoice(choices)

Finds currently chosen class in the choices array, removes it and adds the next one. If the last class was present, it loops around and adds the first one.

sm.nextChoice(['red', 'green', 'blue']);

Keyboard

Handles keyboard bindings.

var kb = new $.Keyboard(dobj);

dobj parameter is an instance of DomiObject. If it's undefined, bindings are added to the document instead.

Some elements do not accept keyboard focus and in result their bindings are never fired. If that's the case with the element you want to bind, try adding tab index property.

dobj.prop({tabIndex: 0});

Keyboard bindings are automatically added in onk and onkIns methods of the DomiObject. This means that in most cases you might only need to create the Keyboard object and pass the instance around. If you, however, want to add keyboard bindings without creating corresponding buttons, you will have to utilize the methods below.

bind(keys, callback)

Adds keydown event listener to the DomiObject. keys must be a key identifier (like key property of original DOM events). It can also be an array of identifiers.

kb.bind('e', func1);
kb.bind(['1', '2', '3'], func2)
bindIns(keys, callback)

It works just like bind but additional keys are added so that letter case does not matter. This means that the letter bindings will be fired independently of the state of Shift and CapsLock keys.

// all three calls have the same effect
kb.bind(['E', 'e'], func);
kb.bindIns('E', func);
kb.bindIns('e', func);

Toggles (general)

This set of classes is responsible for dynamically changing element properties. Everything in this section is contained in a global object named $toggle.

General toggles switch between on and off state. The methods below are shared among all general toggles.

on()
off()
toggle()

Hide

var tg = new $toggle.Hide(dobj);

Shows and hides attached element by changing its hidden property.

on - visible

off -hidden

CssClass

var tg = new $toggle.CssClass(dobj, onClass, offClass);

Adds different CSS classes to the attached element depending on the state.

on - add onClass to the element

off - add offClass to the element

AnimHide

var tg = new $toggle.AnimHide(dobj, onClass, offClass, delay);

Combination of Hide and CssClass. Toggling is delayed so that smooth animation can be achieved through CSS property transitions. Delay is expressed in seconds.

on - make element visible and, after the delay, add onClass.

off - add offClass and, after the delay, hide the element.

Toggles (other)

Other, more complex toggles.

Group

var gr = new $toggle.Group(...toggles);

Manages multiple toggles so that all are in the same state at all times. It has methods of general toggles.

add(other)

Adds another general toggle., Alternative for adding in the constructor.

SingleChoice

var sc = new $toggle.SingleChoice(toggleClass, ...defaultOptions);

Manages multiple toggles to that only one is turned on at any time. Can utilize any general toggle. toggleClass is a general toggle class (not instance) that will be used. ...defaultOptions are default parameters passed when individual toggles are created.

add(ID, dobj, ...options)

Creates toggle with the dobj, the default ...defaultOptions from the constructor and ...options. The ID is later used to choose the toggle.

addToggle(ID, toggle)

Adds new toggle. This method can be used when toggles more advanced than these created with the add method are required. The ID is later used to choose the toggle. Parameter toggle is instance of any general toggle (or with general methods).

goto(ID)

Turns on the toggle with specified ID and turns off all the others.

enableOnDelay(seconds)

Delays turning on the toggle in all subsequent goto calls. Turning off other toggles is not affected.