SlideShare a Scribd company logo
1 of 30
Download to read offline
UNPLUGGED MOBILE CONTROLS
USER GROUP
May 2014
Agenda
 Deep Dive
 UnpDialog
 UnpAlert
 UnpTabbedFooter
 Case Study
 Extracted Design Method (OneView Example)
 Q & A
Deep Dive - UnpDialog
 Problem: dialog(String); cannot be formatted
Deep Dive - UnpDialog
 UnpDialog gives full range of customization
 Size, color, background, font etc
Deep Dive - UnpDialog
 Usage:
1) Drag a UnpDialog control onto your XPage
2) Complete Title and Callback custom properties
3) Drag in a label or computed text for content
Deep Dive - UnpDialog
 Usage:
4) ‘Callback’ is an optional client side JS function
executed on ‘OK’
5) To trigger, call: unp.openDialog('dialogPopup');
Deep Dive - UnpDialog
 Callback is a CSJS function:
Deep Dive - UnpDialog
 Current Disadvantages:
1. Only 1 dialog per page as ID is hard coded
2. Cannot pass arguments into function call
(‘Callback’ property)
Deep Dive - UnpDialog
 OtherAdvantages:
1. Extendable and can include other controls
Deep Dive - UnpDialog
 Example: Selecting an item from a list (2 Options)
1) ComboBox/Dropdown:
Deep Dive - UnpDialog
 ComboBox/Dropdown:
Deep Dive - UnpDialog
 Do not use xp:ListBox for this:
 Blank as the HTML code generated in the same as for
a xp:comboBox
 But no ‘selected’ attribute can be set
Deep Dive - UnpDialog
 Displayed list of items use xp:repeat and ul/li:
Deep Dive - UnpDialog
 Scrollable area inside the dialog
Deep Dive - UnpDialog
 Advantage 2 – Use SSJS (back to comboBox
example)
Deep Dive - UnpDialog
 Activate via hidden button
Deep Dive - UnpDialog
 Exercise for viewer:
 Apply SSJS to ul/li version
 Hint use xp:panel with tagName =“li” for <li>
Deep Dive - UnpAlert
 Simpler than UnpDialog – just a message and ‘Close’ button
 Drag in and complete the custom properties ‘Title’ and
‘Content’
 WIP currently – will be part of Controls 3.3 release
 Want to parameterize title and content so multiple alerts
can be used on same page
Deep Dive – UnpTabbedFooter
 Aid with Navigation usually for large
forms/high number of fields but can be used
as alternative to the UnpNavigator control
 Allows the compartmentalization of form
‘areas’
Deep Dive – UnpTabbedFooter
 Usage:
 Drag the custom control onto your XPage and set the
synctype property to point to either 'none', 'currentDB' or
'alldbs' to allow syncing the current db only (default) or all
dbs on device. If set to 'none' then the sync button will not
appear.
 Create 'tabs' to include tappable areas in the footer for
navigation purposes.Within each 'tab' you can set the icon,
text, icon when tapped and the page to navigate to.
 A callback client side JS function is available to perform
post tap events
 PostSyncTarget will navigate the user to a specified XPage
after a sync has completed *
 Navigation via the tabbed footer is currently performed as
a full page load.
* Not for MobileWeb Browser Apps – only valid for Unplugged apps
Design Architecture – Abstracted
Design
 Creating a mobile design in one NSF that pulls data
from other NSFs.
Design Architecture – Abstracted
Design
 Set up data in a view in existing DBs
 View must be common
Design Architecture – Abstracted
Design
 In new ‘Design DB’:
 Use data sources to external DB’s.
Design Architecture – Abstracted
Design
 Use beforeRenderResponse to collate data
Design Architecture – Abstracted
Design
 Use scoped var to sort data
Design Architecture – Abstracted
Design
 Store results in scoped var
Design Architecture – Abstracted
Design
 Use xp:repeat and Controls CSS to mimic
UnpFlatView
Design Architecture – Abstracted
Design
 Result…
Design Architecture – Abstracted
Design
 For the form data, create the XPage content in
