SlideShare uma empresa 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?

Mais conteúdo relacionado

Mais procurados

Mais procurados (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
 

Destaque

OpenNMS Reporting - Enhancement
OpenNMS Reporting - EnhancementOpenNMS Reporting - Enhancement
OpenNMS Reporting - Enhancement
Ronny
 
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
scoopnewsgroup
 
RHTE2015_CloudForms_OpenStack
RHTE2015_CloudForms_OpenStackRHTE2015_CloudForms_OpenStack
RHTE2015_CloudForms_OpenStack
Jerome Marc
 

Destaque (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)
 

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

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
 
Android Best Practices
Android Best PracticesAndroid Best Practices
Android Best Practices
Yekmer Simsek
 

Semelhante 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
 

Mais de ManageIQ

Mais 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

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Último (20)

AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
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
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
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, ...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
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...
 

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)