SlideShare une entreprise Scribd logo
1  sur  51
Télécharger pour lire hors ligne
Modular Applications
                       with Montage Components



                          Benoît Marchant



benoit@montagejs.org                             montagejs.org
TEAM CSS
         data-binding
                                                                 property change

       HTML5
                           workflow



template
                              serialization


           reusable                                       simplify                                  listener


                         component
separation of concerns   encapsulated                                                                            event

                                                                                                       MVC
                                          declarative


                                                                                                        framework

    BSD CommonJS
                                    composition
                                                        deferred drawing                textfield loader       substitution


                                                                                           widgets
                                                                                    toggle flow         repetition condition



modules
promises                                                                           radio                                button
                                                                                                                        slider
                                              applications
                                                                                     video
                                                                                                             progress text
                                                                                        checkbox slot



                                                                    mobile
                                                                                                   audio list input


          ECMAScript 5
package                            write once                        cpu gpu battery

                                                cross-platform
Mobile Applications
HTML5 vs Native
HTML5 vs Native

      Janky User Experience
HTML5 vs Native

      Janky User Experience

      Longer Development Time
HTML5 vs Native

      Janky User Experience

      Longer Development Time

      Higher Development Cost
HTML5 vs Native

      Janky User Experience

      Longer Development Time

      Higher Development Cost

      Harder to Iterate
Modular Applications
Simple Application
Large Application
Large Application
Montage Application




Refactor
Montage Application




Refactor
Popcorn Demo

montagejs.org/apps/popcorn/
Component

   Assigned one DOM Element
   MVC Structure
   From Widget to App Specific
   Deferred Drawing
   Template
Deferred Drawing

      Maximize Performance
      Orchestrate DOM Changes
      Third Party Components
      Degrade Gracefully
      willDraw() / draw() / didDraw()
Template

                Full HTML5 document
HTML JS CSS
                Resource Encapsulation

.reel           Object Serialization
                Great JS / CSS Team Work
                Automatic Dependencies Load
Identify Components
Main Component
       Loads data from Web Service
Relies on sub-components for presentation
Navigation




Movie Content
Movie Categories

Main                                         Navigation
               Event to change CategoryId




Selected CategoryId




    Components                              Movie Content
 establish their own
 API to accept data
 through properties
     or methods
Movie Categories

Main
               Event to change CategoryId




Selected CategoryId
Movie Categories

Main
               Event to change CategoryId




Selected CategoryId
Movie Content
Movie Content



           Flow Component




        Movie Detail Component
Movie Content   moviesController



           Flow Component


                        selectedMovie




        Movie Detail Component
Main.reel/Main.html
<html>
...
<body>
    <div data-montage-id="facade-flow" class="facade-flow">
        <div data-montage-id="flow" class="flow flow-fade-out">
            <div data-montage-id="image" class="Image"></div>
        </div>
        <div class="film"></div>
        <div data-montage-id="details"></div>
    </div>
</body>
</html>
Markup
   <div data-montage-id="facade-flow" class="facade-flow">
       <div data-montage-id="flow" class="flow flow-fade-out">
           <div data-montage-id="image" class="Image"></div>
       </div>
       <div class="film"></div>
       <div data-montage-id="details"></div>
   </div>




                  Object Serialization
