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

  • Facebook Open Graph META Tags

    It's no secret that Facebook has become a major traffic driver for all types of websites.  Nowadays even large corporations steer consumers toward their Facebook pages instead of the corporate websites directly.  And of course there are Facebook "Like" and "Recommend" widgets on every website.  One...

  • Detect DOM Node Insertions with JavaScript and CSS Animations

    I work with an awesome cast of developers at Mozilla, and one of them in Daniel Buchner. Daniel's shared with me an awesome strategy for detecting when nodes have been injected into a parent node without using the deprecated DOM Events API....

Incredible Demos

  • MooTools Image Preloading with Progress Bar

    The idea of image preloading has been around since the dawn of the internet. When we didn't have all the fancy stuff we use now, we were forced to use ugly mouseover images to show dynamism. I don't think you were declared an official...

  • Build a Calendar Using PHP, XHTML, and CSS

    One of the website features my customers love to provider their web users is an online dynamic calendar. An online calendar can be used for events, upcoming product specials, memos, and anything else you can think of. I've taken some time to completely...

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

  • Best Tools and Resources for Web Professionals in 2015

    Looking for the right resources to help you satisfy the needs of your clients? On the lookout for the best tools to help you increase your revenue? Searching for the right software to help you improve your business? Well, then you’ve come to the right place....

  • JavaScript Polling

    Polling with JavaScript is one of those ugly but important functions within advanced front-end user experience and testing practices.  Sometimes there isn't the event you can hook into to signify that a given task is complete, so you need to get your hands dirty and simply poll for...

  • OSCON Portland:  Conference Giveaway and Discount!

    O'Reilly puts on the best web industry conferences in the world.  These conferences include Fluent Conference, Velocity Conference, and the upcoming OSCON in Portland, Oregon from July 20-24.  Open Source Convention (OSCON) is a conference that focuses specifically on open source developers and the tools and possibilities...

  • Prevent Chrome from Translating a Page

    A while back I shared my favorite Google Chrome extension:  Google Art Project.  I've enjoyed seeing beautiful art when I open a new tab -- it's brought genuine happiness to my day, however small that happiness may be.  About a week ago, however, the art presented had...

  • Create Any Type Of Website With These Multi-Purpose Themes

    We have selected what we believe are the very best multipurpose WordPress themes on the market today. Our list contains a number of best sellers, several newcomers that are proving to be highly popular, and a few themes that are ideal for creating the types of...