SlideShare ist ein Scribd-Unternehmen logo
1 von 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?

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (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
 

Andere mochten auch

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
 

Andere mochten auch (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)
 

Ähnlich wie 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
 

Ähnlich wie 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
 

Mehr von ManageIQ

Mehr von 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
 

Kürzlich hochgeladen

EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 

Kürzlich hochgeladen (20)

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
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
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)
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
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
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
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?
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
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
 

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)