<script type="text/montage-serialization">
{
    "owner": {
        "properties": {
            "element": {"#": "facade-flow"}
        }
    },

    ...
<div data-montage-id="facade-flow" class="facade-flow">
       <div data-montage-id="flow" class="flow flow-fade-out">
           <div data-montage-id="image" class="Image"></div>
       </div>
       <div class="film"></div>
       <div data-montage-id="details"></div>
   </div>




<script type="text/montage-serialization">
{
    "owner": {
        "properties": {
            "element": {"#": "facade-flow"}
        }
    },

    ...
<div data-montage-id="facade-flow" class="facade-flow">
     <div data-montage-id="flow" class="flow flow-fade-out">
         <div data-montage-id="image" class="Image"></div>
     </div>
     <div class="film"></div>
     <div data-montage-id="details"></div>
 </div>




"flow": {
    "prototype": "montage/ui/flow.reel",      Module Id
    "properties": {
        "element": {"#": "flow"},
        "cameraFov": 36.99,
        "cameraTargetPoint": [0, 0, 0],
        "stride": 1
    },
    "bindings": {
        "contentController": {"<-": "@owner.moviesController"}
    }
},
<div data-montage-id="facade-flow" class="facade-flow">
     <div data-montage-id="flow" class="flow flow-fade-out">
         <div data-montage-id="image" class="Image"></div>
     </div>
     <div class="film"></div>
     <div data-montage-id="details"></div>
 </div>




"flow": {
    "prototype": "montage/ui/flow.reel",
    "properties": {
        "element": {"#": "flow"},
        "cameraFov": 36.99,                       Setting
        "cameraTargetPoint": [0, 0, 0],
        "stride": 1
                                              Property Values
    },
    "bindings": {
        "contentController": {"<-": "@owner.moviesController"}
    }
},
<div data-montage-id="facade-flow" class="facade-flow">
     <div data-montage-id="flow" class="flow flow-fade-out">
         <div data-montage-id="image" class="Image"></div>
     </div>
     <div class="film"></div>
     <div data-montage-id="details"></div>
 </div>




"flow": {
    "prototype": "montage/ui/flow.reel",
    "properties": {
        "element": {"#": "flow"},
        "cameraFov": 36.99,                   data binding
        "cameraTargetPoint": [0, 0, 0],
        "stride": 1
    },
    "bindings": {
        "contentController": {"<-": "@owner.moviesController"}
    }
},
<div data-montage-id="facade-flow" class="facade-flow">
     <div data-montage-id="flow" class="flow flow-fade-out">
         <div data-montage-id="image" class="Image"></div>
     </div>
     <div class="film"></div>
     <div data-montage-id="details"></div>
 </div>




"details": {
    "prototype": "ui/details.reel",
    "properties": {
        "element": {"#": "details"}
    },
    "bindings": {
        "data": {"<-": "@owner.selectedMovie" }
    }
},
Movie Detail
Movie Detail



                   Title
 Release Date   Runtime    Audience   Critics

                                                Trailer Button

                Synopsis                        Rent Button
Movie Detail Components



               DynamicText
 DynamicText   DynamicText   Dynamic Text   Dynamic Text

                                                           Button

               DynamicText                                 Button
Movie Detail
                                                        Title
                       data.title

                                     data.criticScore
data.date
                                                  Critics
             data.runtime
                                    data.audienceScore                  actionEvent
      Date          Runtime               Audience
                                                            Trailer Button
  data.synopsis

                                                                        actionEvent


                  Description                                Rent Button
action event


Trailer Button
<button data-montage-id="trailer-button">Trailer</button>




"trailerButton": {
    "prototype": "montage/ui/button.reel",
    "properties": {
        "element": {"#": "trailer-button"}
    },
    "listeners": [
        {
            "type": "action",
            "listener": {"@": "owner"}       Listeners
        }
    ]
},
<button data-montage-id="trailer-button">Trailer</button>




"trailerButton": {
    "prototype": "montage/ui/button.reel",
    "properties": {
        "element": {"#": "trailer-button"}
    },
    "listeners": [
        {
            "type": "action",
            "listener": {"@": "owner"}
                                              Object
        }                                    Reference
    ]
},
"trailerButton": {
    "prototype": "montage/ui/button.reel",
    "properties": {
        "element": {"#": "trailer-button"}
    },
    "listeners": [
        {
            "type": "action",
            "listener": {"@": "owner"}
        }
    ]
},




                       handleTrailerButtonAction: {
       Owner              value: function(event) {
                            ...
 EventHandling           }
       Method          }
                       handleAction
   Precedence
                       handleEvent
Mop it!
Modular Applications

        Encapsulated Components
        HTML5 Templates
        Scale Larger Team/Projects
        Shorter Development Time
        Easier to Refactor
Q&A
Fo
                                                   rk
                                                    me
                                                       on
                                                        Gi
                                                         tH
                                                            ub
                   A modern HTML5 framework




benoit@montagejs.org     Benoît Marchant      montagejs.org

Contenu connexe

Tendances

Architecting non-trivial browser applications (Jazoon 2012)
Architecting non-trivial browser applications (Jazoon 2012)Architecting non-trivial browser applications (Jazoon 2012)
Architecting non-trivial browser applications (Jazoon 2012)Marc Bächinger
 
Javascript Frameworks for Well Architected, Immersive Web Apps
Javascript Frameworks for Well Architected, Immersive Web AppsJavascript Frameworks for Well Architected, Immersive Web Apps
Javascript Frameworks for Well Architected, Immersive Web Appsdnelson-cs
 
Spring as a Cloud Platform (Developer Summit 2011 17-C-5)
Spring as a Cloud Platform (Developer Summit 2011 17-C-5)Spring as a Cloud Platform (Developer Summit 2011 17-C-5)
Spring as a Cloud Platform (Developer Summit 2011 17-C-5)Kazuyuki Kawamura
 
Java Web Programming [7/9] : Struts2 Basics
Java Web Programming [7/9] : Struts2 BasicsJava Web Programming [7/9] : Struts2 Basics
Java Web Programming [7/9] : Struts2 BasicsIMC Institute
 
Mike Taulty MIX10 Silverlight 4 Patterns Frameworks
Mike Taulty MIX10 Silverlight 4 Patterns FrameworksMike Taulty MIX10 Silverlight 4 Patterns Frameworks
Mike Taulty MIX10 Silverlight 4 Patterns Frameworksukdpe
 
JSF basics
JSF basicsJSF basics
JSF basicsairbo
 
Building and managing java projects with maven part-III
Building and managing java projects with maven part-IIIBuilding and managing java projects with maven part-III
Building and managing java projects with maven part-IIIprinceirfancivil
 
Best Angularjs tutorial for beginners - TIB Academy
Best Angularjs tutorial for beginners - TIB AcademyBest Angularjs tutorial for beginners - TIB Academy
Best Angularjs tutorial for beginners - TIB AcademyTIB Academy
 
Server side programming bt0083
Server side programming bt0083Server side programming bt0083
Server side programming bt0083Divyam Pateriya
 
Sun JSF Presentation
Sun JSF PresentationSun JSF Presentation
Sun JSF PresentationGaurav Dighe
 
Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)Fahad Golra
 
Managing JavaScript Dependencies With RequireJS
Managing JavaScript Dependencies With RequireJSManaging JavaScript Dependencies With RequireJS
Managing JavaScript Dependencies With RequireJSDen Odell
 
Spring and Web Content Management
Spring and Web Content ManagementSpring and Web Content Management
Spring and Web Content ManagementZak Greant
 
Design Patterns in ZK: Java MVVM as Model-View-Binder
Design Patterns in ZK: Java MVVM as Model-View-BinderDesign Patterns in ZK: Java MVVM as Model-View-Binder
Design Patterns in ZK: Java MVVM as Model-View-BinderSimon Massey
 

Tendances (18)

Architecting non-trivial browser applications (Jazoon 2012)
Architecting non-trivial browser applications (Jazoon 2012)Architecting non-trivial browser applications (Jazoon 2012)
Architecting non-trivial browser applications (Jazoon 2012)
 
Jsf presentation
Jsf presentationJsf presentation
Jsf presentation
 
Introduction to jsf 2
Introduction to jsf 2Introduction to jsf 2
Introduction to jsf 2
 
Javascript Frameworks for Well Architected, Immersive Web Apps
Javascript Frameworks for Well Architected, Immersive Web AppsJavascript Frameworks for Well Architected, Immersive Web Apps
Javascript Frameworks for Well Architected, Immersive Web Apps
 
Spring as a Cloud Platform (Developer Summit 2011 17-C-5)
Spring as a Cloud Platform (Developer Summit 2011 17-C-5)Spring as a Cloud Platform (Developer Summit 2011 17-C-5)
Spring as a Cloud Platform (Developer Summit 2011 17-C-5)
 
Java Web Programming [7/9] : Struts2 Basics
Java Web Programming [7/9] : Struts2 BasicsJava Web Programming [7/9] : Struts2 Basics
Java Web Programming [7/9] : Struts2 Basics
 
Mike Taulty MIX10 Silverlight 4 Patterns Frameworks
Mike Taulty MIX10 Silverlight 4 Patterns FrameworksMike Taulty MIX10 Silverlight 4 Patterns Frameworks
Mike Taulty MIX10 Silverlight 4 Patterns Frameworks
 
JSF basics
JSF basicsJSF basics
JSF basics
 
Building and managing java projects with maven part-III
Building and managing java projects with maven part-IIIBuilding and managing java projects with maven part-III
Building and managing java projects with maven part-III
 
Best Angularjs tutorial for beginners - TIB Academy
Best Angularjs tutorial for beginners - TIB AcademyBest Angularjs tutorial for beginners - TIB Academy
Best Angularjs tutorial for beginners - TIB Academy
 
Server side programming bt0083
Server side programming bt0083Server side programming bt0083
Server side programming bt0083
 
Sun JSF Presentation
Sun JSF PresentationSun JSF Presentation
Sun JSF Presentation
 
Unit 06: The Web Application Extension for UML
Unit 06: The Web Application Extension for UMLUnit 06: The Web Application Extension for UML
Unit 06: The Web Application Extension for UML
 
netbeans
netbeansnetbeans
netbeans
 
Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)
 
