SlideShare una empresa de Scribd logo
1 de 53
UI Directions
UI Project Areas 
● Product Features 
● New Technologies 
● Integrations 
● Refactoring/Rewrites 
● Javascript Controls
Product Features 
● Automate Enhancements 
● Storage UI 
● Internationalization (I18N)
Automate Enhancements 
Completed: 
● Domain support 
● Copy/rename Classes/Instances/Methods 
● Method (code) editor updated to full width and scrolling 
● Import/Export - select by Namespace 
Coming: 
● Import/Export - select by Class 
● Change automate URIs to allow relative or full path 
● Ideas/suggestions?
Storage UI 
● Resurrect hidden Storage tab (NetApp) w/fixes (done) 
● Rework the UI to include other types, such as EMC, 
Hitatchi, HP, etc. 
● Will require some re-design as there are a lot of 
overlapping concepts, but details will be specific to 
certain storage types
New Technologies 
● Converting all views to HAML 
● Use SASS for stylesheets 
● Using PatternFly for consistency and 
responsive design 
● Using angular.js to replace Rails RJS 
● Replacing custom VNC plugin w/noVNC
Integrations 
● Red Hat Access as a UI plugin 
o Downstream only 
o Will be the first UI plugin prototype (for up/down 
upstream) 
● Foreman 
● Others?
Refactoring / Rewrites 
● Reporting UI 
● Layouts 
o Replace DHTMLX layouts with responsive CSS 
o Get to a single, reusable layout structure 
● UI using REST API 
● Remove/replace Prototype with jQuery 
● General code clean up: service objects, presenters, 
helpers, model methods, etc
Javascript Controls 
● DHTMLX 
o Layouts, Accordions, Menus, Toolbars, Calendars, Combo, Grid 
o Currently only using controls available in the open source version, but 
would still like to get away from the GPL V2 license 
o Layouts are top priority, as they are very restrictive and sometimes 
difficult to work with 
● Upgrade trees from Dynatree to Fancytree 
● Bring jqPlot chart support (upstream) up to parity with 
flash charts (product) 
o Drill down and interactivity is not currently available upstream 
o Styling improvements
I18n
I18n 
● Choice of tools: Gettext vs. Rails I18n 
● Programming work to be done 
○ Dependencies 
○ Conversions 
○ Find translatable strings (views, controllers, models, javascript…) 
● Workflow changes 
○ Programming 
○ Release engineering
I18n Examples: usage 
_('Car') == 'Auto' 
_('not-found') == 'not-found' 
s_('Namespace|not-found') == 'not-found' 
n_('Axis','Axis',3) == 'Achsen' #German plural of Axis 
_('Hello %{name}!') % {:name => "Pete"} == 'Hello Pete!' 
d_("domainname", "string") 
D_("string") # finds 'string' in any domain
I18n Examples: rake tasks 
rake gettext:find 
rake gettext:store_model_attributes
I18n of ManageIQ: specialities 
● Dictionary class 
● Productization 
● Build automation 
● Pre-generated content
I18n: Zanata - Cooperation with translators 
● Command line tools 
https://github.com/zanata/zanata-python-client 
● Build process integration 
zanata version create 
zanata publican push 
zanata publican pull
Red Hat Access Integration 
● What it is? 
● Integration library 
https://github.com/redhataccess/redhat_access_angular_ui 
● Existing Rails project: Foreman plugin 
https://github.com/redhataccess/foreman-plugin
Angular introduction - some basics
Previous jQuery version 
# haml 
.container 
.shown-from-the-start 
.hidden-from-the-start 
%button.input-class Toggle 
# js 
$(‘.hidden-from-the-start’).hide(); // Or CSS 
$(‘.input-class’).click(function() { 
if ($(‘.shown-from-the-start’).is(‘:visible’)) { 
$(‘.shown-from-the-start’).hide(); 
$(‘.hidden-from-the-start’).show(); 
} else { 
$(‘.shown-from-the-start’).show(); 
$(‘.hidden-from-the-start’).hide(); 
} 
});
Basic Angular version 
# haml 
.container(ng-controller=”testController”) 
.shown-from-the-start(ng-show=”someMethod()”) 
.hidden-from-the-start(ng-hide=”someMethod()”) 
%button(ng-click=”toggleFormState()”) Toggle 
# js 
controller(‘testController’, [‘$scope’, 
function($scope) { 
$scope.someMethod = function() { 
return $scope.formState; 
}; 
$scope.toggleFormState = function() { 
$scope.formState = !$scope.formState; 
}; 
// Initialization stuff 
$scope.formState = true; 
}]);
ng-switch 
# haml 
.container(ng-controller=”testController”) 
.inner-container(ng-switch on=”type”) 
.one(ng-switch-when=”type1”) 
.two(ng-switch-when=”type2”) 
.three(ng-switch-when=”type3”) 
.four(ng-switch-when=”type4”) 
# js 
controller(‘testController’, [function() { 
$scope.type = ‘type2’; 
}]);
ng-model 
# haml 
.some-table 
%input.name(ng-model=”name”) 
%input.address(ng-model=”address”) 
%input.favorite-color(ng-model=”favoriteColor”) 
%button.submit-button(ng-click=”submitIt()”) 
# js 
$scope.submitIt = function() { 
var theData = { 
name: $scope.name, 
address: $scope.address 
}; 
$http.post(‘/the_url’, theData).success(function() { 
console.log(‘hooray!’); 
}); 
};
ng-model with ng-switch 
# haml 
.some-table 
.container(ng-switch on=”favoriteColorShade”) 
%select(ng-model=”favoriteColorShade”) 
%option Light 
%option Dark 
.one(ng-switch-when=”Light”) 
%input(type=”radio”) Yellow 
%input(type=”radio”) Orange 
%input(type=”radio”) Pink 
.two(ng-switch-when=”Dark”) 
%input(type=”radio”) Brick Red 
%input(type=”radio”) Brown 
%input(type=”radio”) Navy
ng-change 
# haml 
.some-table 
.container(ng-switch on=”favoriteColorShade”) 
%select(ng-change=”getColorOptions()”) 
%option Light 
%option Dark 
%select(ng-options=”color.name for color in 
colorList”) 
# js 
$scope.getColorOptions = function() { 
$scope.colorList = []; 
if ($scope.favoriteColorShade === ‘Light’) { 
$scope.colorList.push({name: ‘yellow’}); 
$scope.colorList.push({name: ‘orange’}); 
$scope.colorList.push({name: ‘pink’}); 
} else { 
$scope.colorList.push({name: ‘brick red’}); 
$scope.colorList.push({name: ‘brown’}); 
$scope.colorList.push({name: ‘blue’}); 
} 
};
ng-change
Bindings {{, }} 
# haml 
.some-table 
.message {{message}} 
%input.name(ng-model=”name”) 
%input.address(ng-model=”address”) 
%input.favorite-color(ng-model=”favoriteColor”) 
%button.submit-button(ng-click=”submitIt()”) 
# js 
$scope.submitIt = function() { 
var theData = { 
name: $scope.name, 
address: $scope.address 
}; 
$http.post(‘/the_url’, theData).success(function() { 
$scope.message = ‘Your favorite color is blue 
now!’; 
$scope.favoriteColor = ‘blue’; 
}); 
};
Bindings {{, }} 
# haml 
.some-table 
.message {{messageMethod}} 
%input.name(ng-model=”name”) 
# js 
$scope.messageMethod = function() { 
if ($scope.name === ‘Erik’) { 
return ‘Hello World!’; 
} else { 
return ‘Greetings World!’; 
}; 
};
Services 
# js - service 
angularApp.service(‘myCoolService’, function() { 
this.doSomethingCool = function() { 
// does something cool 
}; 
}); 
# js - controller 
controller(‘testController’, [‘$http’, ‘$scope’, 
‘myCoolService’, function($http, $scope, 
myCoolService) { 
$scope.submitIt = function() { 
myCoolService.doSomethingCool(); 
// Now do the boring stuff like submitting 
// which still uses a service. 
$http.post(‘/the_url’, {}).success(function() { 
console.log(‘hooray!’); 
}); 
}; 
}]);
Styling, Layouts, and other fun stuff
Red Hat Common User Experience (RCUE) 
“... created to promote design commonality 
and improved user experience across 
enterprise IT products and applications.”
Patternfly
Patternfly (Implemented)
Patternfly Glyphicons 
● based on FontAwesome, IcoMoon, Bootstrap and Custom-made glyphicons 
● two dimensional and monochromatic 
● vector-based 
● styled with css
Fancytree (sequel of DynaTree 1.x) 
'glyph' extension for scalable vector icons
Patternfly (future)
Patternfly Grid System (Responsive layout)
Layout 
Challenges
Old layout - HTML 
Fixed 
Width 
Flexible Width
Flexible Width 
Fixed 
Width 
Old layout - HTML
DHTMLX Explorer Layout
DHTMLX Explorer Outer Layout 
A 
B 
C
DHTMLX Explorer Center Layout 
A B
DHTMLX Explorer Right Cell Layout 
A 
B 
C
Column 1 Column 2 Column 3 
Widget 1 
Widget 2 
Widget 3 
Widget 1 Widget 1 
Widget 2 
Current Dashboard Configuration
1600px-
1280-1600px
- 1024px
- 1024px Navigation Dropdown
Fun Stuff
Thumbnails in Single Quadrant Mode (Heat Map)
Grouped by Region
Configurable Thumbnails
Questions?

