SlideShare ist ein Scribd-Unternehmen logo
1 von 60
Downloaden Sie, um offline zu lesen
#yuiconf
#modown
@caridy
http://www.flickr.com/photos/diverkeith/379540273/
the web platform
“modown”
motivations
web applications becoming
single-page applications
YAF success
mojito constraints
modown components

mojito-next
(yui, search)

hermes
(flickr)

assembler
(touchdown)
Rendr
AngularJS

Backbone

EmberJS

Meteor
DerbyJS

YAF

React

Mojito
single-page applications
users can switch between
different states in no time
... and doing so without breaking
any of the core features of the web
(history, url, openness, seo)
back to our roots
building blocks rather
than prescriptions
libraries over frameworks
development on the open
goals
building blocks for
SPA written in nodejs
extending express
rendering initial state on the server,
then let the browser takes over
today
13 modules in NPM
modown components
expressview expressyui
expressannotation

expressmap

express expresscombo

expressstate

expressslash

locatoryui

locatormicro

Locator
locatordust

https://npmjs.org/search?q=modown

locatorlang

locatorhandlebars
2 major customers in production
(flickr and media)
all major changes in YAF
are already in place

https://github.com/yui/yui3/blob/master/src/app/HISTORY.md
no docs, only component level
docs and examples in github
examples
express-yui
for yui core modules
var express = require('express'),
app

= express();

 

app.get('/', function (req, res, next) {
// `res.locals` holds all data
// available on the template
});
app.listen(3000);
var express = require('express'),
expyui = require('express-yui'),
app
= express();
 
expyui.extend(app);

app.get('/', function (req, res, next) {
// `res.locals` holds all data
// available on the template
});
app.listen(3000);
var express = require('express'),
expyui = require('express-yui'),
app
= express();
 
expyui.extend(app);

app.use(expyui.expose());

app.get('/', function (req, res, next) {
// `res.locals.state.toString()` will be
// available on the template as a javascript blob
});
app.listen(3000);
var express = require('express'),
expyui = require('express-yui'),
app
= express();
 
expyui.extend(app);
app.yui.setCoreFromAppOrigin();

app.use(expyui.expose());

app.get('/', function (req, res, next) {
// `res.locals.state.toString()` will be
// available on the template as a javascript blob
});
app.listen(3000);
var express = require('express'),
expyui = require('express-yui'),
app
= express();
 
expyui.extend(app);
app.yui.setCoreFromAppOrigin();

app.use(expyui.expose());

app.yui.applyConfig({ fetchCSS: false });

app.get('/', function (req, res, next) {
// `res.locals.state.toString()` will be
// available on the template as a javascript blob
});
app.listen(3000);
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>usage of `express-yui`</title>
<script>{{{state}}}</script>
// if using handlebars, or
<script><%== state %></script> // if using micro, or
<script>{state|s}</script>
// if using dust

</head>
<body>
<p>non-blocking way to inject yui seed files</p>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>usage of `express-yui`</title>
<script>{{{state}}}</script>
<script>
app.yui.ready(function (err) {
// `YUI().use()` and `app.yui.use()` are available
});
</script>
</head>
<body>
<p>non-blocking way to inject yui seed files</p>
</body>
</html>
express-yui
for custom yui modules
var express = require('express'),
expyui = require('express-yui'),
app
= express();
 
expyui.extend(app);
app.use(expyui.expose());

app.get('/item/:id', function (req, res, next) {

});

app.listen(3000);
var express = require('express'),
expyui = require('express-yui'),
app
= express();
 
expyui.extend(app);
app.use(expyui.expose());

app.get('/item/:id', function (req, res, next) {

});
app.yui.ready(function (err) {
app.listen(3000);
});
var express = require('express'),
expyui = require('express-yui'),
app
= express();
 
expyui.extend(app);
app.use(expyui.expose());

app.get('/item/:id', function (req, res, next) {
app.yui.use('model-foo', function (Y) {
var model = new Y.ModelFoo();

});
});
app.yui.ready(function (err) {
app.listen(3000);
});
var express = require('express'),
expyui = require('express-yui'),
app
= express();
 
expyui.extend(app);
app.use(expyui.expose());

app.get('/item/:id', function (req, res, next) {
app.yui.use('model-foo', function (Y) {
var model = new Y.ModelFoo();
model.load(req.params.id, function (err) {
res.render('view-name', model.toJSON());
});
});
});
app.yui.ready(function (err) {
app.listen(3000);
});
var express = require('express'),
expyui = require('express-yui'),
app
= express();
 
expyui.extend(app);
app.use(expyui.expose());