Managing JavaScript Dependencies With RequireJS
Managing JavaScript Dependencies With RequireJSManaging JavaScript Dependencies With RequireJS
Managing JavaScript Dependencies With RequireJS
 
Spring and Web Content Management
Spring and Web Content ManagementSpring and Web Content Management
Spring and Web Content Management
 
Design Patterns in ZK: Java MVVM as Model-View-Binder
Design Patterns in ZK: Java MVVM as Model-View-BinderDesign Patterns in ZK: Java MVVM as Model-View-Binder
Design Patterns in ZK: Java MVVM as Model-View-Binder
 

En vedette

Making Peace with Twitter Bootstrap
Making Peace with Twitter BootstrapMaking Peace with Twitter Bootstrap
Making Peace with Twitter BootstrapMelanie Archer
 
HTML5 Dev Conf 2013 Presentation
HTML5 Dev Conf 2013 PresentationHTML5 Dev Conf 2013 Presentation
HTML5 Dev Conf 2013 PresentationIker Jamardo
 
Web Motion: Motion Detection on the Web
Web Motion: Motion Detection on the WebWeb Motion: Motion Detection on the Web
Web Motion: Motion Detection on the Webfisherwebdev
 
Introducing Rendr: Run your Backbone.js apps on the client and server
Introducing Rendr: Run your Backbone.js apps on the client and serverIntroducing Rendr: Run your Backbone.js apps on the client and server
Introducing Rendr: Run your Backbone.js apps on the client and serverSpike Brehm
 
Twig & the new theme layer in Drupal 8
Twig & the new theme layer in Drupal 8Twig & the new theme layer in Drupal 8
Twig & the new theme layer in Drupal 8Jen Lampton
 

En vedette (6)

Making Peace with Twitter Bootstrap
Making Peace with Twitter BootstrapMaking Peace with Twitter Bootstrap
Making Peace with Twitter Bootstrap
 
HTML5 Dev Conf 2013 Presentation
HTML5 Dev Conf 2013 PresentationHTML5 Dev Conf 2013 Presentation
HTML5 Dev Conf 2013 Presentation
 
Web Motion: Motion Detection on the Web
Web Motion: Motion Detection on the WebWeb Motion: Motion Detection on the Web
Web Motion: Motion Detection on the Web
 
Introducing Rendr: Run your Backbone.js apps on the client and server
Introducing Rendr: Run your Backbone.js apps on the client and serverIntroducing Rendr: Run your Backbone.js apps on the client and server
Introducing Rendr: Run your Backbone.js apps on the client and server
 
Twig & the new theme layer in Drupal 8
Twig & the new theme layer in Drupal 8Twig & the new theme layer in Drupal 8
Twig & the new theme layer in Drupal 8
 
What Is Montage Editing
What Is Montage EditingWhat Is Montage Editing
What Is Montage Editing
 

Similaire à Modular applications with montage components

Google Polymer Introduction
Google Polymer IntroductionGoogle Polymer Introduction
Google Polymer IntroductionDavid Price
 
Building Cloud-Based Cross-Platform Mobile Web Apps
Building Cloud-Based Cross-Platform Mobile Web AppsBuilding Cloud-Based Cross-Platform Mobile Web Apps
Building Cloud-Based Cross-Platform Mobile Web AppsJames Pearce
 
Miha Lesjak Mobilizing The Web with Web Runtime
Miha Lesjak Mobilizing The Web with Web RuntimeMiha Lesjak Mobilizing The Web with Web Runtime
Miha Lesjak Mobilizing The Web with Web RuntimeNokiaAppForum
 
Modelibra Software Family
Modelibra Software FamilyModelibra Software Family
Modelibra Software Familydzenanr
 
