SlideShare a Scribd company logo
Modular Applications
                       with Montage Components



                          Benoît Marchant



benoit@montagejs.org                             montagejs.org
Modular applications with montage components
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
Modular applications with montage components
Modular applications with montage components
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
Modular applications with montage components
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
Modular applications with montage components
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
Ad

More Related Content

What's hot (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)
Marc Bächinger
 
Jsf presentation
Jsf presentationJsf presentation
Jsf presentation
Ashish Gupta
 
Introduction to jsf 2
Introduction to jsf 2Introduction to jsf 2
Introduction to jsf 2
yousry ibrahim
 
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
dnelson-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 Basics
IMC 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 Frameworks
ukdpe
 
JSF basics
JSF basicsJSF basics
JSF basics
airbo
 
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
princeirfancivil
 
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
TIB Academy
 
Server side programming bt0083
Server side programming bt0083Server side programming bt0083
Server side programming bt0083
Divyam Pateriya
 
Sun JSF Presentation
Sun JSF PresentationSun JSF Presentation
Sun JSF Presentation
Gaurav Dighe
 
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
DSBW 2011/2002 - Carles Farré - Barcelona Tech
 
netbeans
netbeansnetbeans
netbeans
tutorialsruby
 
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 RequireJS
Den Odell
 
Spring and Web Content Management
Spring and Web Content ManagementSpring and Web Content Management
Spring and Web Content Management
Zak 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-Binder
Simon Massey
 
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 Apps
dnelson-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 Basics
IMC 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 Frameworks
ukdpe
 
JSF basics
JSF basicsJSF basics
JSF basics
airbo
 
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
princeirfancivil
 
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
TIB Academy
 
Server side programming bt0083
Server side programming bt0083Server side programming bt0083
Server side programming bt0083
Divyam Pateriya
 
Sun JSF Presentation
Sun JSF PresentationSun JSF Presentation
Sun JSF Presentation
Gaurav 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 RequireJS
Den Odell
 
Spring and Web Content Management
Spring and Web Content ManagementSpring and Web Content Management
Spring and Web Content Management
Zak 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-Binder
Simon Massey
 

Viewers also liked (6)

Making Peace with Twitter Bootstrap
Making Peace with Twitter BootstrapMaking Peace with Twitter Bootstrap
Making Peace with Twitter Bootstrap
Melanie Archer
 
HTML5 Dev Conf 2013 Presentation
HTML5 Dev Conf 2013 PresentationHTML5 Dev Conf 2013 Presentation
HTML5 Dev Conf 2013 Presentation
Iker 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 Web
fisherwebdev
 
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
Spike 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 8
Jen Lampton
 
What Is Montage Editing
What Is Montage EditingWhat Is Montage Editing
What Is Montage Editing
HannahEmmaLailaJosh
 
Making Peace with Twitter Bootstrap
Making Peace with Twitter BootstrapMaking Peace with Twitter Bootstrap
Making Peace with Twitter Bootstrap
Melanie Archer
 
HTML5 Dev Conf 2013 Presentation
HTML5 Dev Conf 2013 PresentationHTML5 Dev Conf 2013 Presentation
HTML5 Dev Conf 2013 Presentation
Iker 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 Web
fisherwebdev
 
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
Spike 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 8
Jen Lampton
 
Ad

Similar to Modular applications with montage components (20)

Wpf Tech Overview2009
Wpf Tech Overview2009Wpf Tech Overview2009
Wpf Tech Overview2009
Our Community Exchange LLC
 
Making Modern Websites
Making Modern WebsitesMaking Modern Websites
Making Modern Websites
Patrick Kettner
 
Google Polymer Introduction
Google Polymer IntroductionGoogle Polymer Introduction
Google Polymer Introduction
David 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 Apps
James 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 Runtime
NokiaAppForum
 
Modelibra Software Family
Modelibra Software FamilyModelibra Software Family
Modelibra Software Family
dzenanr
 
HTML5 for Rich User Experience
HTML5 for Rich User ExperienceHTML5 for Rich User Experience
HTML5 for Rich User Experience
Mahbubur 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 Revolution
James Pearce
 
An Introduction to Sencha Touch
An Introduction to Sencha TouchAn Introduction to Sencha Touch
An Introduction to Sencha Touch
James Pearce
 
Web app and more
Web app and moreWeb app and more
Web app and more
faming su
 
