18 July 2017 - elementals.js 3.0 RC 1 -- Took a while
By Jason M. Knight (aka Deathshadow)

Release candidate 1 of elementals.js 3.0 has been released. This breaks from the compatibility chain of 2.x/earlier and should be treated as a whole new and different project.

What took so long, and why the break?

YES, this release took FAR longer than planned -- to the tune of nearly four months.. The biggest reason was I had a full-time job consuming the share of my time; paying work comes before stuff I do basically for free to at least TRY and help others... but now that said job is past (after a breakup that makes most divorces look civil), back to plucking away at this.

It was also delayed as I wanted to get as much feedback as I could on what was already in place. That feedback caused me to reconsider at a low level how not only elementals.js worked, but also how it was laid out and organized both internally, and from a documentation standpoint. Switching to Objects with sub-methods for a lot of common operations simply makes more sense and allows me to create the list of what needs to be documented and how the navigation on the site for that documentation works automatically. All I have to do when something new is added is pull up a list that says "Hey, you need to document this function/method!". This sped the development process greatly despite the relative lack of time I had to put into things.

I've also gathered a small team of testers who have provided invaluable insight into both real world deployment situations, as well as tracking down bugs and corner-case scenarios I probably wouldn't have thought of on my own. This too took time to organize and provided even more things for me to run around fixing and changing.

Functionality additions

Several bits of new functionality have also been added including a polyfill for RequestAnimationFrame, Cookie handling, cross-browser copying to the clipboard, and Element positioning/scroll metrics.

The re-orgnaization has moved many sibling-level functions into sub-objects. For example _.nodeReplace is now _.Node.replace -- this is part of that object based adjustment to ease documentation above. Some functions also got renamed due to major expansions in what they can do. _.Node.write for example is a vastly more powerful routine than 2.0's _.nodeAdd ever would/could have been. Several "constant" values have also been added such as _.EMPTY_TAGS for easy use in the number of cases where knowing whcih elements can and cannot have innerText might be useful.

As part of the functionality changes the size limits for the 'raw' non-minified codebase have been lifted. It took a bit for me to be convinced, but really when it comes down to it there are only TWO numbers that really matter on filesizes here... gzipped, and minified + gzipped. To that end the library currently is set for a hard ceiling of 12k gzipped for the 'raw' fully commented and verbose source, and 8k for the minified version. As of this writing 3.0 RC1 comes to 8.98k and 6.13k respectively for each of those limits -- plenty of room to still add things if need be.

Site Changes

Finally nearly an entire month was put into improving the navigation of the reference pages and rewriting them to match the current implementation. Honestly it took more time to bring that part of the website up to snuff than was actually put into elementals.js itself. The site design has also been tweaked based on user feedback to try and be a hair more useful. Probably the biggest change you'll notice is that on really large screens the sub-navigation is on the left instead of sandwiched between the content and the advertisement/donate are. That navigation is now far more useful, with more subsections, and when diving "deep" into the "underscore" object you will be far, far less overloaded with choices.


A major rewrite of both eFlipper and eSmooth are coming. Both are at this point ports from the 2.0 codebase and haven't been 'properly' updated to 3.0 methodologies... so stay tuned for that. The new version of eFlipper will be significantly more 'content neutral' from a JavaScript standpoint, with carousels of almost any content type being possible if you have the CSS knowledge to customize it as appropriate!

Likewise a general "automation" script to allow classed based addition of select/copy buttons as well as some other handy features is likely to emerge with or before the next major elementals update.

I am HOPING to port over my lightbox script and make it far more 'content neutral' as well -- likely with specialized subversions for images, media, frames, and AJAX'd into place content. On that particular front though such a script is currently firmly in the "It's done when it's done" status.

When will it be production ready?

All goes well barring any major bugfixes, I'm HOPING to take it from "release candidate" status to "production" on 4 August 2017; though that will hinge greatly on what/if the public finds that my newly minted internal testing working group didn't come across during the EXTENDED Beta period. (aka May and June) It's actually interesting as during that time those of us working on it behind the scenes were arguing as to whether to preserve how 2.0 works and make a 2.1, or to make a clean break and call it 3 -- just as 2 was a clean break from 1. Bottom line is I want this to be the best script I can make, and sticking with a number of the failings of how 2.x was organized wasn't going to deliver that.

Special Thanks

Finally I would like to give a shout out to those of you who have donated to the project. YOU are one of the few reasons this project has remained afloat at all, and your advice and encouragement is the only thing that prevented me from abandoning it altogether. Things have been rough the past few months, it's been really hard to find the time to devote to this that it deserved... so I thank you for your patience and time.

In many ways you folks are the ones who kept the lights on the past four months as I was occupied elsewhere.


  • elementals.js
    A lightweight JavaScript library focusing on cross browser support, ECMAScript polyfills, and DOM manipulation.
  • eFlipper.js
    An image carousel script using elementals.js
  • eProgress.js
    A JavaScript controllable progress bar using elementals.js. Based on the nProgress project that relies on the much heavier jQuery library.


Browse code samples of people I've helped on various forums. These code snippets, images, and full rewrites of websites date back a decade or more, and are organized by the forum username of who I was helping. You'll find all sorts of oddball bits and pieces in here. You find any of it useful, go ahead, pick up the ball, and run with it.


Best Viewed With Eyeballs