HTML5 for Rich User Experience
HTML5 for Rich User ExperienceHTML5 for Rich User Experience
HTML5 for Rich User ExperienceMahbubur Rahman
 
A Snapshot of the Mobile HTML5 Revolution
A Snapshot of the Mobile HTML5 RevolutionA Snapshot of the Mobile HTML5 Revolution
A Snapshot of the Mobile HTML5 RevolutionJames Pearce
 
An Introduction to Sencha Touch
An Introduction to Sencha TouchAn Introduction to Sencha Touch
An Introduction to Sencha TouchJames Pearce
 
Web Apps and more
Web Apps and moreWeb Apps and more
Web Apps and moreYan Shi
 
Web app and more
Web app and moreWeb app and more
Web app and morefaming su
 
Enterprise Source and Release Management Using StratoSource
Enterprise Source and Release Management Using StratoSourceEnterprise Source and Release Management Using StratoSource
Enterprise Source and Release Management Using StratoSourceSalesforce Developers
 
Milwaukee JS - Live binding with CanJS
Milwaukee JS - Live binding with CanJSMilwaukee JS - Live binding with CanJS
Milwaukee JS - Live binding with CanJSStan Carrico
 
HTML5 and the dawn of rich mobile web applications pt 1
HTML5 and the dawn of rich mobile web applications pt 1HTML5 and the dawn of rich mobile web applications pt 1
HTML5 and the dawn of rich mobile web applications pt 1James Pearce
 
Zotonic presentation Erlang Camp Boston, august 2011
Zotonic presentation Erlang Camp Boston, august 2011Zotonic presentation Erlang Camp Boston, august 2011
Zotonic presentation Erlang Camp Boston, august 2011Arjan
 
Cross platform mobile web apps
Cross platform mobile web appsCross platform mobile web apps
Cross platform mobile web appsJames Pearce
 
Open Web Camp 2015: Shave that handlebar mustache
Open Web Camp 2015:  Shave that handlebar mustache Open Web Camp 2015:  Shave that handlebar mustache
Open Web Camp 2015: Shave that handlebar mustache Benoit Marchant
 
Single page applications mit asp.net mvc und der asp.net web api
Single page applications mit asp.net mvc und der asp.net web apiSingle page applications mit asp.net mvc und der asp.net web api
Single page applications mit asp.net mvc und der asp.net web apiAlexander Zeitler
 
Decomposing the Monolith using modern-day .NET and a touch of microservices
Decomposing the Monolith using modern-day .NET and a touch of microservicesDecomposing the Monolith using modern-day .NET and a touch of microservices
Decomposing the Monolith using modern-day .NET and a touch of microservicesDennis Doomen
 
A Zend Architecture presentation
A Zend Architecture presentationA Zend Architecture presentation
A Zend Architecture presentationtechweb08
 

Similaire à Modular applications with montage components (20)

Wpf Tech Overview2009
Wpf Tech Overview2009Wpf Tech Overview2009
Wpf Tech Overview2009
 
Making Modern Websites
Making Modern WebsitesMaking Modern Websites
Making Modern Websites
 
Google Polymer Introduction
Google Polymer IntroductionGoogle Polymer Introduction
Google Polymer Introduction
 
Building Cloud-Based Cross-Platform Mobile Web Apps
Building Cloud-Based Cross-Platform Mobile Web AppsBuilding Cloud-Based Cross-Platform Mobile Web Apps
Building Cloud-Based Cross-Platform Mobile Web Apps
 
Miha Lesjak Mobilizing The Web with Web Runtime
Miha Lesjak Mobilizing The Web with Web RuntimeMiha Lesjak Mobilizing The Web with Web Runtime
Miha Lesjak Mobilizing The Web with Web Runtime
 
Modelibra Software Family
Modelibra Software FamilyModelibra Software Family
Modelibra Software Family
 
HTML5 for Rich User Experience
HTML5 for Rich User ExperienceHTML5 for Rich User Experience
HTML5 for Rich User Experience
 
A Snapshot of the Mobile HTML5 Revolution
A Snapshot of the Mobile HTML5 RevolutionA Snapshot of the Mobile HTML5 Revolution
A Snapshot of the Mobile HTML5 Revolution
 
An Introduction to Sencha Touch
An Introduction to Sencha TouchAn Introduction to Sencha Touch
An Introduction to Sencha Touch
 
Web Apps and more
Web Apps and moreWeb Apps and more
Web Apps and more
 
