Skip to the content...

Welcome to the David Walsh Blog. I'm a MooTools, Dojo, jQuery, CSS, and PHP Web Developer located in Madison, Wisconsin, United States. Please contact me if I can make your experience on my website better.

MooTools Quick Coding: Expand Abbreviation

19 Responses »

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.

Discussion

  1. January 4, 2010 @ 11:02 am

    BOO! Smells too much like jQuery! :P

  2. arian
    January 4, 2010 @ 2:01 pm

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

  3. January 4, 2010 @ 2:18 pm

    @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. January 4, 2010 @ 2:41 pm

    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. January 4, 2010 @ 2:45 pm

    @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
    January 4, 2010 @ 4:14 pm

    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. January 4, 2010 @ 4:59 pm

    @arian – Nice find :) Still don’t like it though :/

  8. alex
    January 5, 2010 @ 8:21 am

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

  9. January 6, 2010 @ 4:28 am

    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. January 6, 2010 @ 10:59 pm

    echoeing the others comments…

  11. January 22, 2010 @ 7:23 am

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

Be Heard!

Share your thoughts with fellow developers of all skill levels! I want to hear from you!

Name*:
Email*:
Website:  
Wrap your code with <code> tags, f00!