Más contenido relacionado

La actualidad más candente

Sprint 35 review
Sprint 35 reviewSprint 35 review
Sprint 35 reviewManageIQ
 
Sprint 43 Review
Sprint 43 ReviewSprint 43 Review
Sprint 43 ReviewManageIQ
 
Sprint 45 review
Sprint 45 reviewSprint 45 review
Sprint 45 reviewManageIQ
 
Sprint 16 report
Sprint 16 reportSprint 16 report
Sprint 16 reportManageIQ
 
Sprint 50 review
Sprint 50 reviewSprint 50 review
Sprint 50 reviewManageIQ
 
Sprint 44 review
Sprint 44 reviewSprint 44 review
Sprint 44 reviewManageIQ
 
Sprint 163
Sprint 163Sprint 163
Sprint 163ManageIQ
 
Sprint 182
Sprint 182Sprint 182
Sprint 182ManageIQ
 
Sprint 183
Sprint 183Sprint 183
Sprint 183ManageIQ
 
Sprint 172
Sprint 172Sprint 172
Sprint 172ManageIQ
 
Sprint 176
Sprint 176Sprint 176
Sprint 176ManageIQ
 
Sprint 175
Sprint 175Sprint 175
Sprint 175ManageIQ
 
Sprint 181
Sprint 181Sprint 181
Sprint 181ManageIQ
 

La actualidad más candente (20)

Sprint 55
Sprint 55Sprint 55
Sprint 55
 
Sprint 35 review
Sprint 35 reviewSprint 35 review
Sprint 35 review
 
Sprint 43 Review
Sprint 43 ReviewSprint 43 Review
Sprint 43 Review
 
Sprint 53
Sprint 53Sprint 53
Sprint 53
 
Sprint 45 review
Sprint 45 reviewSprint 45 review
Sprint 45 review
 
Sprint 57
Sprint 57Sprint 57
Sprint 57
 
Sprint 16 report
Sprint 16 reportSprint 16 report
Sprint 16 report
 
Sprint 58
Sprint 58Sprint 58
Sprint 58
 
Sprint 50 review
Sprint 50 reviewSprint 50 review
Sprint 50 review
 
Sprint 88
Sprint 88Sprint 88
Sprint 88
 
Sprint 44 review
Sprint 44 reviewSprint 44 review
Sprint 44 review
 
Sprint 60
Sprint 60Sprint 60
Sprint 60
 
Sprint 163
Sprint 163Sprint 163
Sprint 163
 
Sprint 182
Sprint 182Sprint 182
Sprint 182
 
Sprint 183
Sprint 183Sprint 183
Sprint 183
 
Sprint 172
Sprint 172Sprint 172
Sprint 172
 
Sprint 176
Sprint 176Sprint 176
Sprint 176
 
Sprint 180
Sprint 180Sprint 180
Sprint 180
 
Sprint 175
Sprint 175Sprint 175
Sprint 175
 
Sprint 181
Sprint 181Sprint 181
Sprint 181
 

Destacado

OpenNMS - Jeff Gehlbach - ManageIQ Design Summit 2016
OpenNMS - Jeff Gehlbach - ManageIQ Design Summit 2016OpenNMS - Jeff Gehlbach - ManageIQ Design Summit 2016
OpenNMS - Jeff Gehlbach - ManageIQ Design Summit 2016ManageIQ
 
Samsung presentation
Samsung presentationSamsung presentation
Samsung presentationMohd Tayyab
 
Sebastien goasguen cloud stack and docker
Sebastien goasguen   cloud stack and dockerSebastien goasguen   cloud stack and docker
Sebastien goasguen cloud stack and dockerShapeBlue
 
OpenCloudConf: It takes an (Open Source) Village to Build a Cloud
OpenCloudConf: It takes an (Open Source) Village to Build a CloudOpenCloudConf: It takes an (Open Source) Village to Build a Cloud
OpenCloudConf: It takes an (Open Source) Village to Build a CloudMark Hinkle
 
Satellite 6 - Pupet Introduction
Satellite 6 - Pupet IntroductionSatellite 6 - Pupet Introduction
Satellite 6 - Pupet IntroductionMichael Lessard
 
Apache CXF New Directions in Integration
Apache CXF New Directions in IntegrationApache CXF New Directions in Integration
Apache CXF New Directions in IntegrationDaniel Kulp
 
OpenNMS Reporting - Enhancement
OpenNMS Reporting - EnhancementOpenNMS Reporting - Enhancement
OpenNMS Reporting - EnhancementRonny
 