Web app and more
Web app and moreWeb app and more
Web app and more
 
Enterprise Source and Release Management Using StratoSource
Enterprise Source and Release Management Using StratoSourceEnterprise Source and Release Management Using StratoSource
Enterprise Source and Release Management Using StratoSource
 
Milwaukee JS - Live binding with CanJS
Milwaukee JS - Live binding with CanJSMilwaukee JS - Live binding with CanJS
Milwaukee JS - Live binding with CanJS
 
HTML5 and the dawn of rich mobile web applications pt 1
HTML5 and the dawn of rich mobile web applications pt 1HTML5 and the dawn of rich mobile web applications pt 1
HTML5 and the dawn of rich mobile web applications pt 1
 
Zotonic presentation Erlang Camp Boston, august 2011
Zotonic presentation Erlang Camp Boston, august 2011Zotonic presentation Erlang Camp Boston, august 2011
Zotonic presentation Erlang Camp Boston, august 2011
 
Cross platform mobile web apps
Cross platform mobile web appsCross platform mobile web apps
Cross platform mobile web apps
 
Open Web Camp 2015: Shave that handlebar mustache
Open Web Camp 2015:  Shave that handlebar mustache Open Web Camp 2015:  Shave that handlebar mustache
Open Web Camp 2015: Shave that handlebar mustache
 
Single page applications mit asp.net mvc und der asp.net web api
Single page applications mit asp.net mvc und der asp.net web apiSingle page applications mit asp.net mvc und der asp.net web api
Single page applications mit asp.net mvc und der asp.net web api
 
Decomposing the Monolith using modern-day .NET and a touch of microservices
Decomposing the Monolith using modern-day .NET and a touch of microservicesDecomposing the Monolith using modern-day .NET and a touch of microservices
Decomposing the Monolith using modern-day .NET and a touch of microservices
 
A Zend Architecture presentation
A Zend Architecture presentationA Zend Architecture presentation
A Zend Architecture presentation
 

Dernier

Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 

Dernier (20)

Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 