Web Apps and more
Web Apps and moreWeb Apps and more
Web Apps and more
Yan Shi
 
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
Salesforce Developers
 
Milwaukee JS - Live binding with CanJS
Milwaukee JS - Live binding with CanJSMilwaukee JS - Live binding with CanJS
Milwaukee JS - Live binding with CanJS
Stan 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 1
James 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 2011
Arjan
 
Cross platform mobile web apps
Cross platform mobile web appsCross platform mobile web apps
Cross platform mobile web apps
James 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 api
Alexander 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 microservices
Dennis Doomen
 
A Zend Architecture presentation
A Zend Architecture presentationA Zend Architecture presentation
A Zend Architecture presentation
techweb08
 
Google Polymer Introduction
Google Polymer IntroductionGoogle Polymer Introduction
Google Polymer Introduction
David 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 Apps
James 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 Runtime
NokiaAppForum
 
Modelibra Software Family
Modelibra Software FamilyModelibra Software Family
Modelibra Software Family
dzenanr
 
HTML5 for Rich User Experience
HTML5 for Rich User ExperienceHTML5 for Rich User Experience
HTML5 for Rich User Experience
Mahbubur 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 Revolution
James Pearce
 
An Introduction to Sencha Touch
An Introduction to Sencha TouchAn Introduction to Sencha Touch
An Introduction to Sencha Touch
James Pearce
 
Web app and more
Web app and moreWeb app and more
Web app and more
faming su
 
Web Apps and more
Web Apps and moreWeb Apps and more
Web Apps and more
Yan Shi
 
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
Salesforce Developers
 
Milwaukee JS - Live binding with CanJS
Milwaukee JS - Live binding with CanJSMilwaukee JS - Live binding with CanJS
Milwaukee JS - Live binding with CanJS
Stan 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 1
James 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 2011
Arjan
 
Cross platform mobile web apps
Cross platform mobile web appsCross platform mobile web apps
Cross platform mobile web apps
James 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 api
Alexander 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 microservices
Dennis Doomen
 
A Zend Architecture presentation
A Zend Architecture presentationA Zend Architecture presentation
A Zend Architecture presentation
techweb08
 
Ad

Recently uploaded (20)

Artificial_Intelligence_in_Everyday_Life.pptx
Artificial_Intelligence_in_Everyday_Life.pptxArtificial_Intelligence_in_Everyday_Life.pptx
Artificial_Intelligence_in_Everyday_Life.pptx
03ANMOLCHAURASIYA
 
Top 5 Benefits of Using Molybdenum Rods in Industrial Applications.pptx
Top 5 Benefits of Using Molybdenum Rods in Industrial Applications.pptxTop 5 Benefits of Using Molybdenum Rods in Industrial Applications.pptx
Top 5 Benefits of Using Molybdenum Rods in Industrial Applications.pptx
mkubeusa
 
Build With AI - In Person Session Slides.pdf
Build With AI - In Person Session Slides.pdfBuild With AI - In Person Session Slides.pdf
Build With AI - In Person Session Slides.pdf
Google Developer Group - Harare
 
Top-AI-Based-Tools-for-Game-Developers (1).pptx
Top-AI-Based-Tools-for-Game-Developers (1).pptxTop-AI-Based-Tools-for-Game-Developers (1).pptx
Top-AI-Based-Tools-for-Game-Developers (1).pptx
BR Softech
 
AsyncAPI v3 : Streamlining Event-Driven API Design
AsyncAPI v3 : Streamlining Event-Driven API DesignAsyncAPI v3 : Streamlining Event-Driven API Design
AsyncAPI v3 : Streamlining Event-Driven API Design
leonid54
 
Dark Dynamism: drones, dark factories and deurbanization
Dark Dynamism: drones, dark factories and deurbanizationDark Dynamism: drones, dark factories and deurbanization
Dark Dynamism: drones, dark factories and deurbanization
Jakub Šimek
 
RTP Over QUIC: An Interesting Opportunity Or Wasted Time?
RTP Over QUIC: An Interesting Opportunity Or Wasted Time?RTP Over QUIC: An Interesting Opportunity Or Wasted Time?
RTP Over QUIC: An Interesting Opportunity Or Wasted Time?
Lorenzo Miniero
 
On-Device or Remote? On the Energy Efficiency of Fetching LLM-Generated Conte...
On-Device or Remote? On the Energy Efficiency of Fetching LLM-Generated Conte...On-Device or Remote? On the Energy Efficiency of Fetching LLM-Generated Conte...
On-Device or Remote? On the Energy Efficiency of Fetching LLM-Generated Conte...
Ivano Malavolta
 