the original DB
 Use a ‘design’ XPage in the new design DB and
load the data via UNID using AJAX
Q & A
 @Unp_UG
 @MobileAppsRule
 @mattwhite
 www.Teamstudio.com/Unplugged
 https://github.com/unplugged/unplugged-
controls

More Related Content

Viewers also liked

Jaundice
JaundiceJaundice
Jaundice
479713
 
Tasks.how chocolate is made
Tasks.how chocolate is madeTasks.how chocolate is made
Tasks.how chocolate is made
Jessica161
 
50 keys to cat from test funda
50 keys to cat from test funda50 keys to cat from test funda
50 keys to cat from test funda
jesusisgood
 
ИННА ТУР генеральный агент авиакомпании Руслайн
ИННА ТУР  генеральный агент авиакомпании РуслайнИННА ТУР  генеральный агент авиакомпании Руслайн
ИННА ТУР генеральный агент авиакомпании Руслайн
ИННА ТУР
 

Viewers also liked (15)

Professional Portfolio
  Professional Portfolio  Professional Portfolio
Professional Portfolio
 
6° allende ed
6° allende ed6° allende ed
6° allende ed
 
Jaundice
JaundiceJaundice
Jaundice
 
Tasks.how chocolate is made
Tasks.how chocolate is madeTasks.how chocolate is made
Tasks.how chocolate is made
 
Robot pegatortas
Robot pegatortas Robot pegatortas
Robot pegatortas
 
презентация метод радиочастотная денервация
презентация метод радиочастотная денервацияпрезентация метод радиочастотная денервация
презентация метод радиочастотная денервация
 
50 keys to cat from test funda
50 keys to cat from test funda50 keys to cat from test funda
50 keys to cat from test funda
 
Nat report2
Nat report2Nat report2
Nat report2
 
Wireless Wednesdays: Beyond the Basics - Enhance your Enterprise Mobile Appli...
Wireless Wednesdays: Beyond the Basics - Enhance your Enterprise Mobile Appli...Wireless Wednesdays: Beyond the Basics - Enhance your Enterprise Mobile Appli...
Wireless Wednesdays: Beyond the Basics - Enhance your Enterprise Mobile Appli...
 
Play with your memory
Play with your memoryPlay with your memory
Play with your memory
 
Animales
AnimalesAnimales
Animales
 
Nat 03
Nat 03Nat 03
Nat 03
 
Rain dove. Que ves cando me ves?
Rain dove. Que ves cando me ves?Rain dove. Que ves cando me ves?
Rain dove. Que ves cando me ves?
 
ИННА ТУР генеральный агент авиакомпании Руслайн
ИННА ТУР  генеральный агент авиакомпании РуслайнИННА ТУР  генеральный агент авиакомпании Руслайн
ИННА ТУР генеральный агент авиакомпании Руслайн
 
6° allende ed
6° allende ed6° allende ed
6° allende ed
 

Similar to May Unplugged Mobile Controls User Group

Dynamic User Interfaces for Desktop and Mobile
Dynamic User Interfaces for Desktop and MobileDynamic User Interfaces for Desktop and Mobile
Dynamic User Interfaces for Desktop and Mobile
peychevi
 
XMeeting Graphical User Interface
XMeeting Graphical User InterfaceXMeeting Graphical User Interface
XMeeting Graphical User Interface
Videoguy
 

Similar to May Unplugged Mobile Controls User Group (20)

D2 k word_format
D2 k word_formatD2 k word_format
D2 k word_format
 
DDive11 - Mobile Development For Domino
DDive11 - Mobile Development For DominoDDive11 - Mobile Development For Domino
DDive11 - Mobile Development For Domino
 
Yahoo! On Microsoft .NET 3.0 and Microsoft Expression
Yahoo! On Microsoft .NET 3.0 and Microsoft ExpressionYahoo! On Microsoft .NET 3.0 and Microsoft Expression
Yahoo! On Microsoft .NET 3.0 and Microsoft Expression
 
