Modules > Frameworks

John Hann @unscriptable

UI Architect, lifeIMAGE, Inc.

Brian Cavalier @briancavalier

Web Architect, Hovercraft Studios


Libraries FRameworks WTF?

What is a Module?

Strict definition from Wikipedia


What is a (Web) Framework?


What is a (Web) Library?


Micro-library? Micro-framework?


What's wrong with frameworks/libraries?

Not interchangeable


Coding Dysentery


Coding Dysentery

function onclick (e) {  
    var node, pirateButtons;
    dojo.stopEvent(e);
    node = e.target;
    pirateButtons = dojo.query('.pirate-button', rootNode);
    dojo.forEach(pirateButtons, function (button) {
        button.disabled = true;
    });
}

dojo.connect(rootNode, 'click', onclick);

Coding Utopia


Coding Utopia

function onclick (e) {  
    var node, pirateButtons;
    e.preventDefault();
    node = e.target;
    pirateButtons = doc.querySelectorAll('.pirate-button', rootNode);
    pirateButtons.forEach(function (button) {
        button.disabled = true;
    });
}

rootNode.addEventListener('click', onclick, false);

Coding Utopia

Close enough? (abstracted "standard")

function onclick (e) {  
    var node, pirateButtons;
    e.preventDefault();
    node = e.target;
    pirateButtons = querySelectorAll('.pirate-button', rootNode);
    array.forEach(pirateButtons, function (button) {
        button.disabled = true;
    });
}

event.addEventListener(rootNode, 'click', onclick, false);

Can Haz Utopia?

How would this work?

Standard APIs

No Globals


Utopia > Dysentery

Standard Modules are my Utopia


Dysentery Alert!!!

What's still wrong with this code?

function onclick (e) {  
    var node, pirateButtons;
    e.preventDefault();
    node = e.target;
    pirateButtons = querySelectorAll('.pirate-button', rootNode);
    array.forEach(pirateButtons, function (button) {
        button.disabled = true;
    });
}

event.addEventListener(rootNode, 'click', onclick, false);

Dysentery Alert!!!

What's still wrong with this code?

"The W3C DOM methods SUCK!"


Dysentery Alert!!!

Can haz Modules? No.


Javascript has no standard APIs

:'(


Javascript has standards!

YES IT DOES!


Javascript / JSON Standards


Web Standards


CommonJS Proposed Standards


Asynchronous Module Definition (AMD)

Modules for Browsers

OMGPUPPIES!

http://bit.ly/UsingAMD


Asynchronous Module Definition (AMD)

ES.Next Modules Tue @ 10:00 by Dave Herman


Using Standards


Standards Don't Cover Everything


End Run Around Missing Standards

IOC / DI demo by Brian Cavalier Today @ 2:20


Modules Today

Can haz modules? Yes!


Modules Today

AMD module format

define(
[
    'when',
    'querySelectorAll',
    'array',
    'event',
    'text!./CodezView.html',
    'cssx/css!./CodezView.css'
],
function(when, querySelectorAll, array, event, template) {
    // codez here pleaze!
});

Modules Today

AMD Loaders


Modules Today

AMD Momentum


Modules Today

AMD Momentum

Dozens of plugins already built

- "common" plugins: text!, i18n!, css!, js!/order!
- DOM-ready [curl/domReady](http://unscriptable.com/curl/curl/domReady.js)
- CSS Shims [cssx!](https://github.com/unscriptable/cssx)
- CoffeeScript [coffee!](https://gist.github.com/865150)
- [Google Maps, other libs](https://gist.github.com/882682)

Modules Today

Example AMD Modules on Github


Modules Today

Module Helpers on Github


Almost Utopia

YUI

Dojo 1.6 / 1.7

(still requires commitment)


Module Recipe

I want to write a module!


Questions?


Demo