O'Reilly

MooTools Quick Coding: Expand Abbreviation

By on  

One of the many great reasons for an official MooTools Forge is that I get to check one place to find numerous MooTools plugins that I've never seen before. One such plugin, Expand Abbreviation, allows the developer to create elements using ZEN-Coding methodology. Instead of coding numerous new Element blocks, Expand Abbreviation generates elements for you based on a string syntax.

Sample Usage

window.addEvent('domready', function() {
	// Generating Header
	document.body.expanAbbr( 'div#header>div#logo^text=Containing Logo+div#navigation+div#subnavigation' );

	// the Navigation with some li's and a's
	$('navigation').expanAbbr( 'ul>li*3>a^href=http://www.google.com,text=GOOGLE,target=_blank,title=a navigation link' );

	// the Navigation with some li's and a's
	$('subnavigation').expanAbbr( 'ul>li*5>a^href=http://www.nyt.com,text=NYT,title=a link' );

	// Generating Main Content Body with left and right column
	document.body.expanAbbr( 'div#main>div#content' );
	$('content').expanAbbr( 'div.box*24>h3^text=a little box+p^text=with some content' );
	$('content').expanAbbr( 'br^style=clear:both' );

	// Generating Footer and Sitemap Body
	document.body.expanAbbr( 'div#bottom>div#sitemap^text=The Sitemap+div#footer^text=The Footer' );
});

There's a lot there so lets take one and talk through what it does.

$('navigation').expanAbbr( 'ul>li*3>a^href=http://www.google.com,text=GOOGLE,target=_blank,title=a navigation link' );

The above code:

  • Creates a UL element within the "navigation" element.
  • Creates 3 list items within the UL
  • Creates an A element within each link with assigned text and HREF and TARGET attributes.

Once the elements are in place, you can modify them as you could any other element. While this plugin likely wont be used by the majority of MooTools developers, it's a great option for those who want create elements quickly and with minimal code.

Track.js Error Reporting

Upcoming Events

Recent Features

  • Responsive Images: The Ultimate Guide

    Chances are that any Web designers using our Ghostlab browser testing app, which allows seamless testing across all devices simultaneously, will have worked with responsive design in some shape or form. And as today’s websites and devices become ever more varied, a plethora of responsive images...

  • Chris Coyier’s Favorite CodePen Demos

    David asked me if I'd be up for a guest post picking out some of my favorite Pens from CodePen. A daunting task! There are so many! I managed to pick a few though that have blown me away over the past few months. If you...

Incredible Demos

  • Degradable SELECT onChange

    Whenever I go to Google Analytics I notice a slight flicker in the dropdown list area. I see a button appear for the shortest amount of time and the poof! Gone. What that tells me is that Google is making their site function...

  • Fx.Rotate:  Animated Element Rotation with MooTools

    I was recently perusing the MooTools Forge and I saw a neat little plugin that allows for static element rotation: Fx.Rotate. Fx.Rotate is an extension of MooTools' native Fx class and rotates the element via CSS within each A-grade browser it...

Discussion

  1. BOO! Smells too much like jQuery! :P

  2. Arian

    Something like this will be in MooTools 2.0 too isn’t it ? within the new Slick selector engine..

  3. @arian – I sincerely hope not! If it does rear its ugly head then I hope someone lasso’s it and pulls it into more (where it will become a dedicated ‘DO NOT CHECK THIS’ checkbox in my browser) :)

  4. It does look kind of scary, but at the same time, so does nine levels deep of new Element for divs, ul and lis. This can be pretty handy though, if you need to make tons of elements dynamically but don’t want complex nesting.

  5. @ryan – indeed, but if you’re of the progressive enhancement persuasion then you wouldn’t be generating nine levels on elements in the first place…

  6. Arian

    I think it’s true what i said, but in a quite other form:
    http://github.com/mootools/mootools-core/blob/2.0wip/Source/Element/Element.js#L19

    in Moo 2.0 you can do

    new Element('div.class'); which creates a new div with "class" as class, or something like this:
    new Element('div#myId[attr=value]'); 
    

    this would be the same as

    new Element('div',{
       'id': 'myId',
       'attr': 'value'
    });
    
  7. @arian – Nice find :) Still don’t like it though :/

  8. Alex

    David, who created your logo? I’ve been always wondered…

  9. Indeed arian, good find.

    I don’t like the code… it leave me naked with little control. The naked part isn’t that bad, but I need control over my code. :P

  10. echoeing the others comments…

  11. Was a great read, have to agree with some of the other comments though

  12. ME

    I’m curious about this line here:
    ‘ul>li*3>a^href=http://www.google.com,text=GOOGLE,target=_blank,title=a navigation link’

    Now you have 3 identical list items which all share the same attributes… how do you select each on individually and change them? Why would you do this?

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!

Recently on David Walsh Blog

  • OâReilly Velocity Conference â Amsterdam

    My favorite front-end conference has always been O'Reilly's Velocity Conference because the conference series has focused on one of the most undervalued parts of client side coding:  speed.  So often we're so excited that our JavaScript works that we forget that speed, efficiency, and performance are just as important. The next Velocity...

  • CanIUse Command Line

    Every front-end developer should be well acquainted with CanIUse, the website that lets you view browser support for browser features.  When people criticize my blog posts for not detailing browser support for features within the post, I tell them to check CanIUse:  always up to date, unlike...

  • Generating Alternative Stylesheets for Browsers Without @media

    If your CSS code is built with a mobile-first approach, it probably contains all the rules that make up the "desktop" view inside @media statements. That's great, but browsers that don't support media queries (IE 8 and below) will simply ignore them, ending up getting the...

  • Serve a Directory with PHP

    Many developers have a giggle at PHP, even looking down at the language, but let's be honest:  most of our blogs are powered by it (WordPress) and it's a great language to dabble around with.  I cut my teeth on PHP, though I prefer to avoid PHP these days. But...

  • Tips you can Use to Build an Excellent eCommerce Experience

    There are many reasons to build a good eCommerce experience if you are planning to build an eCommerce website. Visitors can place items in their cart and leave your site without making a purchase. In fact, three out of every four of them will do so....