Bepents tech services - a premier cybersecurity consulting firm
Bepents tech services - a premier cybersecurity consulting firmBepents tech services - a premier cybersecurity consulting firm
Bepents tech services - a premier cybersecurity consulting firm
Benard76
 
Design pattern talk by Kaya Weers - 2025 (v2)
Design pattern talk by Kaya Weers - 2025 (v2)Design pattern talk by Kaya Weers - 2025 (v2)
Design pattern talk by Kaya Weers - 2025 (v2)
Kaya Weers
 
Smart Investments Leveraging Agentic AI for Real Estate Success.pptx
Smart Investments Leveraging Agentic AI for Real Estate Success.pptxSmart Investments Leveraging Agentic AI for Real Estate Success.pptx
Smart Investments Leveraging Agentic AI for Real Estate Success.pptx
Seasia Infotech
 
Viam product demo_ Deploying and scaling AI with hardware.pdf
Viam product demo_ Deploying and scaling AI with hardware.pdfViam product demo_ Deploying and scaling AI with hardware.pdf
Viam product demo_ Deploying and scaling AI with hardware.pdf
camilalamoratta
 
AI Agents at Work: UiPath, Maestro & the Future of Documents
AI Agents at Work: UiPath, Maestro & the Future of DocumentsAI Agents at Work: UiPath, Maestro & the Future of Documents
AI Agents at Work: UiPath, Maestro & the Future of Documents
UiPathCommunity
 
IT484 Cyber Forensics_Information Technology
IT484 Cyber Forensics_Information TechnologyIT484 Cyber Forensics_Information Technology
IT484 Cyber Forensics_Information Technology
SHEHABALYAMANI
 
Shoehorning dependency injection into a FP language, what does it take?
Shoehorning dependency injection into a FP language, what does it take?Shoehorning dependency injection into a FP language, what does it take?
Shoehorning dependency injection into a FP language, what does it take?
Eric Torreborre
 
IT488 Wireless Sensor Networks_Information Technology
IT488 Wireless Sensor Networks_Information TechnologyIT488 Wireless Sensor Networks_Information Technology
IT488 Wireless Sensor Networks_Information Technology
SHEHABALYAMANI
 
fennec fox optimization algorithm for optimal solution
fennec fox optimization algorithm for optimal solutionfennec fox optimization algorithm for optimal solution
fennec fox optimization algorithm for optimal solution
shallal2
 
AI 3-in-1: Agents, RAG, and Local Models - Brent Laster
AI 3-in-1: Agents, RAG, and Local Models - Brent LasterAI 3-in-1: Agents, RAG, and Local Models - Brent Laster
AI 3-in-1: Agents, RAG, and Local Models - Brent Laster
All Things Open
 
Config 2025 presentation recap covering both days
Config 2025 presentation recap covering both daysConfig 2025 presentation recap covering both days
Config 2025 presentation recap covering both days
TrishAntoni1
 
Building the Customer Identity Community, Together.pdf
Building the Customer Identity Community, Together.pdfBuilding the Customer Identity Community, Together.pdf
Building the Customer Identity Community, Together.pdf
Cheryl Hung
 
Artificial_Intelligence_in_Everyday_Life.pptx
Artificial_Intelligence_in_Everyday_Life.pptxArtificial_Intelligence_in_Everyday_Life.pptx
Artificial_Intelligence_in_Everyday_Life.pptx
03ANMOLCHAURASIYA
 
Top 5 Benefits of Using Molybdenum Rods in Industrial Applications.pptx
Top 5 Benefits of Using Molybdenum Rods in Industrial Applications.pptxTop 5 Benefits of Using Molybdenum Rods in Industrial Applications.pptx
Top 5 Benefits of Using Molybdenum Rods in Industrial Applications.pptx
mkubeusa
 
Top-AI-Based-Tools-for-Game-Developers (1).pptx
Top-AI-Based-Tools-for-Game-Developers (1).pptxTop-AI-Based-Tools-for-Game-Developers (1).pptx
Top-AI-Based-Tools-for-Game-Developers (1).pptx
BR Softech
 
AsyncAPI v3 : Streamlining Event-Driven API Design
AsyncAPI v3 : Streamlining Event-Driven API DesignAsyncAPI v3 : Streamlining Event-Driven API Design
AsyncAPI v3 : Streamlining Event-Driven API Design
leonid54
 