Modular applications with montage components

  • 1. Modular Applications with Montage Components Benoît Marchant benoit@montagejs.org montagejs.org
  • 2.
  • 3. TEAM CSS data-binding property change HTML5 workflow template serialization reusable simplify listener component separation of concerns encapsulated event MVC declarative framework BSD CommonJS composition deferred drawing textfield loader substitution widgets toggle flow repetition condition modules promises radio button slider applications video progress text checkbox slot mobile audio list input ECMAScript 5 package write once cpu gpu battery cross-platform
  • 5.
  • 6.
  • 8. HTML5 vs Native Janky User Experience
  • 9. HTML5 vs Native Janky User Experience Longer Development Time
  • 10. HTML5 vs Native Janky User Experience Longer Development Time Higher Development Cost
  • 11. HTML5 vs Native Janky User Experience Longer Development Time Higher Development Cost Harder to Iterate
  • 19. Component Assigned one DOM Element MVC Structure From Widget to App Specific Deferred Drawing Template
  • 20. Deferred Drawing Maximize Performance Orchestrate DOM Changes Third Party Components Degrade Gracefully willDraw() / draw() / didDraw()
  • 21. Template Full HTML5 document HTML JS CSS Resource Encapsulation .reel Object Serialization Great JS / CSS Team Work Automatic Dependencies Load
  • 22.
  • 24. Main Component Loads data from Web Service Relies on sub-components for presentation
  • 26. Movie Categories Main Navigation Event to change CategoryId Selected CategoryId Components Movie Content establish their own API to accept data through properties or methods
  • 27. Movie Categories Main Event to change CategoryId Selected CategoryId
  • 28. Movie Categories Main Event to change CategoryId Selected CategoryId
  • 30. Movie Content Flow Component Movie Detail Component
  • 31. Movie Content moviesController Flow Component selectedMovie Movie Detail Component
  • 32. Main.reel/Main.html <html> ... <body> <div data-montage-id="facade-flow" class="facade-flow"> <div data-montage-id="flow" class="flow flow-fade-out"> <div data-montage-id="image" class="Image"></div> </div> <div class="film"></div> <div data-montage-id="details"></div> </div> </body> </html>
  • 33. Markup <div data-montage-id="facade-flow" class="facade-flow"> <div data-montage-id="flow" class="flow flow-fade-out"> <div data-montage-id="image" class="Image"></div> </div> <div class="film"></div> <div data-montage-id="details"></div> </div> Object Serialization <script type="text/montage-serialization"> { "owner": { "properties": { "element": {"#": "facade-flow"} } }, ...
  • 34. <div data-montage-id="facade-flow" class="facade-flow"> <div data-montage-id="flow" class="flow flow-fade-out"> <div data-montage-id="image" class="Image"></div> </div> <div class="film"></div> <div data-montage-id="details"></div> </div> <script type="text/montage-serialization"> { "owner": { "properties": { "element": {"#": "facade-flow"} } }, ...
  • 35. <div data-montage-id="facade-flow" class="facade-flow"> <div data-montage-id="flow" class="flow flow-fade-out"> <div data-montage-id="image" class="Image"></div> </div> <div class="film"></div> <div data-montage-id="details"></div> </div> "flow": { "prototype": "montage/ui/flow.reel", Module Id "properties": { "element": {"#": "flow"}, "cameraFov": 36.99, "cameraTargetPoint": [0, 0, 0], "stride": 1 }, "bindings": { "contentController": {"<-": "@owner.moviesController"} } },
  • 36. <div data-montage-id="facade-flow" class="facade-flow"> <div data-montage-id="flow" class="flow flow-fade-out"> <div data-montage-id="image" class="Image"></div> </div> <div class="film"></div> <div data-montage-id="details"></div> </div> "flow": { "prototype": "montage/ui/flow.reel", "properties": { "element": {"#": "flow"}, "cameraFov": 36.99, Setting "cameraTargetPoint": [0, 0, 0], "stride": 1 Property Values }, "bindings": { "contentController": {"<-": "@owner.moviesController"} } },
  • 37. <div data-montage-id="facade-flow" class="facade-flow"> <div data-montage-id="flow" class="flow flow-fade-out"> <div data-montage-id="image" class="Image"></div> </div> <div class="film"></div> <div data-montage-id="details"></div> </div> "flow": { "prototype": "montage/ui/flow.reel", "properties": { "element": {"#": "flow"}, "cameraFov": 36.99, data binding "cameraTargetPoint": [0, 0, 0], "stride": 1 }, "bindings": { "contentController": {"<-": "@owner.moviesController"} } },
  • 38. <div data-montage-id="facade-flow" class="facade-flow"> <div data-montage-id="flow" class="flow flow-fade-out"> <div data-montage-id="image" class="Image"></div> </div> <div class="film"></div> <div data-montage-id="details"></div> </div> "details": { "prototype": "ui/details.reel", "properties": { "element": {"#": "details"} }, "bindings": { "data": {"<-": "@owner.selectedMovie" } } },
  • 40. Movie Detail Title Release Date Runtime Audience Critics Trailer Button Synopsis Rent Button
  • 41. Movie Detail Components DynamicText DynamicText DynamicText Dynamic Text Dynamic Text Button DynamicText Button
  • 42. Movie Detail Title data.title data.criticScore data.date Critics data.runtime data.audienceScore actionEvent Date Runtime Audience Trailer Button data.synopsis actionEvent Description Rent Button
  • 44. <button data-montage-id="trailer-button">Trailer</button> "trailerButton": { "prototype": "montage/ui/button.reel", "properties": { "element": {"#": "trailer-button"} }, "listeners": [ { "type": "action", "listener": {"@": "owner"} Listeners } ] },
  • 45. <button data-montage-id="trailer-button">Trailer</button> "trailerButton": { "prototype": "montage/ui/button.reel", "properties": { "element": {"#": "trailer-button"} }, "listeners": [ { "type": "action", "listener": {"@": "owner"} Object } Reference ] },
  • 46. "trailerButton": { "prototype": "montage/ui/button.reel", "properties": { "element": {"#": "trailer-button"} }, "listeners": [ { "type": "action", "listener": {"@": "owner"} } ] }, handleTrailerButtonAction: { Owner value: function(event) { ... EventHandling } Method } handleAction Precedence handleEvent
  • 47.
  • 49. Modular Applications Encapsulated Components HTML5 Templates Scale Larger Team/Projects Shorter Development Time Easier to Refactor
  • 50. Q&A
  • 51. Fo rk me on Gi tH ub A modern HTML5 framework benoit@montagejs.org Benoît Marchant montagejs.org