Tech Day 2015: A Gentle Introduction to GPS and GNATbench
Tech Day 2015: A Gentle Introduction to GPS and GNATbenchTech Day 2015: A Gentle Introduction to GPS and GNATbench
Tech Day 2015: A Gentle Introduction to GPS and GNATbench
 
Drupal7 multilingual
Drupal7 multilingualDrupal7 multilingual
Drupal7 multilingual
 
Dynamic User Interfaces for Desktop and Mobile
Dynamic User Interfaces for Desktop and MobileDynamic User Interfaces for Desktop and Mobile
Dynamic User Interfaces for Desktop and Mobile
 
React native
React nativeReact native
React native
 
Web development basics (Part-2)
Web development basics (Part-2)Web development basics (Part-2)
Web development basics (Part-2)
 
Google I/O 2019 - what's new in Android Q and Jetpack
Google I/O 2019 - what's new in Android Q and JetpackGoogle I/O 2019 - what's new in Android Q and Jetpack
Google I/O 2019 - what's new in Android Q and Jetpack
 
Features everywhere
Features everywhere Features everywhere
Features everywhere
 
WPF - the future of GUI is near
WPF - the future of GUI is nearWPF - the future of GUI is near
WPF - the future of GUI is near
 
DCEU 18: App-in-a-Box with Docker Application Packages
DCEU 18: App-in-a-Box with Docker Application PackagesDCEU 18: App-in-a-Box with Docker Application Packages
DCEU 18: App-in-a-Box with Docker Application Packages
 
XMeeting Graphical User Interface
XMeeting Graphical User InterfaceXMeeting Graphical User Interface
XMeeting Graphical User Interface
 
Make Cross-platform Mobile Apps Quickly - SIGGRAPH 2014
Make Cross-platform Mobile Apps Quickly - SIGGRAPH 2014Make Cross-platform Mobile Apps Quickly - SIGGRAPH 2014
Make Cross-platform Mobile Apps Quickly - SIGGRAPH 2014
 