Dark Dynamism: drones, dark factories and deurbanization
Dark Dynamism: drones, dark factories and deurbanizationDark Dynamism: drones, dark factories and deurbanization
Dark Dynamism: drones, dark factories and deurbanization
Jakub Šimek
 
RTP Over QUIC: An Interesting Opportunity Or Wasted Time?
RTP Over QUIC: An Interesting Opportunity Or Wasted Time?RTP Over QUIC: An Interesting Opportunity Or Wasted Time?
RTP Over QUIC: An Interesting Opportunity Or Wasted Time?
Lorenzo Miniero
 
On-Device or Remote? On the Energy Efficiency of Fetching LLM-Generated Conte...
On-Device or Remote? On the Energy Efficiency of Fetching LLM-Generated Conte...On-Device or Remote? On the Energy Efficiency of Fetching LLM-Generated Conte...
On-Device or Remote? On the Energy Efficiency of Fetching LLM-Generated Conte...
Ivano Malavolta
 
Bepents tech services - a premier cybersecurity consulting firm
Bepents tech services - a premier cybersecurity consulting firmBepents tech services - a premier cybersecurity consulting firm
Bepents tech services - a premier cybersecurity consulting firm
Benard76
 
Design pattern talk by Kaya Weers - 2025 (v2)
Design pattern talk by Kaya Weers - 2025 (v2)Design pattern talk by Kaya Weers - 2025 (v2)
Design pattern talk by Kaya Weers - 2025 (v2)
Kaya Weers
 
Smart Investments Leveraging Agentic AI for Real Estate Success.pptx
Smart Investments Leveraging Agentic AI for Real Estate Success.pptxSmart Investments Leveraging Agentic AI for Real Estate Success.pptx
Smart Investments Leveraging Agentic AI for Real Estate Success.pptx
Seasia Infotech
 
Viam product demo_ Deploying and scaling AI with hardware.pdf
Viam product demo_ Deploying and scaling AI with hardware.pdfViam product demo_ Deploying and scaling AI with hardware.pdf
Viam product demo_ Deploying and scaling AI with hardware.pdf
camilalamoratta
 
AI Agents at Work: UiPath, Maestro & the Future of Documents
AI Agents at Work: UiPath, Maestro & the Future of DocumentsAI Agents at Work: UiPath, Maestro & the Future of Documents
AI Agents at Work: UiPath, Maestro & the Future of Documents
UiPathCommunity
 
IT484 Cyber Forensics_Information Technology
IT484 Cyber Forensics_Information TechnologyIT484 Cyber Forensics_Information Technology
IT484 Cyber Forensics_Information Technology
SHEHABALYAMANI
 
Shoehorning dependency injection into a FP language, what does it take?
Shoehorning dependency injection into a FP language, what does it take?Shoehorning dependency injection into a FP language, what does it take?
Shoehorning dependency injection into a FP language, what does it take?
Eric Torreborre
 
IT488 Wireless Sensor Networks_Information Technology
IT488 Wireless Sensor Networks_Information TechnologyIT488 Wireless Sensor Networks_Information Technology
IT488 Wireless Sensor Networks_Information Technology
SHEHABALYAMANI
 
fennec fox optimization algorithm for optimal solution
fennec fox optimization algorithm for optimal solutionfennec fox optimization algorithm for optimal solution
fennec fox optimization algorithm for optimal solution
shallal2
 
AI 3-in-1: Agents, RAG, and Local Models - Brent Laster
AI 3-in-1: Agents, RAG, and Local Models - Brent LasterAI 3-in-1: Agents, RAG, and Local Models - Brent Laster
AI 3-in-1: Agents, RAG, and Local Models - Brent Laster
All Things Open
 
Config 2025 presentation recap covering both days
Config 2025 presentation recap covering both daysConfig 2025 presentation recap covering both days
Config 2025 presentation recap covering both days
TrishAntoni1
 
Building the Customer Identity Community, Together.pdf
Building the Customer Identity Community, Together.pdfBuilding the Customer Identity Community, Together.pdf
Building the Customer Identity Community, Together.pdf
Cheryl Hung
 

Modular applications with montage components

  • 1. Modular Applications with Montage Components Benoît Marchant benoit@montagejs.org montagejs.org
  • 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
  • 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
  • 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
  • 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
  翻译: