Jsconf.us.2013

56
#dadt Dojo Already Did That @phiggins / JSconf.us 2013 Wednesday, May 29, 13

description

 

Transcript of Jsconf.us.2013

Page 1: Jsconf.us.2013

#dadtDojo Already Did That@phiggins / JSconf.us 2013

Wednesday, May 29, 13

Page 2: Jsconf.us.2013

Me!* JSconf alumni* Former Dojo Project Lead* generic code monkey

Wednesday, May 29, 13

Page 3: Jsconf.us.2013

PROFESSIONAL CAT HERDER(TRUE OF ANY OSS LEAD)

Wednesday, May 29, 13

Page 4: Jsconf.us.2013

PRINCESS FLUFFYBUTT(I’VE BEEN PREOCCUPIED)

Wednesday, May 29, 13

Page 5: Jsconf.us.2013

Welcome to JSCONF ...

Wednesday, May 29, 13

Page 6: Jsconf.us.2013

JSCONF* Enjoy your lunch transition* Digest, contemplate.* Innovate.

Wednesday, May 29, 13

Page 7: Jsconf.us.2013

History of the WorldPart III

Wednesday, May 29, 13

Page 8: Jsconf.us.2013

CELEBRATING 20 YEARS OF INTERWEBSTUBES?

Wednesday, May 29, 13

Page 9: Jsconf.us.2013

1993-1998: The dark ages

Wednesday, May 29, 13

Page 10: Jsconf.us.2013

`93-`98* best when viewed in ...* still BBSing

Wednesday, May 29, 13

Page 11: Jsconf.us.2013

1999-2000: y2kmang

Wednesday, May 29, 13

Page 12: Jsconf.us.2013

`99-`NaN* Ajax* IE 5(ish)* Netscape 5(ish)* Opera 4(ish)* lynx* Konqueror

Wednesday, May 29, 13

Page 13: Jsconf.us.2013

2001-2005: A renaissance of sorts.

Wednesday, May 29, 13

Page 14: Jsconf.us.2013

`01-`05* Flash. * Everywhere.* Lots of learning, hacking.* Beginnings of js libs

Wednesday, May 29, 13

Page 15: Jsconf.us.2013

2006-2009: Sweet spot.

Wednesday, May 29, 13

Page 16: Jsconf.us.2013

`06-`09* Lots of fighting.* ... we’ll double back.* Dojo doing things

Wednesday, May 29, 13

Page 17: Jsconf.us.2013

2010-Date.now() The modern era.

Wednesday, May 29, 13

Page 18: Jsconf.us.2013

`11+

HTTPS://SPEAKERDECK.COM/ANGUSCROLL/THE-POLITICS-OF-JAVASCRIPTWednesday, May 29, 13

Page 19: Jsconf.us.2013

`11+

HTTPS://SPEAKERDECK.COM/ANGUSCROLL/THE-POLITICS-OF-JAVASCRIPTWednesday, May 29, 13

Page 20: Jsconf.us.2013

And Dojo Did?It.

Wednesday, May 29, 13

Page 21: Jsconf.us.2013

<div dojoType="foo.bar.baz"></div>

Wednesday, May 29, 13

Page 22: Jsconf.us.2013

<div dojoType="foo.bar.baz"></div> var cls = getObject(node.getAttribute("dojoType"));new cls({ props }, node);

Wednesday, May 29, 13

Page 23: Jsconf.us.2013

<!-- div dojoType="foo.bar.baz"></div--><div data-dojo-type="foo.bar.baz"></div>

var cls = getObject(node.getAttribute("data-dojo-type"));new cls({ props }, node);

Wednesday, May 29, 13

Page 24: Jsconf.us.2013

<!-- div dojoType="foo.bar.baz"></div--><div data-dojo-type="foo.bar.baz"></div>

var cls = getObject(node.getAttribute("data-dojo-type"));new cls({ props }, node);

// WAT? no dataset?

Wednesday, May 29, 13

Page 25: Jsconf.us.2013

var hasDataset = (function(){ var n = document.createElement("div"); n.setAttribute("data-a-b", "c"); return !!(n.dataset && n.dataset.aB == "c");})();

Wednesday, May 29, 13

Page 26: Jsconf.us.2013

var getdata, setdata;if(hasDataset){ getdata = function(n, prop){ return n.dataset[prop]; }; setdata = function(n, prop, data){ n.dataset[prop] = data; };}else{ function _hypen(m){ return "-" + m.toLowerCase(); } function toDataHyphen(str){ return "data-" + str.replace(/[A-Z]/g, _hypen); }

getdata = function(n, prop){ return n.getAttribute(toDataHyphen(prop)); };

setdata = function(n, prop, data){ n.setAttribute(toDataHyphen(prop), data); };}

var cls = getObject(getdata(node, "dojoType"));new cls({ props }, node);

