ES6 modules and EmberJS – A taste of the future – Ember and modules



ES6 modules and EmberJS – A taste of the future – Ember and modules

0 0


eak-talk


On Github thaume / eak-talk

ES6 modules and EmberJS

A taste of the future

By Tom Coquereau / @thaume

Ember and modules

No module system

Everything is stuffed in a global App

AngularJS modules

angular.module('myModule.service', []);
angular.module('myModule.directive', []);
angular.module('myModule.filter', []);

angular.module('myModule', ['myModule.service', 'myModule.directive', 'myModule.filter']).
  run(function(greeter, user) {
    greeter.localize({
      salutation: 'Bonjour'
    });
    user.load('World');
  });

Backbone Marionette modules

MyApp = new Marionette.Application();

MyApp.module("MyModule", function(MyModule, MyApp, Backbone, Marionette, $, _){

  // do stuff here ...

});

AMD modules

define([
  "jQuery",
  "React"
], function(jQuery, React){

  // do stuff here ...

});

AMD modules ?

Tom Dale: AMD is not the answer

Ember is not going to implement AMD modules

November 2013 TC39 meeting : ES6 modules spec done

Ember is definitely moving toward ES6 modules support

Ember core

Being modularized : Github repo

ES6 transpiler

ES6 modules are not supported in any browser yet

Transpile into AMD, CommonJS or global (modules can work both in NodeJS and in the browser)

Github repo

Ember App Kit

Strong structure to start en Ember application

Custom resolver

Based on ES6 modules

Github repo

Ember App Kit

Project structure

#-- app
  #-- adapters
    application.js
  #-- components
    pretty-color.js
  #-- controllers
    mail.js
  #-- helpers
    reverse-word.js
  #-- models
    mailbox.js
    message.js
  #-- routes
    mail.js
  #-- templates
    #-- mailbox
      index.hbs
    application.hbs
    index.hbs
    mail.hbs
    mailbox.hbs
  #-- views
    mail.js
  app.js
  index.html
  router.js

Naming conventions

Only the file's name matters

EAK and ES6 modules will resolve dependencies based on files paths(that's what NodeJS does too)

App.MailRoute would have know to render App.MailView, EAK has the same abilities with modules

#-- app
  #-- controllers
    mail.js
  #-- models
    mailbox.js
    message.js
  #-- routes
    mail.js // will know it has to use views/mail and controllers/mail
  #-- templates
    #-- mailbox
      index.hbs
    application.hbs
    index.hbs
    mail.hbs
    mailbox.hbs
  #-- views
    mail.js

Resolver

// Old way, stuffing everything in a global
// ----------
App.MailRoute = Ember.route.extend({
  model: function(params) {
    return this.store.find('mailbox', params.id);
  }
});

// New way, export an ES6 module from routes/mail.js
// ----------
export default Ember.route.extend({
  model: function(params) {
    return this.store.find('mailbox', params.id);
  }
});

// can also be written
var MailRoute = Ember.route.extend({
  model: function(params) {
    return this.store.find('mailbox', params.id);
  }
});
export default MailRoute;

Fantastic Ordered List

One is smaller than... Two is smaller than... Three!

Markdown support

For those of you who like that sort of thing. Instructions and a bit more info available here.

<section data-markdown>
  ## Markdown support

  For those of you who like that sort of thing.
  Instructions and a bit more info available [here](https://github.com/hakimel/reveal.js#markdown).
</section>

Transition Styles

You can select from different transitions, like: Cube - Page - Concave - Zoom - Linear - Fade - None - Default

Themes

Reveal.js comes with a few themes built in: Default - Sky - Beige - Simple - Serif - Night Moon - Solarized

* Theme demos are loaded after the presentation which leads to flicker. In production you should load your theme in the <head> using a <link>.

Global State

Set data-state="something" on a slide and "something" will be added as a class to the document element when the slide is open. This lets you apply broader style changes, like switching the background.

Custom Events

Additionally custom events can be triggered on a per slide basis by binding to the data-state name.

Reveal.addEventListener( 'customevent', function() {
	console.log( '"customevent" has fired' );
} );

Slide Backgrounds

Set data-background="#007777" on a slide to change the full page background to the given color. All CSS color formats are supported.

Image Backgrounds

<section data-background="image.png">

Repeated Image Backgrounds

<section data-background="image.png" data-background-repeat="repeat" data-background-size="100px">

Background Transitions

Pass reveal.js the backgroundTransition: 'slide' config argument to make backgrounds slide rather than fade.

Background Transition Override

You can override background transitions per slide by using data-background-transition="slide".

Clever Quotes

These guys come in two forms, inline: “The nice thing about standards is that there are so many to choose from” and block:

“For years there has been a theory that millions of monkeys typing at random on millions of typewriters would reproduce the entire works of Shakespeare. The Internet has proven this theory to be untrue.”

Pretty Code

function linkify( selector ) {
  if( supports3DTransforms ) {

    var nodes = document.querySelectorAll( selector );

    for( var i = 0, len = nodes.length; i < len; i++ ) {
      var node = nodes[i];

      if( !node.className ) {
        node.className += ' roll';
      }
    }
  }
}

Courtesy of highlight.js.

Intergalactic Interconnections

You can link between slides internally, like this.

Fragmented Views

Hit the next arrow...

... to step through ...

any type of view fragments This slide has fragments which are also stepped through in the notes window.

Fragment Styles

There's a few styles of fragments, like:

grow

shrink

roll-in

fade-out

highlight-red

highlight-green

highlight-blue

current-visible

highlight-current-blue

Spectacular image!

Export to PDF

Presentations can be exported to PDF, below is an example that's been uploaded to SlideShare.

Take a Moment

Press b or period on your keyboard to enter the 'paused' mode. This mode is helpful when you want to take distracting slides off the screen during a presentation.

Stellar Links

THE END

BY Hakim El Hattab / hakim.se