DevOps, A path to Enterprises to Adopt [Decoding DevOps Conference - InfoSep...
DevOps, A path to Enterprises to Adopt  [Decoding DevOps Conference - InfoSep...DevOps, A path to Enterprises to Adopt  [Decoding DevOps Conference - InfoSep...
DevOps, A path to Enterprises to Adopt [Decoding DevOps Conference - InfoSep...InfoSeption
 
OpenStack and CloudForms Do's and Dont's
OpenStack and CloudForms Do's and Dont'sOpenStack and CloudForms Do's and Dont's
OpenStack and CloudForms Do's and Dont'sFrederik Bijlsma
 
Replication - Nick Carboni - ManageIQ Design Summit 2016
Replication - Nick Carboni - ManageIQ Design Summit 2016Replication - Nick Carboni - ManageIQ Design Summit 2016
Replication - Nick Carboni - ManageIQ Design Summit 2016ManageIQ
 
Managed Services - Mike Hulsman - ManageIQ Design Summit 2016
Managed Services - Mike Hulsman - ManageIQ Design Summit 2016Managed Services - Mike Hulsman - ManageIQ Design Summit 2016
Managed Services - Mike Hulsman - ManageIQ Design Summit 2016ManageIQ
 
OpenStack Hybrid Cloud Management and Orchestration - James Bond
OpenStack Hybrid Cloud Management and Orchestration - James BondOpenStack Hybrid Cloud Management and Orchestration - James Bond
OpenStack Hybrid Cloud Management and Orchestration - James Bondscoopnewsgroup
 
Introduction to OpenNMS
Introduction to OpenNMSIntroduction to OpenNMS
Introduction to OpenNMSPOSSCON
 
Building Enterprise Clouds - Key Considerations and Strategies - RED HAT
Building Enterprise Clouds - Key Considerations and Strategies - RED HATBuilding Enterprise Clouds - Key Considerations and Strategies - RED HAT
Building Enterprise Clouds - Key Considerations and Strategies - RED HATFadi Semaan
 
Chef - Configuration Management for the Cloud
Chef - Configuration Management for the CloudChef - Configuration Management for the Cloud
Chef - Configuration Management for the CloudJames Casey
 
RHTE2015_CloudForms_OpenStack
RHTE2015_CloudForms_OpenStackRHTE2015_CloudForms_OpenStack
RHTE2015_CloudForms_OpenStackJerome Marc
 
A (fun!) Comparison of Docker Vulnerability Scanners
A (fun!) Comparison of Docker Vulnerability ScannersA (fun!) Comparison of Docker Vulnerability Scanners
A (fun!) Comparison of Docker Vulnerability ScannersJohn Kinsella
 
OpenSCAP Overview(security scanning for docker image and container)
OpenSCAP Overview(security scanning for docker image and container)OpenSCAP Overview(security scanning for docker image and container)
OpenSCAP Overview(security scanning for docker image and container)Jooho Lee
 

Destacado (20)

OpenNMS - Jeff Gehlbach - ManageIQ Design Summit 2016
OpenNMS - Jeff Gehlbach - ManageIQ Design Summit 2016OpenNMS - Jeff Gehlbach - ManageIQ Design Summit 2016
OpenNMS - Jeff Gehlbach - ManageIQ Design Summit 2016
 
Samsung presentation
Samsung presentationSamsung presentation
Samsung presentation
 
Sebastien goasguen cloud stack and docker
Sebastien goasguen   cloud stack and dockerSebastien goasguen   cloud stack and docker
Sebastien goasguen cloud stack and docker
 
OpenCloudConf: It takes an (Open Source) Village to Build a Cloud
OpenCloudConf: It takes an (Open Source) Village to Build a CloudOpenCloudConf: It takes an (Open Source) Village to Build a Cloud
OpenCloudConf: It takes an (Open Source) Village to Build a Cloud
 
Satellite 6 - Pupet Introduction
Satellite 6 - Pupet IntroductionSatellite 6 - Pupet Introduction
Satellite 6 - Pupet Introduction
 
Apache CXF New Directions in Integration
Apache CXF New Directions in IntegrationApache CXF New Directions in Integration
Apache CXF New Directions in Integration
 
OpenNMS Reporting - Enhancement
OpenNMS Reporting - EnhancementOpenNMS Reporting - Enhancement
OpenNMS Reporting - Enhancement
 
DevOps, A path to Enterprises to Adopt [Decoding DevOps Conference - InfoSep...
DevOps, A path to Enterprises to Adopt  [Decoding DevOps Conference - InfoSep...DevOps, A path to Enterprises to Adopt  [Decoding DevOps Conference - InfoSep...
DevOps, A path to Enterprises to Adopt [Decoding DevOps Conference - InfoSep...
 
OpenStack and CloudForms Do's and Dont's
OpenStack and CloudForms Do's and Dont'sOpenStack and CloudForms Do's and Dont's
OpenStack and CloudForms Do's and Dont's
 
Replication - Nick Carboni - ManageIQ Design Summit 2016
Replication - Nick Carboni - ManageIQ Design Summit 2016Replication - Nick Carboni - ManageIQ Design Summit 2016
Replication - Nick Carboni - ManageIQ Design Summit 2016
 
Intro to-puppet
Intro to-puppetIntro to-puppet
Intro to-puppet
 
Managed Services - Mike Hulsman - ManageIQ Design Summit 2016
Managed Services - Mike Hulsman - ManageIQ Design Summit 2016Managed Services - Mike Hulsman - ManageIQ Design Summit 2016
Managed Services - Mike Hulsman - ManageIQ Design Summit 2016
 
OpenStack Hybrid Cloud Management and Orchestration - James Bond
OpenStack Hybrid Cloud Management and Orchestration - James BondOpenStack Hybrid Cloud Management and Orchestration - James Bond
OpenStack Hybrid Cloud Management and Orchestration - James Bond
 
Introduction to OpenNMS
Introduction to OpenNMSIntroduction to OpenNMS
Introduction to OpenNMS
 
Building Enterprise Clouds - Key Considerations and Strategies - RED HAT
Building Enterprise Clouds - Key Considerations and Strategies - RED HATBuilding Enterprise Clouds - Key Considerations and Strategies - RED HAT
Building Enterprise Clouds - Key Considerations and Strategies - RED HAT
 
Chef - Configuration Management for the Cloud
Chef - Configuration Management for the CloudChef - Configuration Management for the Cloud
Chef - Configuration Management for the Cloud
 
Meetup
MeetupMeetup
Meetup
 
RHTE2015_CloudForms_OpenStack
RHTE2015_CloudForms_OpenStackRHTE2015_CloudForms_OpenStack
RHTE2015_CloudForms_OpenStack
 
A (fun!) Comparison of Docker Vulnerability Scanners
A (fun!) Comparison of Docker Vulnerability ScannersA (fun!) Comparison of Docker Vulnerability Scanners
A (fun!) Comparison of Docker Vulnerability Scanners
 
OpenSCAP Overview(security scanning for docker image and container)
OpenSCAP Overview(security scanning for docker image and container)OpenSCAP Overview(security scanning for docker image and container)
OpenSCAP Overview(security scanning for docker image and container)
 

Similar a Design Summit - UI Roadmap - Dan Clarizio, Martin Povolny

How AngularJS Embraced Traditional Design Patterns
How AngularJS Embraced Traditional Design PatternsHow AngularJS Embraced Traditional Design Patterns
How AngularJS Embraced Traditional Design PatternsRan Mizrahi
 
Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018Loiane Groner
 
Javascript first-class citizenery
Javascript first-class citizeneryJavascript first-class citizenery
Javascript first-class citizenerytoddbr
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...Fabio Franzini
 
HTML5 for the Silverlight Guy
HTML5 for the Silverlight GuyHTML5 for the Silverlight Guy
HTML5 for the Silverlight GuyDavid Padbury
 
Building End to-End Web Apps Using TypeScript
Building End to-End Web Apps Using TypeScriptBuilding End to-End Web Apps Using TypeScript
Building End to-End Web Apps Using TypeScriptGil Fink
 
Building Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJSBuilding Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJSAntonio Peric-Mazar
 
Backbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVCBackbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVCpootsbook
 
Reactive Type safe Webcomponents with skateJS
Reactive Type safe Webcomponents with skateJSReactive Type safe Webcomponents with skateJS
Reactive Type safe Webcomponents with skateJSMartin Hochel
 
Android Best Practices
Android Best PracticesAndroid Best Practices
Android Best PracticesYekmer Simsek
 
jQuery Features to Avoid
jQuery Features to AvoidjQuery Features to Avoid
jQuery Features to Avoiddmethvin
 
SproutCore and the Future of Web Apps
SproutCore and the Future of Web AppsSproutCore and the Future of Web Apps
SproutCore and the Future of Web AppsMike Subelsky
 

Similar a Design Summit - UI Roadmap - Dan Clarizio, Martin Povolny (20)

AngularJS Workshop
AngularJS WorkshopAngularJS Workshop
AngularJS Workshop
 
Gwt.create
Gwt.createGwt.create
Gwt.create
 
mobl
moblmobl
mobl
 
How AngularJS Embraced Traditional Design Patterns
How AngularJS Embraced Traditional Design PatternsHow AngularJS Embraced Traditional Design Patterns
How AngularJS Embraced Traditional Design Patterns
 
Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018
 
GWT Extreme!
GWT Extreme!GWT Extreme!
GWT Extreme!
 
Javascript first-class citizenery
Javascript first-class citizeneryJavascript first-class citizenery
Javascript first-class citizenery
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
 
Introduction to angular js
Introduction to angular jsIntroduction to angular js
Introduction to angular js
 
JavaScript Core
JavaScript CoreJavaScript Core
JavaScript Core
 
HTML5 for the Silverlight Guy
HTML5 for the Silverlight GuyHTML5 for the Silverlight Guy
HTML5 for the Silverlight Guy
 
Angular js
Angular jsAngular js
Angular js
 
Building End to-End Web Apps Using TypeScript
Building End to-End Web Apps Using TypeScriptBuilding End to-End Web Apps Using TypeScript
Building End to-End Web Apps Using TypeScript
 
Building Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJSBuilding Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJS
 
Angularjs
AngularjsAngularjs
Angularjs
 
Backbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVCBackbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVC
 
Reactive Type safe Webcomponents with skateJS
Reactive Type safe Webcomponents with skateJSReactive Type safe Webcomponents with skateJS
Reactive Type safe Webcomponents with skateJS
 
Android Best Practices
Android Best PracticesAndroid Best Practices
Android Best Practices
 
jQuery Features to Avoid
jQuery Features to AvoidjQuery Features to Avoid
jQuery Features to Avoid
 
SproutCore and the Future of Web Apps
SproutCore and the Future of Web AppsSproutCore and the Future of Web Apps
SproutCore and the Future of Web Apps
 

Más de ManageIQ

ManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ
 
ManageIQ - Sprint 235 Review - Slide Deck
ManageIQ - Sprint 235 Review - Slide DeckManageIQ - Sprint 235 Review - Slide Deck
ManageIQ - Sprint 235 Review - Slide DeckManageIQ
 
ManageIQ - Sprint 234 Review - Slide Deck
ManageIQ - Sprint 234 Review - Slide DeckManageIQ - Sprint 234 Review - Slide Deck
ManageIQ - Sprint 234 Review - Slide DeckManageIQ
 
ManageIQ - Sprint 233 Review - Slide Deck
ManageIQ - Sprint 233 Review - Slide DeckManageIQ - Sprint 233 Review - Slide Deck
ManageIQ - Sprint 233 Review - Slide DeckManageIQ
 
ManageIQ - Sprint 232 Review - Slide Deck
ManageIQ - Sprint 232 Review - Slide DeckManageIQ - Sprint 232 Review - Slide Deck
ManageIQ - Sprint 232 Review - Slide DeckManageIQ
 
ManageIQ - Sprint 231 Review - Slide Deck
ManageIQ - Sprint 231 Review - Slide DeckManageIQ - Sprint 231 Review - Slide Deck
ManageIQ - Sprint 231 Review - Slide DeckManageIQ
 
ManageIQ - Sprint 230 Review - Slide Deck
ManageIQ - Sprint 230 Review - Slide DeckManageIQ - Sprint 230 Review - Slide Deck
ManageIQ - Sprint 230 Review - Slide DeckManageIQ
 
ManageIQ - Sprint 229 Review - Slide Deck
ManageIQ - Sprint 229 Review - Slide DeckManageIQ - Sprint 229 Review - Slide Deck
ManageIQ - Sprint 229 Review - Slide DeckManageIQ
 
ManageIQ - Sprint 228 Review - Slide Deck
ManageIQ - Sprint 228 Review - Slide DeckManageIQ - Sprint 228 Review - Slide Deck
ManageIQ - Sprint 228 Review - Slide DeckManageIQ
 
Sprint 227
Sprint 227Sprint 227
Sprint 227ManageIQ
 
Sprint 226
Sprint 226Sprint 226
Sprint 226ManageIQ
 
Sprint 225
Sprint 225Sprint 225
Sprint 225ManageIQ
 
Sprint 224
Sprint 224Sprint 224
Sprint 224ManageIQ
 
Sprint 223
Sprint 223Sprint 223
Sprint 223ManageIQ
 
Sprint 222
Sprint 222Sprint 222
Sprint 222ManageIQ
 
Sprint 221
Sprint 221Sprint 221
Sprint 221ManageIQ
 
Sprint 220
Sprint 220Sprint 220
Sprint 220ManageIQ
 
Sprint 219
Sprint 219Sprint 219
Sprint 219ManageIQ
 
Sprint 218
Sprint 218Sprint 218
Sprint 218ManageIQ
 
Sprint 217
Sprint 217Sprint 217
Sprint 217ManageIQ
 

Más de ManageIQ (20)

ManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide Deck
 
ManageIQ - Sprint 235 Review - Slide Deck
ManageIQ - Sprint 235 Review - Slide DeckManageIQ - Sprint 235 Review - Slide Deck
ManageIQ - Sprint 235 Review - Slide Deck
 
ManageIQ - Sprint 234 Review - Slide Deck
ManageIQ - Sprint 234 Review - Slide DeckManageIQ - Sprint 234 Review - Slide Deck
ManageIQ - Sprint 234 Review - Slide Deck
 
ManageIQ - Sprint 233 Review - Slide Deck
ManageIQ - Sprint 233 Review - Slide DeckManageIQ - Sprint 233 Review - Slide Deck
ManageIQ - Sprint 233 Review - Slide Deck
 
ManageIQ - Sprint 232 Review - Slide Deck
ManageIQ - Sprint 232 Review - Slide DeckManageIQ - Sprint 232 Review - Slide Deck
ManageIQ - Sprint 232 Review - Slide Deck
 
ManageIQ - Sprint 231 Review - Slide Deck
ManageIQ - Sprint 231 Review - Slide DeckManageIQ - Sprint 231 Review - Slide Deck
ManageIQ - Sprint 231 Review - Slide Deck
 
ManageIQ - Sprint 230 Review - Slide Deck
ManageIQ - Sprint 230 Review - Slide DeckManageIQ - Sprint 230 Review - Slide Deck
ManageIQ - Sprint 230 Review - Slide Deck
 
ManageIQ - Sprint 229 Review - Slide Deck
ManageIQ - Sprint 229 Review - Slide DeckManageIQ - Sprint 229 Review - Slide Deck
ManageIQ - Sprint 229 Review - Slide Deck
 
ManageIQ - Sprint 228 Review - Slide Deck
ManageIQ - Sprint 228 Review - Slide DeckManageIQ - Sprint 228 Review - Slide Deck
ManageIQ - Sprint 228 Review - Slide Deck
 
Sprint 227
Sprint 227Sprint 227
Sprint 227
 
Sprint 226
Sprint 226Sprint 226
Sprint 226
 
Sprint 225
Sprint 225Sprint 225
Sprint 225
 
Sprint 224
Sprint 224Sprint 224
Sprint 224
 
Sprint 223
Sprint 223Sprint 223
Sprint 223
 
Sprint 222
Sprint 222Sprint 222
Sprint 222
 
Sprint 221
Sprint 221Sprint 221
Sprint 221
 
Sprint 220
Sprint 220Sprint 220
Sprint 220
 
Sprint 219
Sprint 219Sprint 219
Sprint 219
 
Sprint 218
Sprint 218Sprint 218
Sprint 218
 
Sprint 217
Sprint 217Sprint 217
Sprint 217
 

Último

Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 

Último (20)

Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 

Design Summit - UI Roadmap - Dan Clarizio, Martin Povolny

  • 2. UI Project Areas ● Product Features ● New Technologies ● Integrations ● Refactoring/Rewrites ● Javascript Controls
  • 3. Product Features ● Automate Enhancements ● Storage UI ● Internationalization (I18N)
  • 4. Automate Enhancements Completed: ● Domain support ● Copy/rename Classes/Instances/Methods ● Method (code) editor updated to full width and scrolling ● Import/Export - select by Namespace Coming: ● Import/Export - select by Class ● Change automate URIs to allow relative or full path ● Ideas/suggestions?
  • 5. Storage UI ● Resurrect hidden Storage tab (NetApp) w/fixes (done) ● Rework the UI to include other types, such as EMC, Hitatchi, HP, etc. ● Will require some re-design as there are a lot of overlapping concepts, but details will be specific to certain storage types
  • 6. New Technologies ● Converting all views to HAML ● Use SASS for stylesheets ● Using PatternFly for consistency and responsive design ● Using angular.js to replace Rails RJS ● Replacing custom VNC plugin w/noVNC
  • 7. Integrations ● Red Hat Access as a UI plugin o Downstream only o Will be the first UI plugin prototype (for up/down upstream) ● Foreman ● Others?
  • 8. Refactoring / Rewrites ● Reporting UI ● Layouts o Replace DHTMLX layouts with responsive CSS o Get to a single, reusable layout structure ● UI using REST API ● Remove/replace Prototype with jQuery ● General code clean up: service objects, presenters, helpers, model methods, etc
  • 9. Javascript Controls ● DHTMLX o Layouts, Accordions, Menus, Toolbars, Calendars, Combo, Grid o Currently only using controls available in the open source version, but would still like to get away from the GPL V2 license o Layouts are top priority, as they are very restrictive and sometimes difficult to work with ● Upgrade trees from Dynatree to Fancytree ● Bring jqPlot chart support (upstream) up to parity with flash charts (product) o Drill down and interactivity is not currently available upstream o Styling improvements
  • 10. I18n
  • 11. I18n ● Choice of tools: Gettext vs. Rails I18n ● Programming work to be done ○ Dependencies ○ Conversions ○ Find translatable strings (views, controllers, models, javascript…) ● Workflow changes ○ Programming ○ Release engineering
  • 12. I18n Examples: usage _('Car') == 'Auto' _('not-found') == 'not-found' s_('Namespace|not-found') == 'not-found' n_('Axis','Axis',3) == 'Achsen' #German plural of Axis _('Hello %{name}!') % {:name => "Pete"} == 'Hello Pete!' d_("domainname", "string") D_("string") # finds 'string' in any domain
  • 13. I18n Examples: rake tasks rake gettext:find rake gettext:store_model_attributes
  • 14. I18n of ManageIQ: specialities ● Dictionary class ● Productization ● Build automation ● Pre-generated content
  • 15. I18n: Zanata - Cooperation with translators ● Command line tools https://github.com/zanata/zanata-python-client ● Build process integration zanata version create zanata publican push zanata publican pull
  • 16. Red Hat Access Integration ● What it is? ● Integration library https://github.com/redhataccess/redhat_access_angular_ui ● Existing Rails project: Foreman plugin https://github.com/redhataccess/foreman-plugin
  • 17. Angular introduction - some basics
  • 18. Previous jQuery version # haml .container .shown-from-the-start .hidden-from-the-start %button.input-class Toggle # js $(‘.hidden-from-the-start’).hide(); // Or CSS $(‘.input-class’).click(function() { if ($(‘.shown-from-the-start’).is(‘:visible’)) { $(‘.shown-from-the-start’).hide(); $(‘.hidden-from-the-start’).show(); } else { $(‘.shown-from-the-start’).show(); $(‘.hidden-from-the-start’).hide(); } });
  • 19. Basic Angular version # haml .container(ng-controller=”testController”) .shown-from-the-start(ng-show=”someMethod()”) .hidden-from-the-start(ng-hide=”someMethod()”) %button(ng-click=”toggleFormState()”) Toggle # js controller(‘testController’, [‘$scope’, function($scope) { $scope.someMethod = function() { return $scope.formState; }; $scope.toggleFormState = function() { $scope.formState = !$scope.formState; }; // Initialization stuff $scope.formState = true; }]);
  • 20. ng-switch # haml .container(ng-controller=”testController”) .inner-container(ng-switch on=”type”) .one(ng-switch-when=”type1”) .two(ng-switch-when=”type2”) .three(ng-switch-when=”type3”) .four(ng-switch-when=”type4”) # js controller(‘testController’, [function() { $scope.type = ‘type2’; }]);
  • 21. ng-model # haml .some-table %input.name(ng-model=”name”) %input.address(ng-model=”address”) %input.favorite-color(ng-model=”favoriteColor”) %button.submit-button(ng-click=”submitIt()”) # js $scope.submitIt = function() { var theData = { name: $scope.name, address: $scope.address }; $http.post(‘/the_url’, theData).success(function() { console.log(‘hooray!’); }); };
  • 22. ng-model with ng-switch # haml .some-table .container(ng-switch on=”favoriteColorShade”) %select(ng-model=”favoriteColorShade”) %option Light %option Dark .one(ng-switch-when=”Light”) %input(type=”radio”) Yellow %input(type=”radio”) Orange %input(type=”radio”) Pink .two(ng-switch-when=”Dark”) %input(type=”radio”) Brick Red %input(type=”radio”) Brown %input(type=”radio”) Navy
  • 23. ng-change # haml .some-table .container(ng-switch on=”favoriteColorShade”) %select(ng-change=”getColorOptions()”) %option Light %option Dark %select(ng-options=”color.name for color in colorList”) # js $scope.getColorOptions = function() { $scope.colorList = []; if ($scope.favoriteColorShade === ‘Light’) { $scope.colorList.push({name: ‘yellow’}); $scope.colorList.push({name: ‘orange’}); $scope.colorList.push({name: ‘pink’}); } else { $scope.colorList.push({name: ‘brick red’}); $scope.colorList.push({name: ‘brown’}); $scope.colorList.push({name: ‘blue’}); } };
  • 25. Bindings {{, }} # haml .some-table .message {{message}} %input.name(ng-model=”name”) %input.address(ng-model=”address”) %input.favorite-color(ng-model=”favoriteColor”) %button.submit-button(ng-click=”submitIt()”) # js $scope.submitIt = function() { var theData = { name: $scope.name, address: $scope.address }; $http.post(‘/the_url’, theData).success(function() { $scope.message = ‘Your favorite color is blue now!’; $scope.favoriteColor = ‘blue’; }); };
  • 26. Bindings {{, }} # haml .some-table .message {{messageMethod}} %input.name(ng-model=”name”) # js $scope.messageMethod = function() { if ($scope.name === ‘Erik’) { return ‘Hello World!’; } else { return ‘Greetings World!’; }; };
  • 27. Services # js - service angularApp.service(‘myCoolService’, function() { this.doSomethingCool = function() { // does something cool }; }); # js - controller controller(‘testController’, [‘$http’, ‘$scope’, ‘myCoolService’, function($http, $scope, myCoolService) { $scope.submitIt = function() { myCoolService.doSomethingCool(); // Now do the boring stuff like submitting // which still uses a service. $http.post(‘/the_url’, {}).success(function() { console.log(‘hooray!’); }); }; }]);
  • 28. Styling, Layouts, and other fun stuff
  • 29.
  • 30. Red Hat Common User Experience (RCUE) “... created to promote design commonality and improved user experience across enterprise IT products and applications.”
  • 33. Patternfly Glyphicons ● based on FontAwesome, IcoMoon, Bootstrap and Custom-made glyphicons ● two dimensional and monochromatic ● vector-based ● styled with css
  • 34. Fancytree (sequel of DynaTree 1.x) 'glyph' extension for scalable vector icons
  • 36. Patternfly Grid System (Responsive layout)
  • 38. Old layout - HTML Fixed Width Flexible Width
  • 39. Flexible Width Fixed Width Old layout - HTML
  • 41. DHTMLX Explorer Outer Layout A B C
  • 43. DHTMLX Explorer Right Cell Layout A B C
  • 44. Column 1 Column 2 Column 3 Widget 1 Widget 2 Widget 3 Widget 1 Widget 1 Widget 2 Current Dashboard Configuration
  • 50. Thumbnails in Single Quadrant Mode (Heat Map)