Upgrade to Pro — share decks privately, control downloads, hide ads and more …

In search of lost web

In search of lost web

Past, present and future of components
seen through the eyes of Marcel Proust.

Maurizio Mangione

February 24, 2015
Tweet

Other Decks in Technology

Transcript

  1. In search of lost web Past, present and future of

    components seen through the eyes of Marcel Proust.
  2. ❖ Easy to use ❖ Configurable ❖ Composable ❖ Clean

    code ™ ❖ Single responsibility Components keypoints
  3. ❖ Good old HTML element ❖ HTML 5 elements ❖

    Frameworks custom elements ❖ Web components
  4. angular.module('myModule', []) .directive('markdown', function ($window) { var converter = new

    $window.Showdown.converter(); return { restrict: 'A', link: function (scope, element) { element.html(converter.makeHtml(element.text().trim())); }; }; }); <markdown></markdown>
  5. var CommentBox = React.createClass({ render: function() { return ( <div

    className="commentBox"> Hello, world! I am a CommentBox. </div> ); } }); React.render( <CommentBox />, document.getElementById('content') );
  6. var App = Ember.Application.create(); App.GravatarImageComponent = Ember.Component.extend({ gravatarUrl: function() {

    return "http://www.gravatar.com/avatar/" + hex_md5(this.get('email')); }.property('email') }); <script type="text/x-handlebars"> {{gravatar-image email="[email protected]"}} </script> <script type="text/x-handlebars" id="components/gravatar-image"> <img {{bindAttr src=gravatarUrl}}> </script>
  7. var shadow = el.createShadowRoot(); shadow.innerHTML = "<style>h1 { color: pink;

    }</style>" + "<h1>Web components rocks!</h1>"; Shadow DOM
  8. A set of polyfills built on top of the Web

    Components specifications. webcomponents.js
  9. Two-way data binding <polymer-element name="user-group"> <template> This is the {{technology}

    } user group. </template> <script> Polymer('user-group', { ready: function() { this.technology = 'Javascript'; } }); </script> </polymer-element>
  10. Declarative event mapping <polymer-element name="g-cool"> <template> <button on-click="{{buttonClick} }"></button> </template>

    <script> Polymer({ buttonClick: function(event, detail, sender) { ... } }); </script> </polymer-element>
  11. Extending other elements <polymer-element name="my-superlabel" extends="my-label" noscript> <template> <span> <i>★</i><shadow></shadow>

    </span> </template> </polymer-element> <my-superlabel>Hello!</my-superlabel> // "★ Hello!"
  12. Observing properties <polymer-element name="g-cool" attributes="better best"> <script> Polymer({ better: '',

    best: '', betterChanged: function(oldValue, newValue) {...}, bestChanged: function(oldValue, newValue) {...} }); </script> </polymer-element>
  13. A set of visual and non-visual utility elements. Layout, user

    input, selection, and scaffolding apps.
  14. Paper elements collection implements material design for the web. They're

    a set of highly visual, highly interactive elements that include things like controls, layouts, hero transitions, and scrolling effects.
  15. «[...] our true self, which may sometimes have seemed to

    be long dead, but never was entirely, is re-awoken and re-animated when it receives the heavenly food that is brought to it» Marcel Proust, Finding time again