Wednesday, May 29, 13

Page 27: Jsconf.us.2013

<div dojoType="foo.bar.baz"></div><div data-dojo-type="foo.bar.baz"></div>

// Backboneishnew MyView({ $el: $(node)})

// bootstrappy<button data-reset-text="ha" data-foo-text="bar!" >ha</button>

$("button").button("foo");

Wednesday, May 29, 13

Page 28: Jsconf.us.2013

Module Loading\o/

Wednesday, May 29, 13

Page 29: Jsconf.us.2013

Wednesday, May 29, 13

Page 30: Jsconf.us.2013

// fetch foo/bar/__package__.jsdojo.require("foo.bar.*");dojo.addOnLoad(function(){ console.warn(foo.bar.baz)});

Wednesday, May 29, 13

Page 31: Jsconf.us.2013

// fetch foo/bar/baz.jsdojo.require("foo.bar.baz");dojo.addOnLoad(function(){ console.warn(foo.bar.baz)});

Wednesday, May 29, 13

Page 32: Jsconf.us.2013

// fetch foo/bar/baz.jsdojo.require("foo.bar.baz");

SYNCHRONOUS XHR + EVAL

dojo.provide("foo.bar.baz");dojo.require("foo.bar.baz.bam");foo.bar.baz = { bam: true };

REPEAT.

Wednesday, May 29, 13

Page 33: Jsconf.us.2013

SYNCHRONOUS XHR + EVAL

* ORIGIN LIMITATIONS

* **

** EVIL (?)

Wednesday, May 29, 13

Page 34: Jsconf.us.2013

James burkeDojo / AMD / requirejs / et al

Wednesday, May 29, 13

Page 35: Jsconf.us.2013

dojo._xdResourceLoaded(function(){ return { depends:[ ["provide","dojo.foo"], ], defineResource: function(dojo, dijit, dojox){ if(!dojo._hasResource["dojo.foo"]){ dojo._hasResource["dojo.foo"] = true; /* original code */ } } };});

Wednesday, May 29, 13

Page 36: Jsconf.us.2013

AMD* asynchronous* anonymous* x-domain

Wednesday, May 29, 13

Page 37: Jsconf.us.2013

define(["foo/bar/baz"], function(foobarbaz){ return { bam: true };});

Wednesday, May 29, 13

Page 38: Jsconf.us.2013

node.js / ecma* Still being argued* UMD a mess

Wednesday, May 29, 13

Page 39: Jsconf.us.2013

BACKEND JAVASCRIPTNODE, ET AL

Wednesday, May 29, 13

Page 40: Jsconf.us.2013

Dojo Did* Rhino / multi-env support* Dojo Build tools* dojox.dtl

Wednesday, May 29, 13

Page 41: Jsconf.us.2013

Dojo Did* Rhino / multi-env support* Dojo Build tools* dojox.dtl

ADDED NODE.JSUSING NODE.JSABANDONED :(

Wednesday, May 29, 13

Page 42: Jsconf.us.2013

No end to Node potential.

Wednesday, May 29, 13

Page 43: Jsconf.us.2013

UI LIBRARIESAND “PLUGINS”

Wednesday, May 29, 13

Page 44: Jsconf.us.2013

Dijit... could do a whole talk here

Wednesday, May 29, 13

Page 45: Jsconf.us.2013

Dijit* instance based control* externalized resources* a11y* l10n / i18n

Wednesday, May 29, 13

Page 46: Jsconf.us.2013

Dijit* Backwards compatible* Unified “everything”

Wednesday, May 29, 13

Page 47: Jsconf.us.2013

Dijit could:* better event registration* alternate templating

Wednesday, May 29, 13

Page 48: Jsconf.us.2013

CORE JS... IT’S JUST JAVASCRIPT

Wednesday, May 29, 13

Page 49: Jsconf.us.2013

Underscore* lots of handy stuff.

Wednesday, May 29, 13

Page 50: Jsconf.us.2013

Underscore“The tie to go with jQuery’s tux”

Wednesday, May 29, 13

Page 51: Jsconf.us.2013

UnderscoreShouldn’t have to fix * map() * or bind() * or `this`

Wednesday, May 29, 13

Page 52: Jsconf.us.2013

Underscoreis not amd/umd ready ...*

* LODASH

Wednesday, May 29, 13

Page 53: Jsconf.us.2013

Lots of stuffis not amd/umd ready ...

Wednesday, May 29, 13

Page 54: Jsconf.us.2013

It’s Just JS* Don’t be limited by “best practice”* Understand the language* Enjoy the nuance

Wednesday, May 29, 13

Page 55: Jsconf.us.2013

Questions?

Wednesday, May 29, 13

Page 56: Jsconf.us.2013

PROJECT

DATE CLIENT29/5/2013 @PHIGGINS

FIN.GRACIAS.

Wednesday, May 29, 13