app.get('/item/:id', function (req, res, next) {
app.yui.use('model-foo', function (Y) {
var model = new Y.ModelFoo();
model.load(req.params.id, function (err) {
res.expose(model,'fooData'); //window.app.fooData
res.render('view-name', model.toJSON());
});
});
});
app.yui.ready(function (err) {
app.listen(3000);
});
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>usage of `express-yui` and `locator-yui`</title>
<script>{{{state}}}</script>
<script>
app.yui.ready(function (err) {
app.yui.use('model-foo', function (Y) {
});
});
</script>
</head>
<body>
<p>non-blocking way to inject yui seed files</p>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>usage of `express-yui` and `locator-yui`</title>
<script>{{{state}}}</script>
<script>
app.yui.ready(function (err) {
app.yui.use('model-foo', function (Y) {
var model = new Y.ModelFoo(app.fooData);
});
});
</script>
</head>
<body>
<p>non-blocking way to inject yui seed files</p>
</body>
</html>
filesystem abstraction
with locator
locator gives semantic meaning
to files on the filesystem
filesystem analysis to understand
the capabilities of the app
on the making...
Intl
composition
ES6 modules
UI data bindings
modownization of YUI
some final notes
modown is not a framework
modown is not a product
modown is just a principle
Thanks
@caridy

Weitere ähnliche Inhalte

Ähnlich wie YUIConf2013: Introducing The "Modown" Project

CodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложения
CodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложенияCodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложения
CodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложения
CodeFest
 
HTML5 Who what where when why how
HTML5 Who what where when why howHTML5 Who what where when why how
HTML5 Who what where when why how
brucelawson
 
BlackBerry DevCon 2011 - PhoneGap and WebWorks
BlackBerry DevCon 2011 - PhoneGap and WebWorksBlackBerry DevCon 2011 - PhoneGap and WebWorks
BlackBerry DevCon 2011 - PhoneGap and WebWorks
mwbrooks
 
Java Technology
Java TechnologyJava Technology
Java Technology
ifnu bima
 
Build Your Own CMS with Apache Sling
Build Your Own CMS with Apache SlingBuild Your Own CMS with Apache Sling
Build Your Own CMS with Apache Sling
Bob Paulin
 

Ähnlich wie YUIConf2013: Introducing The "Modown" Project (20)

Taking your Web App for a walk
Taking your Web App for a walkTaking your Web App for a walk
Taking your Web App for a walk
 
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl...Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl...
 
Arquitetura de Front-end em Aplicações de Larga Escala
Arquitetura de Front-end em Aplicações de Larga EscalaArquitetura de Front-end em Aplicações de Larga Escala
Arquitetura de Front-end em Aplicações de Larga Escala
 
CodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложения
CodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложенияCodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложения
CodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложения
 
Microservices for the Masses with Spring Boot, JHipster, and OAuth - South We...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - South We...Microservices for the Masses with Spring Boot, JHipster, and OAuth - South We...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - South We...
 
Yui intro
Yui introYui intro
Yui intro
 
Modular Test-driven SPAs with Spring and AngularJS
Modular Test-driven SPAs with Spring and AngularJSModular Test-driven SPAs with Spring and AngularJS
Modular Test-driven SPAs with Spring and AngularJS
 
JavaScript Dependencies, Modules & Browserify
JavaScript Dependencies, Modules & BrowserifyJavaScript Dependencies, Modules & Browserify
JavaScript Dependencies, Modules & Browserify
 
HTML5 Who what where when why how
HTML5 Who what where when why howHTML5 Who what where when why how
HTML5 Who what where when why how
 
Juzu framework
Juzu frameworkJuzu framework
Juzu framework
 
Universal JavaScript Web Applications with React - Luciano Mammino - Codemoti...
Universal JavaScript Web Applications with React - Luciano Mammino - Codemoti...Universal JavaScript Web Applications with React - Luciano Mammino - Codemoti...
Universal JavaScript Web Applications with React - Luciano Mammino - Codemoti...
 
Universal JS Web Applications with React - Luciano Mammino - Codemotion Rome ...
Universal JS Web Applications with React - Luciano Mammino - Codemotion Rome ...Universal JS Web Applications with React - Luciano Mammino - Codemotion Rome ...
Universal JS Web Applications with React - Luciano Mammino - Codemotion Rome ...
 
BlackBerry DevCon 2011 - PhoneGap and WebWorks
BlackBerry DevCon 2011 - PhoneGap and WebWorksBlackBerry DevCon 2011 - PhoneGap and WebWorks
BlackBerry DevCon 2011 - PhoneGap and WebWorks
 
Front End Development for Back End Java Developers - Jfokus 2020
Front End Development for Back End Java Developers - Jfokus 2020Front End Development for Back End Java Developers - Jfokus 2020
Front End Development for Back End Java Developers - Jfokus 2020
 