The Tale of a Docker-based Continuous Delivery Pipeline by Rafe Colton (ModCl...
The Tale of a Docker-based Continuous Delivery Pipeline by Rafe Colton (ModCl...The Tale of a Docker-based Continuous Delivery Pipeline by Rafe Colton (ModCl...
The Tale of a Docker-based Continuous Delivery Pipeline by Rafe Colton (ModCl...
 
Android Developer Meetup
Android Developer MeetupAndroid Developer Meetup
Android Developer Meetup
 
Dockercon EU 2014
Dockercon EU 2014Dockercon EU 2014
Dockercon EU 2014
 
Grails beginners workshop
Grails beginners workshopGrails beginners workshop
Grails beginners workshop
 
08ui.pptx
08ui.pptx08ui.pptx
08ui.pptx
 
Tell Me Quando - Implementing Feature Flags
Tell Me Quando - Implementing Feature FlagsTell Me Quando - Implementing Feature Flags
Tell Me Quando - Implementing Feature Flags
 

More from Teamstudio

More from Teamstudio (20)

Search Terms and Design Complexity: A Tutorial Before Modernizing or Migrating
Search Terms and Design Complexity: A Tutorial Before Modernizing or MigratingSearch Terms and Design Complexity: A Tutorial Before Modernizing or Migrating
Search Terms and Design Complexity: A Tutorial Before Modernizing or Migrating
 
SmartNSF - 100% Smart - and in Color!
SmartNSF - 100% Smart - and in Color!SmartNSF - 100% Smart - and in Color!
SmartNSF - 100% Smart - and in Color!
 
Back from the Dead: When Bad Code Kills a Good Server
Back from the Dead: When Bad Code Kills a Good ServerBack from the Dead: When Bad Code Kills a Good Server
Back from the Dead: When Bad Code Kills a Good Server
 
Understand Usage with Detailed Access Information
Understand Usage with Detailed Access InformationUnderstand Usage with Detailed Access Information
Understand Usage with Detailed Access Information
 
IBM Presents the Notes Domino Roadmap and a Deep Dive into Feature Pack 8
IBM Presents the Notes Domino Roadmap and a Deep Dive into Feature Pack 8IBM Presents the Notes Domino Roadmap and a Deep Dive into Feature Pack 8
IBM Presents the Notes Domino Roadmap and a Deep Dive into Feature Pack 8
 
Marty, You're Just Not Thinking Fourth Dimensionally
Marty, You're Just Not Thinking Fourth DimensionallyMarty, You're Just Not Thinking Fourth Dimensionally
Marty, You're Just Not Thinking Fourth Dimensionally
 
IBM Presents the IBM Notes and Domino Roadmap
IBM Presents the IBM Notes and Domino RoadmapIBM Presents the IBM Notes and Domino Roadmap
IBM Presents the IBM Notes and Domino Roadmap
 
XPages and jQuery DataTables: Simplifying View Creation while Maximizing Func...
XPages and jQuery DataTables: Simplifying View Creation while Maximizing Func...XPages and jQuery DataTables: Simplifying View Creation while Maximizing Func...
XPages and jQuery DataTables: Simplifying View Creation while Maximizing Func...
 
Take a Trip Into the Forest: A Java Primer on Maps, Trees, and Collections
Take a Trip Into the Forest: A Java Primer on Maps, Trees, and Collections Take a Trip Into the Forest: A Java Primer on Maps, Trees, and Collections
Take a Trip Into the Forest: A Java Primer on Maps, Trees, and Collections
 
Expanding XPages with Bootstrap Plugins for Ultimate Usability
Expanding XPages with Bootstrap Plugins for Ultimate UsabilityExpanding XPages with Bootstrap Plugins for Ultimate Usability
Expanding XPages with Bootstrap Plugins for Ultimate Usability
 
Optimus XPages Part 2: The Deep Dive
Optimus XPages Part 2: The Deep DiveOptimus XPages Part 2: The Deep Dive
Optimus XPages Part 2: The Deep Dive
 
Getting Started with the OpenNTF Domino API
Getting Started with the OpenNTF Domino APIGetting Started with the OpenNTF Domino API
Getting Started with the OpenNTF Domino API
 
Understand the True Business Usage of Notes Applications with Usage Auditor
Understand the True Business Usage of Notes Applications with Usage AuditorUnderstand the True Business Usage of Notes Applications with Usage Auditor
Understand the True Business Usage of Notes Applications with Usage Auditor
 
Optimus XPages: An Explosion of Techniques and Best Practices
Optimus XPages: An Explosion of Techniques and Best PracticesOptimus XPages: An Explosion of Techniques and Best Practices
Optimus XPages: An Explosion of Techniques and Best Practices
 
Building Responsive Applications Using XPages
Building Responsive Applications Using XPagesBuilding Responsive Applications Using XPages
Building Responsive Applications Using XPages
 
Using Cool New Frameworks in (Mobile) Domino Apps
Using Cool New Frameworks in (Mobile) Domino AppsUsing Cool New Frameworks in (Mobile) Domino Apps
Using Cool New Frameworks in (Mobile) Domino Apps
 
Ask the XPages Experts
Ask the XPages ExpertsAsk the XPages Experts
Ask the XPages Experts
 
Everything XControls
Everything XControlsEverything XControls
Everything XControls
 
Move Your XPages Applications to the Fast Lane
Move Your XPages Applications to the Fast LaneMove Your XPages Applications to the Fast Lane
Move Your XPages Applications to the Fast Lane
 
An Introduction to the Model-View-Controller Pattern
An Introduction to the Model-View-Controller PatternAn Introduction to the Model-View-Controller Pattern
An Introduction to the Model-View-Controller Pattern
 

Recently uploaded

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Recently uploaded (20)

Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 

May Unplugged Mobile Controls User Group

  • 2. Agenda  Deep Dive  UnpDialog  UnpAlert  UnpTabbedFooter  Case Study  Extracted Design Method (OneView Example)  Q & A
  • 3. Deep Dive - UnpDialog  Problem: dialog(String); cannot be formatted
  • 4. Deep Dive - UnpDialog  UnpDialog gives full range of customization  Size, color, background, font etc
  • 5. Deep Dive - UnpDialog  Usage: 1) Drag a UnpDialog control onto your XPage 2) Complete Title and Callback custom properties 3) Drag in a label or computed text for content
  • 6. Deep Dive - UnpDialog  Usage: 4) ‘Callback’ is an optional client side JS function executed on ‘OK’ 5) To trigger, call: unp.openDialog('dialogPopup');
  • 7. Deep Dive - UnpDialog  Callback is a CSJS function:
  • 8. Deep Dive - UnpDialog  Current Disadvantages: 1. Only 1 dialog per page as ID is hard coded 2. Cannot pass arguments into function call (‘Callback’ property)
  • 9. Deep Dive - UnpDialog  OtherAdvantages: 1. Extendable and can include other controls
  • 10. Deep Dive - UnpDialog  Example: Selecting an item from a list (2 Options) 1) ComboBox/Dropdown:
  • 11. Deep Dive - UnpDialog  ComboBox/Dropdown:
  • 12. Deep Dive - UnpDialog  Do not use xp:ListBox for this:  Blank as the HTML code generated in the same as for a xp:comboBox  But no ‘selected’ attribute can be set
  • 13. Deep Dive - UnpDialog  Displayed list of items use xp:repeat and ul/li:
  • 14. Deep Dive - UnpDialog  Scrollable area inside the dialog
  • 15. Deep Dive - UnpDialog  Advantage 2 – Use SSJS (back to comboBox example)
  • 16. Deep Dive - UnpDialog  Activate via hidden button
  • 17. Deep Dive - UnpDialog  Exercise for viewer:  Apply SSJS to ul/li version  Hint use xp:panel with tagName =“li” for <li>
  • 18. Deep Dive - UnpAlert  Simpler than UnpDialog – just a message and ‘Close’ button  Drag in and complete the custom properties ‘Title’ and ‘Content’  WIP currently – will be part of Controls 3.3 release  Want to parameterize title and content so multiple alerts can be used on same page
  • 19. Deep Dive – UnpTabbedFooter  Aid with Navigation usually for large forms/high number of fields but can be used as alternative to the UnpNavigator control  Allows the compartmentalization of form ‘areas’
  • 20. Deep Dive – UnpTabbedFooter  Usage:  Drag the custom control onto your XPage and set the synctype property to point to either 'none', 'currentDB' or 'alldbs' to allow syncing the current db only (default) or all dbs on device. If set to 'none' then the sync button will not appear.  Create 'tabs' to include tappable areas in the footer for navigation purposes.Within each 'tab' you can set the icon, text, icon when tapped and the page to navigate to.  A callback client side JS function is available to perform post tap events  PostSyncTarget will navigate the user to a specified XPage after a sync has completed *  Navigation via the tabbed footer is currently performed as a full page load. * Not for MobileWeb Browser Apps – only valid for Unplugged apps
  • 21. Design Architecture – Abstracted Design  Creating a mobile design in one NSF that pulls data from other NSFs.
  • 22. Design Architecture – Abstracted Design  Set up data in a view in existing DBs  View must be common
  • 23. Design Architecture – Abstracted Design  In new ‘Design DB’:  Use data sources to external DB’s.
  • 24. Design Architecture – Abstracted Design  Use beforeRenderResponse to collate data
  • 25. Design Architecture – Abstracted Design  Use scoped var to sort data
  • 26. Design Architecture – Abstracted Design  Store results in scoped var
  • 27. Design Architecture – Abstracted Design  Use xp:repeat and Controls CSS to mimic UnpFlatView
  • 28. Design Architecture – Abstracted Design  Result…
  • 29. Design Architecture – Abstracted Design  For the form data, create the XPage content in the original DB  Use a ‘design’ XPage in the new design DB and load the data via UNID using AJAX
  • 30. Q & A  @Unp_UG  @MobileAppsRule  @mattwhite  www.Teamstudio.com/Unplugged  https://github.com/unplugged/unplugged- controls