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

Recent Features

  • 5 HTML5 APIs You Didn’t Know Existed

    When you say or read "HTML5", you half expect exotic dancers and unicorns to walk into the room to the tune of "I'm Sexy and I Know It."  Can you blame us though?  We watched the fundamental APIs stagnate for so long that a basic feature...

  • An Interview with Eric Meyer

    Your early CSS books were instrumental in pushing my love for front end technologies. What was it about CSS that you fell in love with and drove you to write about it? At first blush, it was the simplicity of it as compared to the table-and-spacer...

Incredible Demos

  • Adding Events to Adding Events in MooTools

    Note: This post has been updated. One of my huge web peeves is when an element has click events attached to it but the element doesn't sport the "pointer" cursor. I mean how the hell is the user supposed to know they can/should click on...

  • MooTools Kwicks Plugin

    I wrote a post titled Get Slick with MooTools Kwicks ages ago. The post was quite popular and the effect has been used often. Looking back now, the original code doesn't look as clean as it could. I've revised the original...

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

  • Developers Have WordPress, Amateurs Have Squarespace, Professional Designers Have the NEW Webydo!

    Web design platforms have traditionally come in one of two varieties. There are the solutions like WordPress and Drupal that are incredibly powerful, but an understanding of web development and coding is required to be able to use those platforms effectively. On the other side of the...

  • Chris Coyierâs Favorite CodePen Demos II

    Hey everyone! Before we get started, I just want to say it’s damn hard to pick this few favorites on CodePen. Not because, as a co-founder of CodePen, I feel like a dad picking which kid he likes best (RUDE). But because there is just so...

  • GSAP + SVG For Power Users: Motion Along A Path

    Now that the GreenSock API is picking up steam, there are many tutorials and Getting Started guides out there to provide good introductions to the library, not to mention GreenSock’s own Forum and Documentation. This article isn’t intended for beginners, but rather a...

  • Copy a Directory from Command Line

    Copying a directory for the sake of backup is something I do often, especially when I'm trying to figure out why something isn't working when I use an external library.  I'll copy the directory structure as a backup, mess around with the original source until I find a solution,...

  • Hotjar &#8211; All-in-one Analytics and Feedback

    Website analytics are a massive business -- the more data you can collect with regard to your users' behaviors on your site, the more you can increase and maximise conversion...and increased conversion is always good.  Sometimes increase conversion means more money, improved user experience, viewer retention,...