Angular server side rendering - Strategies & Technics
Angular server side rendering - Strategies & Technics Angular server side rendering - Strategies & Technics
Angular server side rendering - Strategies & Technics
 
React django
React djangoReact django
React django
 
Java Technology
Java TechnologyJava Technology
Java Technology
 
Building Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJSBuilding Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJS
 
Primefaces mobile users_guide_0_9
Primefaces mobile users_guide_0_9Primefaces mobile users_guide_0_9
Primefaces mobile users_guide_0_9
 
Build Your Own CMS with Apache Sling
Build Your Own CMS with Apache SlingBuild Your Own CMS with Apache Sling
Build Your Own CMS with Apache Sling
 

Mehr von Caridy Patino

CSP Level 2: Defensa en profundidad para aplicaciones Web
CSP Level 2: Defensa en profundidad para aplicaciones WebCSP Level 2: Defensa en profundidad para aplicaciones Web
CSP Level 2: Defensa en profundidad para aplicaciones Web
Caridy Patino
 
The challenges of building mobile HTML5 applications - FEEC Brazil 2012 - Recife
The challenges of building mobile HTML5 applications - FEEC Brazil 2012 - RecifeThe challenges of building mobile HTML5 applications - FEEC Brazil 2012 - Recife
The challenges of building mobile HTML5 applications - FEEC Brazil 2012 - Recife
Caridy Patino
 
HTML5 summit - DevCon5 - Miami - Feb 2, 2012
HTML5 summit - DevCon5 - Miami - Feb 2, 2012HTML5 summit - DevCon5 - Miami - Feb 2, 2012
HTML5 summit - DevCon5 - Miami - Feb 2, 2012
Caridy Patino
 
Conquistando el Servidor con Node.JS
Conquistando el Servidor con Node.JSConquistando el Servidor con Node.JS
Conquistando el Servidor con Node.JS
Caridy Patino
 

Mehr von Caridy Patino (12)

MiamiJS - The Future of JavaScript
MiamiJS - The Future of JavaScriptMiamiJS - The Future of JavaScript
MiamiJS - The Future of JavaScript
 
CSP Level 2: Defensa en profundidad para aplicaciones Web
CSP Level 2: Defensa en profundidad para aplicaciones WebCSP Level 2: Defensa en profundidad para aplicaciones Web
CSP Level 2: Defensa en profundidad para aplicaciones Web
 
The rise of single-page applications
The rise of single-page applicationsThe rise of single-page applications
The rise of single-page applications
 
FOWA2013: The rise of single page applications
FOWA2013: The rise of single page applicationsFOWA2013: The rise of single page applications
FOWA2013: The rise of single page applications
 
FEDM Meetup: Introducing Mojito
FEDM Meetup: Introducing MojitoFEDM Meetup: Introducing Mojito
FEDM Meetup: Introducing Mojito
 
The challenges of building mobile HTML5 applications - FEEC Brazil 2012 - Recife
The challenges of building mobile HTML5 applications - FEEC Brazil 2012 - RecifeThe challenges of building mobile HTML5 applications - FEEC Brazil 2012 - Recife
The challenges of building mobile HTML5 applications - FEEC Brazil 2012 - Recife
 
YUIConf2012: Mojito for YUI Developers
YUIConf2012: Mojito for YUI DevelopersYUIConf2012: Mojito for YUI Developers
YUIConf2012: Mojito for YUI Developers
 
BayJax: Expanding Yahoo! Axis across 3 screens
BayJax: Expanding Yahoo! Axis across 3 screensBayJax: Expanding Yahoo! Axis across 3 screens
BayJax: Expanding Yahoo! Axis across 3 screens
 
HTML5 summit - DevCon5 - Miami - Feb 2, 2012
HTML5 summit - DevCon5 - Miami - Feb 2, 2012HTML5 summit - DevCon5 - Miami - Feb 2, 2012
HTML5 summit - DevCon5 - Miami - Feb 2, 2012
 
Conquistando el Servidor con Node.JS
Conquistando el Servidor con Node.JSConquistando el Servidor con Node.JS
Conquistando el Servidor con Node.JS
 
JS Loading strategies
JS Loading strategiesJS Loading strategies
JS Loading strategies
 
YUI 3 Loading Strategies - YUIConf2010
YUI 3 Loading Strategies - YUIConf2010YUI 3 Loading Strategies - YUIConf2010
YUI 3 Loading Strategies - YUIConf2010
 

Kürzlich hochgeladen

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Kürzlich hochgeladen (20)

Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 

YUIConf2013: Introducing The "Modown" Project