Dev Depot: Intention.js Restructures HTML in a Responsive Manner
Embracing the concept of responsive web design isn’t always clean and tidy, with many modern sites exhibiting telltale signs of digital sludge under their shiny surfaces — sludge that robs performance and creates a maintenance nightmare.
Enter Intention.js (www.intentionjs.com), which the publisher calls a lightweight tool for responsive design that manipulates the DOM via HTML attributes, so the methods for manipulation are placed with the elements themselves — enabling flexible layouts that do not have to be abstract or messy — but that can serve every imaginable viewing device.
Developed at Dow Jones to easily increase web layout options and flexibility, reduce development time and to lessen dependence on media-query-driven style sheet overrides, Intention.js dynamically restructures HTML in a responsive manner. The script addresses a range of questions, such as “What should an element’s classes be on mobile vs. tablet or where should advertising markup be placed when viewed on a desktop browser, or does a page require an alternate slideshow widget on touch-enabled devices?”
If these are design considerations that you concern yourself with, then Intention.js can provide a solution that alters pages based on the users’ device — with Context.js creating a set of common page contexts for width thresholds, touch devices and high-res displays, along with a standard fallback; with custom contexts and threshold groups easily added.
According to the publisher, Intention.js determines what it calls “threshold groups,” which define the context in which a visitor is viewing your site. These threshold groups work by measuring an axis — such as the browser’s width — or a device’s pixel density (for catering to high resolution screens).
Intention.js offers three basic manipulations: that of attribution, class and placement; allowing users to change the value of any attribute, add or remove an element’s class, and to adjust the position of an element within the structure of the containing document.
Using Intention.js is as simple as flagging an element as “intentional” and giving it an intentional attribute, which can be specific to a change in contexts in an axis, or a specific context passing “true,” or a specific context within a specific axis passing “true.”
While Intention.js responds to numerous device contexts by default, it is a highly scalable solution that is open to any index, so that any type of data that is quantifiable can be used to manipulate a web page — allowing coders to create custom contexts based on anything that they can measure — and then automatically restructure coding in response.
“It’s not just changing a page based on the browser’s width: it’s noticing touch-capabilities, portrait/landscape orientation [and] high resolution contexts,” states a rep. “Intention.js can be taught to restructure pages based on scroll depth, pageviews, [or the] time of day — basically anything!”
One handy feature is the ability to listen for Intention’s first response on page load, such as when wanting to insert specific content or run certain functions. When you don’t want the event handler to keep firing after that first load, jQuery’s Deferred Objects can come into play, but repeating event handlers are easy to setup as well.
Intention.js requires jQuery and Underscore.js and is compatible with all modern web browsers, including Internet Explorer 8 — but developers needing to accommodate this software (still run by legacy Windows XP users) will want to note that although jQuery 2.x dropped support for IE8, Intention will run on older versions of the jQuery libraries.
The script’s website and blog lists a variety of examples, including an interesting use of Intention.js contexts to drive animated characters; but such novelties aside, Intention.js offers a simple yet highly expandable and robust solution for responsive website creation — backed by The Wall Street Journal’s professional team of developers and issued under the MIT License for carefree script modification.
Try Intention.js with your existing framework, or use it to build a site from scratch — either approach helps deliver a website with a high degree of cross-platform compatibility and an engaging user experience.