From 49b620ecd5c6d0674d4b2701c752a02a3d864b2e Mon Sep 17 00:00:00 2001 From: lphiri Date: Sun, 25 May 2014 13:50:24 -0400 Subject: [PATCH] UX fixes as well as api session timeout handling fix --- .../redhat_access/redhat_access.module.js | 92 +- .../redhat_access/attachments_controller.rb | 4 + .../redhat_access/configuration_controller.rb | 5 + .../redhat_access/logs_controller.rb | 4 + .../redhat_access/index.html.erb | 4 + redhat-access/lib/redhat_access/version.rb | 2 +- redhat-access/redhat_access.gemspec | 1 + .../rubygem-foreman-redhat_access.spec | 6 +- .../redhat_access/redhat_access_angular_ui.js | 1474 +++++++++-------- .../redhat_access_angular_ui.css | 2 +- 10 files changed, 889 insertions(+), 705 deletions(-) diff --git a/redhat-access/app/assets/javascripts/redhat_access/redhat_access.module.js b/redhat-access/app/assets/javascripts/redhat_access/redhat_access.module.js index 896122f..8610e07 100644 --- a/redhat-access/app/assets/javascripts/redhat_access/redhat_access.module.js +++ b/redhat-access/app/assets/javascripts/redhat_access/redhat_access.module.js @@ -32,7 +32,22 @@ angular.module('RedhatAccess', [ $httpProvider.defaults.headers.common = { 'X-CSRF-TOKEN': $('meta[name=csrf-token]').attr('content') }; - + var authInteceptor = ['$q', + function ($q) { + return { + 'response': function (response) { + return response; + }, + 'responseError': function (rejection) { + if (rejection.status === 401) { + location.reload(); + } + return $q.reject(rejection); + } + }; + } + ]; + $httpProvider.interceptors.push(authInteceptor); } ]).run(['TITLE_VIEW_CONFIG', '$http', 'securityService', 'hideMachinesDropdown', 'NEW_DEFAULTS', @@ -41,44 +56,43 @@ angular.module('RedhatAccess', [ hideMachinesDropdown.value = true; NEW_DEFAULTS.product = "Red Hat Satellite or Proxy"; //TODO read from server config NEW_DEFAULTS.version = "6.0 Beta"; //TODO read from server config - $http({ - method: 'GET', - url: 'configuration' - }). - success(function (data, status, headers, config) { - if (data) { - if (data.strataHostName) { - strata.setStrataHostname(data.strataHostName); - } else { - console.log("Invalid configuration object " + data); - } - if (data.strataClientId) { - strata.setRedhatClientID(data.strataClientId); - } else { - strata.setRedhatClientID("foreman-strata-client"); - console.log("Invalid configuration object " + data); - } - } - securityService.validateLogin(false).then( - function (authedUser) { - console.log("logged in user is " + authedUser) - }, - function (error) { - console.log("Unable to get user credentials"); - }); - }). - error(function (data, status, headers, config) { - console.log("Failed to read app configuration"); - strata.setRedhatClientID("foreman-strata-client"); - securityService.validateLogin(false).then( - function (authedUser) { - console.log("logged in user is " + authedUser) - }, - function (error) { - console.log("Unable to get user credentials"); - }); - }); - + // $http({ + // method: 'GET', + // url: 'configuration' + // }). + // success(function (data, status, headers, config) { + // if (data) { + // if (data.strataHostName) { + // strata.setStrataHostname(data.strataHostName); + // } else { + // console.log("Invalid configuration object " + data); + // } + // if (data.strataClientId) { + // strata.setRedhatClientID(data.strataClientId); + // } else { + // strata.setRedhatClientID("foreman-strata-client"); + // console.log("Invalid configuration object " + data); + // } + // } + // securityService.validateLogin(false).then( + // function (authedUser) { + // console.log("logged in user is " + authedUser) + // }, + // function (error) { + // console.log("Unable to get user credentials"); + // }); + // }). + // error(function (data, status, headers, config) { + // console.log("Failed to read app configuration"); + // strata.setRedhatClientID("foreman-strata-client"); + // securityService.validateLogin(false).then( + // function (authedUser) { + // console.log("logged in user is " + authedUser) + // }, + // function (error) { + // console.log("Unable to get user credentials"); + // }); + // }); } ]); diff --git a/redhat-access/app/controllers/redhat_access/attachments_controller.rb b/redhat-access/app/controllers/redhat_access/attachments_controller.rb index cc35f47..3d5f59d 100644 --- a/redhat-access/app/controllers/redhat_access/attachments_controller.rb +++ b/redhat-access/app/controllers/redhat_access/attachments_controller.rb @@ -30,5 +30,9 @@ def create :status => 500 end end + + def api_request? + true + end end end diff --git a/redhat-access/app/controllers/redhat_access/configuration_controller.rb b/redhat-access/app/controllers/redhat_access/configuration_controller.rb index eaf407a..0bc2d0e 100644 --- a/redhat-access/app/controllers/redhat_access/configuration_controller.rb +++ b/redhat-access/app/controllers/redhat_access/configuration_controller.rb @@ -12,5 +12,10 @@ def index render :json => { :strataHostName => strata_host,:strataClientId => client_id }.to_json, :layout => false end + + def api_request? + true + end + end end diff --git a/redhat-access/app/controllers/redhat_access/logs_controller.rb b/redhat-access/app/controllers/redhat_access/logs_controller.rb index aaa101c..7805b70 100644 --- a/redhat-access/app/controllers/redhat_access/logs_controller.rb +++ b/redhat-access/app/controllers/redhat_access/logs_controller.rb @@ -35,5 +35,9 @@ def get_available_logs def is_valid_file? file @@log_files.include?(file) && File.exist?(file) && File.readable?(file) && File.size(file) > 0 end + + def api_request? + true + end end end diff --git a/redhat-access/app/views/redhat_access/redhat_access/index.html.erb b/redhat-access/app/views/redhat_access/redhat_access/index.html.erb index 10c8171..42a44a8 100644 --- a/redhat-access/app/views/redhat_access/redhat_access/index.html.erb +++ b/redhat-access/app/views/redhat_access/redhat_access/index.html.erb @@ -3,3 +3,7 @@ <%= stylesheet_link_tag 'redhat_access/application'%> <%= javascript_include_tag 'redhat_access/application' %> +<%= javascript_tag do %> + strata.setStrataHostname('<%= REDHAT_ACCESS_CONFIG[:strata_host] %>'); + strata.setRedhatClientID('<%= "foreman_plugin_#{REDHAT_ACCESS_CONFIG[:deployment]}_#{RedhatAccess::VERSION}" %>'); +<% end %> diff --git a/redhat-access/lib/redhat_access/version.rb b/redhat-access/lib/redhat_access/version.rb index 89a44f2..66a5d25 100644 --- a/redhat-access/lib/redhat_access/version.rb +++ b/redhat-access/lib/redhat_access/version.rb @@ -1,3 +1,3 @@ module RedhatAccess - VERSION = "0.0.3" + VERSION = "0.0.4" end diff --git a/redhat-access/redhat_access.gemspec b/redhat-access/redhat_access.gemspec index 598a0f0..aefb906 100644 --- a/redhat-access/redhat_access.gemspec +++ b/redhat-access/redhat_access.gemspec @@ -25,4 +25,5 @@ Gem::Specification.new do |s| # s.add_dependency "jquery-rails" #-------------s.add_dependency "angular-rails-templates", ">= 0.0.4" s.add_development_dependency "sqlite3" + #s.add_development_dependency "redhat_access_lib" end diff --git a/redhat-access/rubygem-foreman-redhat_access.spec b/redhat-access/rubygem-foreman-redhat_access.spec index 5e3a670..a36f5ac 100644 --- a/redhat-access/rubygem-foreman-redhat_access.spec +++ b/redhat-access/rubygem-foreman-redhat_access.spec @@ -15,7 +15,7 @@ %endif Name: %{?scl_prefix}rubygem-foreman-%{gem_name} -Version: 0.0.3 +Version: 0.0.4 Release: 1%{?dist} Summary: Foreman engine to access Red Hat knowledge base Group: Development/Languages @@ -111,6 +111,10 @@ cp -pa .%{rubygem_redhat_access_dir}/config/config.yml.example %{buildroot}/etc/ /usr/bin %changelog +* Wed May 14 2014 Rex White - 0.0.4-1 +- Resolves: bz1084590 +- Updated for UX comments + * Wed May 14 2014 Rex White - 0.0.3-1 - Resolves: bz1084590 diff --git a/redhat-access/vendor/assets/javascripts/redhat_access/redhat_access_angular_ui.js b/redhat-access/vendor/assets/javascripts/redhat_access/redhat_access_angular_ui.js index be53ee6..a7bf843 100644 --- a/redhat-access/vendor/assets/javascripts/redhat_access/redhat_access_angular_ui.js +++ b/redhat-access/vendor/assets/javascripts/redhat_access/redhat_access_angular_ui.js @@ -1,4 +1,4 @@ -/*! redhat_access_angular_ui - v0.0.0 - 2014-05-01 +/*! redhat_access_angular_ui - v0.0.0 - 2014-05-24 * Copyright (c) 2014 ; * Licensed */ @@ -13688,6 +13688,9 @@ angular.module('ngTable').run(['$templateCache', function ($templateCache) { }]); return app; })); +'use strict'; + /*global $ */ + angular.module('RedhatAccess.header', []) .value('TITLE_VIEW_CONFIG', { show: 'false', @@ -13699,30 +13702,30 @@ angular.module('RedhatAccess.header', []) logViewerTitle: 'Log' }) .controller('TitleViewCtrl', ['TITLE_VIEW_CONFIG', '$scope', - function (TITLE_VIEW_CONFIG, $scope) { + function(TITLE_VIEW_CONFIG, $scope) { $scope.showTitle = TITLE_VIEW_CONFIG.show; $scope.titlePrefix = TITLE_VIEW_CONFIG.titlePrefix; - $scope.getPageTitle = function () { + $scope.getPageTitle = function() { switch ($scope.page) { - case 'search': - return TITLE_VIEW_CONFIG.searchTitle; - case 'caseList': - return TITLE_VIEW_CONFIG.caseListTitle; - case 'caseView': - return TITLE_VIEW_CONFIG.caseViewTitle; - case 'newCase': - return TITLE_VIEW_CONFIG.newCaseTitle; - case 'logViewer': - return TITLE_VIEW_CONFIG.logViewerTitle; - default: - console.log("Invalid title key" + $scope.page); - return ''; + case 'search': + return TITLE_VIEW_CONFIG.searchTitle; + case 'caseList': + return TITLE_VIEW_CONFIG.caseListTitle; + case 'caseView': + return TITLE_VIEW_CONFIG.caseViewTitle; + case 'newCase': + return TITLE_VIEW_CONFIG.newCaseTitle; + case 'logViewer': + return TITLE_VIEW_CONFIG.logViewerTitle; + default: + console.log('Invalid title key' + $scope.page); + return ''; } }; } ]) .directive('rhaTitleTemplate', - function () { + function() { return { restrict: 'AE', scope: { @@ -13733,7 +13736,7 @@ angular.module('RedhatAccess.header', []) }; }) .service('AlertService', ['$filter', 'AUTH_EVENTS', '$rootScope', - function ($filter, AUTH_EVENTS, $rootScope) { + function($filter, AUTH_EVENTS, $rootScope) { var ALERT_TYPES = { DANGER: 'danger', SUCCESS: 'success', @@ -13742,11 +13745,11 @@ angular.module('RedhatAccess.header', []) this.alerts = []; //array of {message: 'some alert', type: ''} objects - this.clearAlerts = function () { + this.clearAlerts = function() { this.alerts = []; }; - this.addAlert = function (alert) { + this.addAlert = function(alert) { this.alerts.push(alert); }; @@ -13754,26 +13757,28 @@ angular.module('RedhatAccess.header', []) this.alerts.splice(this.alerts.indexOf(alert), 1); }; - this.addDangerMessage = function (message) { + this.addDangerMessage = function(message) { return this.addMessage(message, ALERT_TYPES.DANGER); }; - this.addSuccessMessage = function (message) { + this.addSuccessMessage = function(message) { return this.addMessage(message, ALERT_TYPES.SUCCESS); }; - this.addWarningMessage = function (message) { + this.addWarningMessage = function(message) { return this.addMessage(message, ALERT_TYPES.WARNING); }; - this.addMessage = function (message, type) { + this.addMessage = function(message, type) { var alert = { message: message, - type: type == null ? 'warning' : type + type: type === null ? 'warning' : type }; this.addAlert(alert); - $('body,html').animate({scrollTop: $('body').offset().top}, 100); + $('body,html').animate({ + scrollTop: $('body').offset().top + }, 100); //Angular adds a unique hash to each alert during data binding, //so the returned alert will be unique even if the @@ -13781,19 +13786,19 @@ angular.module('RedhatAccess.header', []) return alert; }; - this.getErrors = function () { + this.getErrors = function() { var errors = $filter('filter')(this.alerts, { type: ALERT_TYPES.DANGER }); - if (errors == null) { + if (errors === null) { errors = []; } return errors; }; - this.addStrataErrorMessage = function (error) { + this.addStrataErrorMessage = function(error) { var existingMessage = $filter('filter')(this.alerts, { type: ALERT_TYPES.DANGER, @@ -13806,19 +13811,19 @@ angular.module('RedhatAccess.header', []) }; $rootScope.$on(AUTH_EVENTS.logoutSuccess, angular.bind(this, - function () { + function() { this.clearAlerts(); - this.addMessage("You have successfully logged out of the Red Hat Customer Portal."); + this.addMessage('You have successfully logged out of the Red Hat Customer Portal.'); })); $rootScope.$on(AUTH_EVENTS.loginSuccess, angular.bind(this, - function () { + function() { this.clearAlerts(); })); } ]) .directive('rhaAlert', - function () { + function() { return { templateUrl: 'common/views/alert.html', restrict: 'E', @@ -13826,12 +13831,12 @@ angular.module('RedhatAccess.header', []) }; }) .controller('AlertController', ['$scope', 'AlertService', - function ($scope, AlertService) { + function($scope, AlertService) { $scope.AlertService = AlertService; $scope.closeable = true; - $scope.closeAlert = function (index) { + $scope.closeAlert = function(index) { AlertService.alerts.splice(index, 1); }; @@ -13841,7 +13846,7 @@ angular.module('RedhatAccess.header', []) } ]) .directive('rhaHeader', - function () { + function() { return { templateUrl: 'common/views/header.html', restrict: 'E', @@ -13852,7 +13857,7 @@ angular.module('RedhatAccess.header', []) }; }) .controller('HeaderController', ['$scope', 'AlertService', - function ($scope, AlertService) { + function($scope, AlertService) { /** * For some reason the rhaAlert directive's controller is not binding to the view. * Hijacking rhaAlert's parent controller (HeaderController) works @@ -13862,7 +13867,7 @@ angular.module('RedhatAccess.header', []) $scope.closeable = true; - $scope.closeAlert = function (index) { + $scope.closeAlert = function(index) { AlertService.alerts.splice(index, 1); }; @@ -13871,40 +13876,38 @@ angular.module('RedhatAccess.header', []) }; } ]).factory('configurationService', ['$q', - function ($q) { + function($q) { var defer = $q.defer(); var service = { - setConfig: function (config) { - defer.resolve(config); + setConfig: function(config) { + defer.resolve(config); }, - getConfig: function () { + getConfig: function() { return defer.promise; } }; return service; } ]); -var app = angular.module('RedhatAccess.tree-selector', []); - -app.controller('TreeViewSelectorCtrl', ['TreeViewSelectorUtils', '$scope', '$http', - function (TreeViewSelectorUtils, $scope, $http) { - $scope.name = 'Attachments'; - $scope.attachmentTree = []; - $scope.init = function () { - $http({ - method: 'GET', - url: 'attachments' - }).success(function (data, status, headers, config) { - var tree = new Array(); - TreeViewSelectorUtils.parseTreeList(tree, data); - $scope.attachmentTree = tree; - }).error(function (data, status, headers, config) { - console.log("Unable to get supported attachments list"); - }); - }; - $scope.init(); - } -]); +'use strict'; +/*jshint unused:vars */ + +var app = angular.module('RedhatAccess.ui-utils', []); + +//this is an example controller to provide tree data +// app.controller('TreeViewSelectorCtrl', ['$scope', 'TreeViewSelectorData', +// function($scope, TreeViewSelectorData) { +// $scope.name = 'Attachments'; +// $scope.attachmentTree = []; +// TreeViewSelectorData.getTree('attachments').then( +// function(tree) { +// $scope.attachmentTree = tree; +// }, +// function() { +// console.log("Unable to get tree data"); +// }); +// } +// ]); app.directive('rhaChoiceTree', function () { return { @@ -13922,7 +13925,7 @@ app.directive('rhaChoice', ["$compile", function ($compile) { return { restrict: 'E', templateUrl: 'common/views/treenode.html', - link: function (scope, elm, attrs) { + link: function (scope, elm) { scope.choiceClicked = function (choice) { choice.checked = !choice.checked; @@ -13935,18 +13938,43 @@ app.directive('rhaChoice', ["$compile", function ($compile) { checkChildren(choice); }; if (scope.choice.children.length > 0) { - var childChoice = $compile('')(scope) + var childChoice = $compile('')(scope); elm.append(childChoice); } } }; }]); + + +app.factory('TreeViewSelectorData', ['$http', '$q', 'TreeViewSelectorUtils', + function ($http, $q, TreeViewSelectorUtils) { + var service = { + getTree: function (dataUrl) { + var defer = $q.defer(); + $http({ + method: 'GET', + url: dataUrl + }).success(function (data, status, headers, config) { + var tree = []; + TreeViewSelectorUtils.parseTreeList(tree, data); + defer.resolve(tree); + }).error(function (data, status, headers, config) { + console.log('Unable to get supported attachments list'); + defer.reject({}); + }); + return defer.promise; + } + }; + return service; + } +]); + app.factory('TreeViewSelectorUtils', function () { var parseTreeNode = function (splitPath, tree, fullFilePath) { - if (splitPath[0] != null) { - if (splitPath[0] != "") { + if (splitPath[0] !== undefined) { + if (splitPath[0] !== '') { var node = splitPath[0]; var match = false; var index = 0; @@ -13958,13 +13986,13 @@ app.factory('TreeViewSelectorUtils', } } if (!match) { - var nodeObj = new Object(); + var nodeObj = {}; nodeObj.checked = isLeafChecked(node); nodeObj.name = removeParams(node); - if (splitPath.length == 1) { + if (splitPath.length === 1) { nodeObj.fullPath = removeParams(fullFilePath); } - nodeObj.children = new Array(); + nodeObj.children = []; tree.push(nodeObj); index = tree.length - 1; } @@ -13991,7 +14019,7 @@ app.factory('TreeViewSelectorUtils', if (split[1]) { var params = split[1].split('&'); for (var i = 0; i < params.length; i++) { - if (params[i].indexOf("checked=true") != -1) { + if (params[i].indexOf('checked=true') !== -1) { return true; } } @@ -14035,10 +14063,10 @@ app.factory('TreeViewSelectorUtils', var service = { parseTreeList: function (tree, data) { - var files = data.split("\n"); + var files = data.split('\n'); for (var i = 0; i < files.length; i++) { var file = files[i]; - var splitPath = file.split("/"); + var splitPath = file.split('/'); parseTreeNode(splitPath, tree, file); } }, @@ -14047,7 +14075,7 @@ app.factory('TreeViewSelectorUtils', }, getSelectedLeaves: function (tree) { if (tree === undefined) { - console.log("getSelectedLeaves: Invalid tree"); + console.log('getSelectedLeaves: Invalid tree'); return []; } var container = []; @@ -14058,14 +14086,59 @@ app.factory('TreeViewSelectorUtils', return service; }); -app.config(["$urlRouterProvider", function ($urlRouterProvider) {}]).config(['$stateProvider', - function ($stateProvider) { - $stateProvider.state('choiceSelector', { - url: "/treeselector", - templateUrl: 'common/views/treeview-selector.html' - }) +app.directive('rhaResizable', [ + '$window', + '$timeout', + function ($window) { + + var link = function (scope, element, attrs) { + + scope.onResizeFunction = function () { + var distanceToTop = element[0].getBoundingClientRect().top; + var height = $window.innerHeight - distanceToTop; + element.css('height', height); + }; + + angular.element($window).bind( + 'resize', + function () { + scope.onResizeFunction(); + scope.$apply(); + } + ); + angular.element($window).bind( + 'click', + function () { + scope.onResizeFunction(); + scope.$apply(); + } + ); + + if (attrs.rhaDomReady !== undefined) { + scope.$watch('rhaDomReady', function (newValue) { + if (newValue) { + scope.onResizeFunction(); + } + }); + } else { + scope.onResizeFunction(); + } + + + }; + + return { + restrict: 'A', + scope: { + rhaDomReady: '=' + }, + link: link + }; } ]); +'use strict'; +/*global strata,$*/ +/*jshint unused:vars */ angular.module('RedhatAccess.security', ['ui.bootstrap', 'RedhatAccess.template', 'ui.router']) .constant('AUTH_EVENTS', { loginSuccess: 'auth-login-success', @@ -14082,14 +14155,17 @@ angular.module('RedhatAccess.security', ['ui.bootstrap', 'RedhatAccess.template' templateUrl: 'security/login_status.html' }; }) - .controller('SecurityController', ['$scope', '$rootScope', 'securityService', 'AUTH_EVENTS', - function ($scope, $rootScope, securityService, AUTH_EVENTS) { + .controller('SecurityController', ['$scope', '$rootScope', 'securityService', + function ($scope, $rootScope, securityService) { $scope.securityService = securityService; securityService.validateLogin(false); //change to false to force login } ]) - .service('securityService', ['$rootScope', '$modal', 'AUTH_EVENTS', '$q', - function ($rootScope, $modal, AUTH_EVENTS, $q) { + .value('LOGIN_VIEW_CONFIG', { + verbose: true, + }) + .service('securityService', ['$rootScope', '$modal', 'AUTH_EVENTS', '$q', 'LOGIN_VIEW_CONFIG', + function ($rootScope, $modal, AUTH_EVENTS, $q, LOGIN_VIEW_CONFIG) { this.loginStatus = { isLoggedIn: false, @@ -14122,19 +14198,18 @@ angular.module('RedhatAccess.security', ['ui.bootstrap', 'RedhatAccess.template' this.getBasicAuthToken = function () { var defer = $q.defer(); - var token = localStorage.getItem("rhAuthToken"); + var token = localStorage.getItem('rhAuthToken'); if (token !== undefined && token !== '') { defer.resolve(token); return defer.promise; } else { - var that = this; this.login().then( function (authedUser) { - defer.resolve(localStorage.getItem("rhAuthToken")); + defer.resolve(localStorage.getItem('rhAuthToken')); }, function (error) { - console.log("Unable to get user credentials"); - defer.resolve(""); + console.log('Unable to get user credentials'); + defer.resolve(error); }); return defer.promise; } @@ -14167,23 +14242,23 @@ angular.module('RedhatAccess.security', ['ui.bootstrap', 'RedhatAccess.template' defer.resolve(username); }, function (error) { - defer.reject(""); + defer.reject(error); } ); return defer.promise; } else { this.initLoginStatus().then( function (username) { - console.log("User name is " + username); + console.log('User name is ' + username); defer.resolve(username); }, function (error) { that.login().then( - function (authedUser) { + function (authedUser) { defer.resolve(authedUser.name); }, function (error) { - defer.reject(""); + defer.reject(error); }); } ); @@ -14196,11 +14271,11 @@ angular.module('RedhatAccess.security', ['ui.bootstrap', 'RedhatAccess.template' var result = this.showLogin(modalDefaults, modalOptions); result.then( function (authedUser) { - console.log("User logged in : " + authedUser.name); + console.log('User logged in : ' + authedUser.name); that.setLoginStatus(true, authedUser.name, false); }, function (error) { - console.log("Unable to login user"); + console.log('Unable to login user'); that.setLoginStatus(false, '', false); }); return result; // pass on the promise @@ -14231,13 +14306,14 @@ angular.module('RedhatAccess.security', ['ui.bootstrap', 'RedhatAccess.template' user: null, password: null }; + $scope.useVerboseLoginView = LOGIN_VIEW_CONFIG.verbose; $scope.modalOptions = tempModalOptions; $scope.modalOptions.ok = function (result) { //Hack below is needed to handle autofill issues //@see https://github.com/angular/angular.js/issues/1460 //BEGIN HACK - $scope.user.user = $("#rha-login-user-id").val(); - $scope.user.password = $("#rha-login-password").val(); + $scope.user.user = $('#rha-login-user-id').val(); + $scope.user.password = $('#rha-login-password').val(); //END HACK strata.setCredentials($scope.user.user, $scope.user.password, function (passed, authedUser) { @@ -14252,7 +14328,7 @@ angular.module('RedhatAccess.security', ['ui.bootstrap', 'RedhatAccess.template' // alert("Login failed!"); $rootScope.$broadcast(AUTH_EVENTS.loginFailed); $scope.$apply(function () { - $scope.authError = "Login Failed!"; + $scope.authError = 'Login Failed!'; }); } }); @@ -14270,6 +14346,11 @@ angular.module('RedhatAccess.security', ['ui.bootstrap', 'RedhatAccess.template' } ]); +/*jshint camelcase: false */ +'use strict'; +/*global strata */ +/*jshint unused:vars */ + /** * @ngdoc module * @name @@ -14283,6 +14364,7 @@ angular.module('RedhatAccess.search', [ 'RedhatAccess.security', 'ui.bootstrap', 'ngSanitize', + 'RedhatAccess.ui-utils', 'RedhatAccess.header' ]) .constant('RESOURCE_TYPES', { @@ -14301,11 +14383,11 @@ angular.module('RedhatAccess.search', [ .config(['$stateProvider', function ($stateProvider) { $stateProvider.state('search', { - url: "/search", + url: '/search', controller: 'SearchController', templateUrl: 'search/views/search.html' }).state('search_accordion', { //TEMPORARY - url: "/search2", + url: '/search2', controller: 'SearchController', templateUrl: 'search/views/accordion_search.html' @@ -14314,15 +14396,13 @@ angular.module('RedhatAccess.search', [ ]) .controller('SearchController', ['$scope', 'SearchResultsService', 'SEARCH_CONFIG', 'securityService', 'AlertService', - function ($scope, SearchResultsService, SEARCH_CONFIG,securityService, AlertService) { + function ($scope, SearchResultsService, SEARCH_CONFIG, securityService, AlertService) { $scope.results = SearchResultsService.results; $scope.selectedSolution = SearchResultsService.currentSelection; $scope.searchInProgress = SearchResultsService.searchInProgress; $scope.currentSearchData = SearchResultsService.currentSearchData; - clearResults = function () { - SearchResultsService.clear(); - }; + $scope.getOpenCaseRef = function () { if (SEARCH_CONFIG.openCaseRef !== null) { @@ -14341,13 +14421,13 @@ angular.module('RedhatAccess.search', [ $scope.search = function (searchStr, limit) { - securityService.validateLogin(true).then( - function (authedUser) { - SearchResultsService.search(searchStr, limit); - }, - function (error) { - AlertService.addDangerMessage("You must be logged in to use this functionality."); - }); + // securityService.validateLogin(true).then( + //function (authedUser) { + SearchResultsService.search(searchStr, limit); + //}, + //function (error) { + // AlertService.addDangerMessage('You must be logged in to use this functionality.'); + //}); }; $scope.diagnose = function (data, limit) { @@ -14356,13 +14436,13 @@ angular.module('RedhatAccess.search', [ SearchResultsService.diagnose(data, limit); }, function (error) { - AlertService.addDangerMessage("You must be logged in to use this functionality."); + AlertService.addDangerMessage('You must be logged in to use this functionality.'); }); }; $scope.$watch(function () { - return SearchResultsService.currentSelection + return SearchResultsService.currentSelection; }, function (newVal) { $scope.selectedSolution = newVal; @@ -14384,7 +14464,7 @@ angular.module('RedhatAccess.search', [ } else { return false; } - } + }; } }; } @@ -14462,9 +14542,131 @@ angular.module('RedhatAccess.search', [ }; } ]) - .factory('SearchResultsService', ['$q', '$rootScope', 'AUTH_EVENTS', 'RESOURCE_TYPES', 'SEARCH_PARAMS', 'AlertService', + .factory('SearchResultsService', ['$q', '$rootScope', 'AUTH_EVENTS', 'RESOURCE_TYPES', 'SEARCH_PARAMS', 'AlertService', 'securityService', - function ($q, $rootScope, AUTH_EVENTS, RESOURCE_TYPES, SEARCH_PARAMS, AlertService) { + function ($q, $rootScope, AUTH_EVENTS, RESOURCE_TYPES, SEARCH_PARAMS, AlertService, securityService) { + var searchArticlesOrSolutions = function (searchString, limit) { + //var that = this; + if ((limit === undefined) || (limit < 1)) { + limit = SEARCH_PARAMS.limit; + } + service.clear(); + AlertService.clearAlerts(); + + service.setCurrentSearchData(searchString, 'search'); + var deferreds = []; + strata.search( + searchString, + function (entries) { + //retrieve details for each solution + if (entries !== undefined) { + if (entries.length === 0) { + AlertService.addSuccessMessage('No recommendations found.'); + } + entries.forEach(function (entry) { + var deferred = $q.defer(); + deferreds.push(deferred.promise); + strata.utils.getURI( + entry.uri, + entry.resource_type, + function (type, info) { + if (info !== undefined) { + info.resource_type = type; + } + deferred.resolve(info); + }, + function (error) { + deferred.resolve(); + }); + }); + } else { + AlertService.addSuccessMessage('No recommendations found.'); + } + $q.all(deferreds).then( + function (results) { + results.forEach(function (result) { + if (result !== undefined) { + service.add(result); + } + }); + service.searchInProgress.value = false; + }, + function (error) { + service.searchInProgress.value = false; + } + ); + }, + function (error) { + console.log(error); + $rootScope.$apply(function () { + service.searchInProgress.value = false; + console.log(error); + AlertService.addDangerMessage(error); + }); + }, + limit, + false + ); + }; + var searchProblems = function (data, limit) { + if ((limit === undefined) || (limit < 1)) { + limit = SEARCH_PARAMS.limit; + } + service.clear(); + AlertService.clearAlerts(); + var deferreds = []; + service.searchInProgress.value = true; + service.setCurrentSearchData(data, 'diagnose'); + strata.problems( + data, + function (solutions) { + //retrieve details for each solution + if (solutions !== undefined) { + if (solutions.length === 0) { + AlertService.addSuccessMessage('No solutions found.'); + } + + solutions.forEach(function (solution) { + var deferred = $q.defer(); + deferreds.push(deferred.promise); + strata.solutions.get( + solution.uri, + function (solution) { + deferred.resolve(solution); + }, + function (error) { + deferred.resolve(); + }); + }); + } else { + AlertService.addSuccessMessage('No solutions found.'); + } + $q.all(deferreds).then( + function (solutions) { + solutions.forEach(function (solution) { + if (solution !== undefined) { + solution.resource_type = RESOURCE_TYPES.solution; + service.add(solution); + } + }); + service.searchInProgress.value = false; + }, + function (error) { + service.searchInProgress.value = false; + } + ); + }, + + function (error) { + $rootScope.$apply(function () { + service.searchInProgress.value = false; + AlertService.addDangerMessage(error); + }); + console.log(error); + }, + limit + ); + }; var service = { results: [], currentSelection: { @@ -14497,164 +14699,30 @@ angular.module('RedhatAccess.search', [ this.currentSearchData.method = method; }, search: function (searchString, limit) { - var that = this; - if ((limit === undefined) || (limit < 1)) limit = SEARCH_PARAMS.limit; - this.clear(); - AlertService.clearAlerts(); this.searchInProgress.value = true; - this.setCurrentSearchData(searchString, 'search'); - var deferreds = []; - strata.search( - searchString, - function (entries) { - //retrieve details for each solution - if (entries !== undefined) { - if (entries.length === 0) { - AlertService.addSuccessMessage("No recommendations found."); - }; - entries.forEach(function (entry) { - var deferred = $q.defer(); - deferreds.push(deferred.promise); - strata.utils.getURI( - entry.uri, - entry.resource_type, - function (type, info) { - if (info !== undefined) { - info.resource_type = type; - } - deferred.resolve(info); - }, - function (error) { - deferred.resolve(); - }); - }); - } else { - AlertService.addSuccessMessage("No recommendations found."); - }; - $q.all(deferreds).then( - function (results) { - results.forEach(function (result) { - if (result !== undefined) { - that.add(result); - } - }); - that.searchInProgress.value = false; - }, - function (error) { - that.searchInProgress.value = false; - } - ); + var that = this; + securityService.validateLogin(true).then( + function (authedUser) { + searchArticlesOrSolutions(searchString, limit); }, function (error) { - console.log(error); - $rootScope.$apply(function () { - that.searchInProgress.value = false; - console.log(error); - AlertService.addDangerMessage(error); - }); - }, - limit, - false - ); + that.searchInProgress.value = false; + AlertService.addDangerMessage('You must be logged in to use this functionality.'); + }); + }, - // solution and article search needs reimplementation - // searchSolutions: function (searchString, limit) { - // var that = this; - // if ((limit === undefined) || (limit < 1)) limit = SEARCH_PARAMS.limit; - // this.clear(); - // strata.solutions.search( - // searchString, - // function (response) { - // $rootScope.$apply(function () { - // response.forEach(function (entry) { - // entry.resource_type = RESOURCE_TYPES.solution; - // that.add(entry); - // }); - // }); - // }, - // function (error) { - // console.log("search failed"); - // }, - // limit, - // false - // ); - // }, - // searchArticles: function (searchString, limit) { - // var that = this; - // if ((limit === undefined) || (limit < 1)) limit = SEARCH_PARAMS.limit; - // this.clear(); - // strata.articles.search( - // searchString, - // function (response) { - // response.resource_type = RESOURCE_TYPES.article; - // $rootScope.$apply(function () { - // that.add(response); - // }); - // }, - // function (error) { - // console.log("search failed"); - // }, - // limit, - // true - // ); - // }, diagnose: function (data, limit) { + this.searchInProgress.value = true; var that = this; - if ((limit === undefined) || (limit < 1)) limit = SEARCH_PARAMS.limit; - this.clear(); - AlertService.clearAlerts(); - var deferreds = []; - that.searchInProgress.value = true; - this.setCurrentSearchData(data, 'diagnose'); - strata.problems( - data, - function (solutions) { - //retrieve details for each solution - if (solutions !== undefined) { - if (solutions.length === 0) { - AlertService.addSuccessMessage("No solutions found."); - }; - - solutions.forEach(function (solution) { - var deferred = $q.defer(); - deferreds.push(deferred.promise); - strata.solutions.get( - solution.uri, - function (solution) { - deferred.resolve(solution); - }, - function (error) { - deferred.resolve(); - }); - }); - } else { - AlertService.addSuccessMessage("No solutions found."); - }; - $q.all(deferreds).then( - function (solutions) { - solutions.forEach(function (solution) { - if (solution !== undefined) { - solution.resource_type = RESOURCE_TYPES.solution; - that.add(solution); - } - }); - that.searchInProgress.value = false; - }, - function (error) { - that.searchInProgress.value = false; - } - ); + securityService.validateLogin(true).then( + function (authedUser) { + searchProblems(data, limit); }, - function (error) { - $rootScope.$apply(function () { - that.searchInProgress.value = false; - AlertService.addDangerMessage(error); - }); - console.log(error); - }, - limit - ); + that.searchInProgress.value = false; + AlertService.addDangerMessage('You must be logged in to use this functionality.'); + }); + } }; @@ -14665,6 +14733,7 @@ angular.module('RedhatAccess.search', [ return service; } ]); +'use strict'; angular.module('RedhatAccess.cases', [ 'ui.router', 'ui.bootstrap', @@ -14672,54 +14741,55 @@ angular.module('RedhatAccess.cases', [ 'RedhatAccess.template', 'RedhatAccess.security', 'RedhatAccess.search', - 'RedhatAccess.tree-selector', + 'RedhatAccess.ui-utils', 'RedhatAccess.header' ]) -.constant('STATUS', { - open: 'open', - closed: 'closed', - both: 'both' -}) -.value('NEW_DEFAULTS', { - 'product': '', - 'version': '' -}) -.config([ - '$stateProvider', - function ($stateProvider) { - - $stateProvider.state('compact', { - url: '/case/compact?sessionId', - templateUrl: 'cases/views/compact.html' - }); + .constant('STATUS', { + open: 'open', + closed: 'closed', + both: 'both' + }) + .value('NEW_DEFAULTS', { + 'product': '', + 'version': '' + }) + .config([ + '$stateProvider', + function ($stateProvider) { - $stateProvider.state('compact.edit', { - url: '/{id:[0-9]{1,8}}', - templateUrl: 'cases/views/compactEdit.html', - controller: 'CompactEdit' - }); + $stateProvider.state('compact', { + url: '/case/compact?sessionId', + templateUrl: 'cases/views/compact.html' + }); - $stateProvider.state('edit', { - url: '/case/{id:[0-9]{1,8}}', - templateUrl: 'cases/views/edit.html', - controller: 'Edit' - }); + $stateProvider.state('compact.edit', { + url: '/{id:[0-9]{1,8}}', + templateUrl: 'cases/views/compactEdit.html', + controller: 'CompactEdit' + }); - $stateProvider.state('new', { - url: '/case/new', - templateUrl: 'cases/views/new.html', - controller: 'New' - }); + $stateProvider.state('edit', { + url: '/case/{id:[0-9]{1,8}}', + templateUrl: 'cases/views/edit.html', + controller: 'Edit' + }); - $stateProvider.state('list', { - url: '/case/list', - templateUrl: 'cases/views/list.html', - controller: 'List' - }); - } -]); + $stateProvider.state('new', { + url: '/case/new', + templateUrl: 'cases/views/new.html', + controller: 'New' + }); + $stateProvider.state('list', { + url: '/case/list', + templateUrl: 'cases/views/list.html', + controller: 'List' + }); + } + ]); 'use strict'; +/*global $ */ + angular.module('RedhatAccess.cases') .controller('AttachLocalFile', [ @@ -14736,6 +14806,7 @@ angular.module('RedhatAccess.cases') }; $scope.addFile = function() { + /*jshint camelcase: false */ var data = new FormData(); data.append('file', $scope.fileObj); data.append('description', $scope.fileDescription); @@ -14768,19 +14839,22 @@ angular.module('RedhatAccess.cases') ]); 'use strict'; - +/*jshint camelcase: false */ angular.module('RedhatAccess.cases') .controller('AttachmentsSection', [ '$scope', 'AttachmentsService', 'CaseService', + 'TreeViewSelectorUtils', function ( $scope, AttachmentsService, - CaseService) { + CaseService, + TreeViewSelectorUtils) { $scope.AttachmentsService = AttachmentsService; $scope.CaseService = CaseService; + $scope.TreeViewSelectorUtils = TreeViewSelectorUtils; $scope.doUpdate = function () { $scope.updatingAttachments = true; @@ -14791,39 +14865,30 @@ angular.module('RedhatAccess.cases') }, function (error) { $scope.updatingAttachments = false; - console.log("Error posting attachment"); + console.log('Error posting attachment : ' + error); }); }; } ]); 'use strict'; angular.module('RedhatAccess.cases') - .controller('BackEndAttachmentsCtrl', ['$scope', - '$http', - '$location', - 'AttachmentsService', - 'TreeViewSelectorUtils', - function ($scope, $http, $location, AttachmentsService, TreeViewSelectorUtils) { + .controller('BackEndAttachmentsCtrl', ['$scope', 'TreeViewSelectorData', 'AttachmentsService', + function ($scope, TreeViewSelectorData, AttachmentsService) { $scope.name = 'Attachments'; - $scope.attachmentTree = []; //AttachmentsService.backendAttachemnts; - var sessionId = $location.search().sessionId; - $scope.init = function () { - $http({ - method: 'GET', - url: 'attachments?sessionId=' + encodeURIComponent(sessionId) - }).success(function (data, status, headers, config) { - var tree = new Array(); - TreeViewSelectorUtils.parseTreeList(tree, data); + $scope.attachmentTree = []; + TreeViewSelectorData.getTree('attachments').then( + function (tree) { $scope.attachmentTree = tree; - AttachmentsService.updateBackEndAttachements(tree); - }).error(function (data, status, headers, config) { - console.log("Unable to get supported attachments list"); + AttachmentsService.updateBackEndAttachments(tree); + }, + function () { + console.log('Unable to get tree data'); }); - }; - $scope.init(); } ]); 'use strict'; + /*jshint unused:vars */ + /*jshint camelcase: false */ angular.module('RedhatAccess.cases') .controller('CommentsSection', [ @@ -15038,7 +15103,7 @@ angular.module('RedhatAccess.cases') AlertService.addStrataErrorMessage(error); } ); - } + }; $scope.init(); $rootScope.$on(AUTH_EVENTS.loginSuccess, function() { @@ -15063,7 +15128,7 @@ angular.module('RedhatAccess.cases') ]); 'use strict'; - + /*jshint camelcase: false */ angular.module('RedhatAccess.cases') .controller('DetailsSection', [ '$scope', @@ -15130,7 +15195,7 @@ angular.module('RedhatAccess.cases') AlertService.addStrataErrorMessage(error); } ); - } + }; $scope.init(); $scope.updatingDetails = false; @@ -15200,7 +15265,7 @@ angular.module('RedhatAccess.cases') ]); 'use strict'; - + /*jshint camelcase: false */ angular.module('RedhatAccess.cases') .controller('Edit', [ '$scope', @@ -15243,7 +15308,7 @@ angular.module('RedhatAccess.cases') CaseService.defineCase(caseJSON); $scope.caseLoading = false; - if (caseJSON.product != null && caseJSON.product.name != null) { + if (caseJSON.product !== null && caseJSON.product.name !== null) { strataService.products.versions(caseJSON.product.name).then( function(versions) { CaseService.versions = versions; @@ -15254,7 +15319,7 @@ angular.module('RedhatAccess.cases') ); } - if (caseJSON.account_number != null) { + if (caseJSON.account_number !== null) { strataService.accounts.get(caseJSON.account_number).then( function(account) { CaseService.defineAccount(account); @@ -15302,11 +15367,12 @@ angular.module('RedhatAccess.cases') $scope.init(); AlertService.clearAlerts(); }); - }]); + } +]); 'use strict'; - +/*jshint camelcase: false */ angular.module('RedhatAccess.cases') .controller('List', [ '$scope', @@ -15368,7 +15434,7 @@ angular.module('RedhatAccess.cases') AlertService.addStrataErrorMessage(error); } ); - } + }; $scope.loadCases(); /** @@ -15412,7 +15478,7 @@ angular.module('RedhatAccess.cases') ]); 'use strict'; - + /*jshint camelcase: false */ angular.module('RedhatAccess.cases') .controller('ListFilter', [ '$scope', @@ -15444,7 +15510,7 @@ angular.module('RedhatAccess.cases') AlertService.addStrataErrorMessage(error); } ); - } + }; $scope.loadGroups(); $rootScope.$on(AUTH_EVENTS.loginSuccess, function() { @@ -15516,6 +15582,22 @@ angular.module('RedhatAccess.cases') 'use strict'; +angular.module('RedhatAccess.cases') + .controller('ListNewAttachments', [ + '$scope', + 'AttachmentsService', + 'TreeViewSelectorUtils', + function($scope, AttachmentsService, TreeViewSelectorUtils) { + $scope.AttachmentsService = AttachmentsService; + $scope.TreeViewSelectorUtils = TreeViewSelectorUtils; + + $scope.removeLocalAttachment = function($index) { + AttachmentsService.removeUpdatedAttachment($index); + }; + } + ]); +'use strict'; + angular.module('RedhatAccess.cases') .controller('New', [ '$scope', @@ -15748,20 +15830,25 @@ angular.module('RedhatAccess.cases') $scope.submittingCase = true; AlertService.addWarningMessage('Creating case...'); + var redirectToCase = function(caseNumber) { + $state.go('edit', { + id: caseNumber + }); + AlertService.clearAlerts(); + $scope.submittingCase = false; + }; + strataService.cases.post(caseJSON).then( function(caseNumber) { AlertService.clearAlerts(); AlertService.addSuccessMessage('Successfully created case number ' + caseNumber); if ((AttachmentsService.updatedAttachments.length > 0) || (AttachmentsService.hasBackEndSelections())) { AttachmentsService.updateAttachments(caseNumber).then( - function () { - $state.go('edit', { - id: caseNumber - }); - AlertService.clearAlerts(); - $scope.submittingCase = false; - } - ); + function() { + redirectToCase(caseNumber); + }); + } else { + redirectToCase(caseNumber); } }, function(error) { @@ -15773,6 +15860,7 @@ angular.module('RedhatAccess.cases') $scope.gotoPage(1); } ]); + 'use strict'; angular.module('RedhatAccess.cases') @@ -15819,6 +15907,7 @@ angular.module('RedhatAccess.cases') }); 'use strict'; +/*jshint unused:vars */ angular.module('RedhatAccess.cases') .directive('rhaAttachProductLogs', function () { @@ -15831,6 +15920,7 @@ angular.module('RedhatAccess.cases') }); 'use strict'; +/*jshint unused:vars */ angular.module('RedhatAccess.cases') .directive('rhaCaseAttachments', function () { @@ -15846,19 +15936,19 @@ angular.module('RedhatAccess.cases') }); 'use strict'; +/*jshint unused:vars */ angular.module('RedhatAccess.cases') -.directive('rhaCaseComments', function () { -return { - templateUrl: 'cases/views/commentsSection.html', - controller: 'CommentsSection', - restrict: 'EA', - link: function postLink(scope, element, attrs) { - } -}; -}); - + .directive('rhaCaseComments', function() { + return { + templateUrl: 'cases/views/commentsSection.html', + controller: 'CommentsSection', + restrict: 'EA', + link: function postLink(scope, element, attrs) {} + }; + }); 'use strict'; +/*jshint unused:vars */ angular.module('RedhatAccess.cases') .directive('rhaCompactCaseList', function () { @@ -15874,19 +15964,19 @@ angular.module('RedhatAccess.cases') }); 'use strict'; +/*jshint unused:vars */ angular.module('RedhatAccess.cases') -.directive('rhaCaseDescription', function () { -return { - templateUrl: 'cases/views/descriptionSection.html', - restrict: 'EA', - controller: 'DescriptionSection', - link: function postLink(scope, element, attrs) { - } -}; -}); - + .directive('rhaCaseDescription', function() { + return { + templateUrl: 'cases/views/descriptionSection.html', + restrict: 'EA', + controller: 'DescriptionSection', + link: function postLink(scope, element, attrs) {} + }; + }); 'use strict'; +/*jshint unused:vars */ angular.module('RedhatAccess.cases') .directive('rhaCaseDetails', function () { @@ -15917,7 +16007,7 @@ angular.module('RedhatAccess.cases') }); 'use strict'; - +/*jshint unused:vars */ angular.module('RedhatAccess.cases') .directive('rhaListFilter', function () { return { @@ -15935,16 +16025,28 @@ angular.module('RedhatAccess.cases') 'use strict'; +angular.module('RedhatAccess.cases') + .directive('rhaListNewAttachments', function() { + return { + templateUrl: 'cases/views/listNewAttachments.html', + restrict: 'EA', + controller: 'ListNewAttachments' + }; + }); +'use strict'; +/*jshint unused:vars */ + angular.module('RedhatAccess.cases') .directive('rhaOnChange', function () { return { - restrict: "A", + restrict: 'A', link: function (scope, element, attrs) { element.bind('change', element.scope()[attrs.rhaOnChange]); } }; }); 'use strict'; +/*jshint unused:vars */ angular.module('RedhatAccess.cases') .directive('rhaPageHeader', function () { @@ -15960,6 +16062,7 @@ angular.module('RedhatAccess.cases') }); 'use strict'; +/*jshint unused:vars */ angular.module('RedhatAccess.cases') .directive('rhaCaseRecommendations', function () { @@ -15973,62 +16076,20 @@ angular.module('RedhatAccess.cases') }); 'use strict'; - angular.module('RedhatAccess.cases') -.directive('rhaResizable', [ - '$window', - '$timeout', - function ($window) { - - var link = function(scope, element, attrs) { - - scope.onResizeFunction = function() { - var distanceToTop = element[0].getBoundingClientRect().top; - var height = $window.innerHeight - distanceToTop; - element.css('height', height); - }; - - angular.element($window).bind( - 'resize', - function() { - scope.onResizeFunction(); - scope.$apply(); - } - ); - - if (attrs.rhaDomReady !== undefined) { - scope.$watch('rhaDomReady', function(newValue) { - if (newValue) { - scope.onResizeFunction(); - } - }); - } else { - scope.onResizeFunction(); + .filter('bytes', function() { + return function(bytes, precision) { + if (isNaN(parseFloat(bytes)) || !isFinite(bytes)) { + return '-'; } - - - }; - - return { - restrict: 'A', - scope: { - rhaDomReady: '=' - }, - link: link - }; - } -]); - -angular.module('RedhatAccess.cases') -.filter('bytes', function() { - return function(bytes, precision) { - if (isNaN(parseFloat(bytes)) || !isFinite(bytes)) return '-'; - if (typeof precision === 'undefined') precision = 1; - var units = ['bytes', 'kB', 'MB', 'GB', 'TB', 'PB'], + if (typeof precision === 'undefined') { + precision = 1; + } + var units = ['bytes', 'kB', 'MB', 'GB', 'TB', 'PB'], number = Math.floor(Math.log(bytes) / Math.log(1024)); - return (bytes / Math.pow(1024, Math.floor(number))).toFixed(precision) + ' ' + units[number]; - } -}); + return (bytes / Math.pow(1024, Math.floor(number))).toFixed(precision) + ' ' + units[number]; + }; + }); 'use strict'; angular.module('RedhatAccess.cases') @@ -16047,10 +16108,11 @@ angular.module('RedhatAccess.cases') } return shortText; - } + }; }); 'use strict'; +/*jshint camelcase: false */ angular.module('RedhatAccess.cases') .service('AttachmentsService', [ @@ -16061,7 +16123,8 @@ angular.module('RedhatAccess.cases') '$http', 'securityService', 'AlertService', - function ($filter, $q, strataService, TreeViewSelectorUtils, $http, securityService, AlertService) { + 'CaseService', + function ($filter, $q, strataService, TreeViewSelectorUtils, $http, securityService, AlertService, CaseService) { this.originalAttachments = []; this.updatedAttachments = []; @@ -16073,7 +16136,7 @@ angular.module('RedhatAccess.cases') this.backendAttachments = []; }; - this.updateBackEndAttachements = function (selected) { + this.updateBackEndAttachments = function (selected) { this.backendAttachments = selected; }; @@ -16081,16 +16144,29 @@ angular.module('RedhatAccess.cases') return TreeViewSelectorUtils.hasSelections(this.backendAttachments); }; - this.removeAttachment = function ($index) { + this.removeUpdatedAttachment = function ($index) { this.updatedAttachments.splice($index, 1); }; - this.getOriginalAttachments = function () { - return this.originalAttachments; - }; + this.removeOriginalAttachment = function ($index) { + var attachment = this.originalAttachments[$index]; + + var progressMessage = + AlertService.addWarningMessage( + 'Deleting attachment: ' + attachment.file_name + ' - ' + attachment.uuid); - this.getUpdatedAttachments = function () { - return this.updatedAttachments; + strataService.cases.attachments.delete(attachment.uuid, CaseService. + case .case_number).then( + angular.bind(this, function () { + AlertService.removeAlert(progressMessage); + AlertService.addSuccessMessage( + 'Successfully deleted attachment: ' + attachment.file_name + ' - ' + attachment.uuid); + this.originalAttachments.splice($index, 1); + }), + function (error) { + AlertService.addStrataErrorMessage(error); + } + ); }; this.addNewAttachment = function (attachment) { @@ -16103,15 +16179,13 @@ angular.module('RedhatAccess.cases') } else { this.originalAttachments = attachments; } - - this.updatedAttachments = angular.copy(this.originalAttachments); }; - this.postBackEndAttachments = function (caseId) { var selectedFiles = TreeViewSelectorUtils.getSelectedLeaves(this.backendAttachments); return securityService.getBasicAuthToken().then( function (auth) { + /*jshint unused:false */ //we post each attachment separately var promises = []; angular.forEach(selectedFiles, function (file) { @@ -16129,18 +16203,18 @@ angular.module('RedhatAccess.cases') }).error(function (data, status, headers, config) { console.log(data); var error_msg = ''; - switch (status){ - case 401: - error_msg = ' : Unauthorised.'; - break; - case 409: - error_msg = ' : Invalid username/password.'; - break; - case 500: - error_msg = ' : Internal server error'; - break; + switch (status) { + case 401: + error_msg = ' : Unauthorised.'; + break; + case 409: + error_msg = ' : Invalid username/password.'; + break; + case 500: + error_msg = ' : Internal server error'; + break; } - AlertService.addDangerMessage( + AlertService.addDangerMessage( 'Failed to upload attachment ' + jsonData.attachment + ' to case ' + caseId + error_msg); deferred.reject(data); @@ -16162,48 +16236,24 @@ angular.module('RedhatAccess.cases') } if (hasLocalAttachments) { //find new attachments - for (var i in updatedAttachments) { - if (!updatedAttachments[i].hasOwnProperty('uuid')) { + angular.forEach(updatedAttachments, function (attachment) { + if (!attachment.hasOwnProperty('uuid')) { var promise = strataService.cases.attachments.post( - updatedAttachments[i].file, + attachment.file, caseId - ) - promise.then( - function (uri) { - updatedAttachments[i].uri = uri; - //TODO: delete uploading message - AlertService.addSuccessMessage( - 'Successfully uploaded attachment ' + - updatedAttachments[i].file_name + ' to case ' + caseId); - }, - function(error) { - AlertService.addStrataErrorMessage(error); - } ); - promises.push(promise); - } - } - //find removed attachments - jQuery.grep(this.originalAttachments, function (origAttachment) { - var attachment = - $filter('filter')(updatedAttachments, { - 'uuid': origAttachment.uuid - }); - - if (attachment.length == 0) { - var promise = strataService.cases.attachments.delete( - origAttachment.uuid, - caseId) - promise.then( - function() { - AlertService.addSuccessMessage('Deleted attachment: ' + origAttachment.file_name + ' - ' + origAttachment.uuid) - }, - function(error) { - AlertService.addStrataErrorMessage(error); - } - ) - + function (uri) { + attachment.uri = uri; + attachment.uuid = uri.slice(uri.lastIndexOf('/') + 1); + AlertService.addSuccessMessage( + 'Successfully uploaded attachment ' + + attachment.file_name + ' to case ' + caseId); + }, + function (error) { + AlertService.addStrataErrorMessage(error); + } + ); promises.push(promise); } }); @@ -16213,7 +16263,9 @@ angular.module('RedhatAccess.cases') var parentPromise = $q.all(promises); parentPromise.then( angular.bind(this, function () { - this.defineOriginalAttachments(angular.copy(updatedAttachments)); + this.originalAttachments = + this.originalAttachments.concat(this.updatedAttachments); + this.updatedAttachments = []; AlertService.removeAlert(uploadingAlert); }), function (error) { @@ -16236,64 +16288,79 @@ angular.module('RedhatAccess.cases') this.defineCases = function(cases) { this.cases = cases; - } + }; } ]); 'use strict'; angular.module('RedhatAccess.cases') -.service('CaseService', [ - 'strataService', - function (strataService) { - this.case = {}; - this.versions = []; - this.products = []; - this.statuses = []; - this.severities = []; - this.groups = []; - this.account = {}; - - /** - * Add the necessary wrapper objects needed to properly display the data. - * - * @param rawCase - */ - this.defineCase = function(rawCase) { - rawCase.severity = {'name': rawCase.severity}; - rawCase.status = {'name': rawCase.status}; - rawCase.product = {'name': rawCase.product}; - rawCase.group = {'number': rawCase.folder_number}; - rawCase.type = {'name': rawCase.type}; - - this.case = rawCase; - }; - - this.defineAccount = function(account) { - this.account = account; - }; - - this.clearCase = function() { - this.case = {}; + .service('CaseService', [ + 'strataService', + function(strataService) { + this. + case = {}; this.versions = []; this.products = []; this.statuses = []; this.severities = []; this.groups = []; this.account = {}; - }; - this.populateGroups = function() { - strataService.groups.list().then( + /** + * Add the necessary wrapper objects needed to properly display the data. + * + * @param rawCase + */ + this.defineCase = function(rawCase) { + /*jshint camelcase: false */ + rawCase.severity = { + 'name': rawCase.severity + }; + rawCase.status = { + 'name': rawCase.status + }; + rawCase.product = { + 'name': rawCase.product + }; + rawCase.group = { + 'number': rawCase.folder_number + }; + rawCase.type = { + 'name': rawCase.type + }; + + this. + case = rawCase; + }; + + this.defineAccount = function(account) { + this.account = account; + }; + + this.clearCase = function() { + this. + case = {}; + this.versions = []; + this.products = []; + this.statuses = []; + this.severities = []; + this.groups = []; + this.account = {}; + }; + + this.populateGroups = function() { + strataService.groups.list().then( angular.bind(this, function(groups) { this.groups = groups; }) - ); - }; -}]); - + ); + }; + } + ]); 'use strict'; - + /*jshint unused:vars */ + /*jshint camelcase: false */ angular.module('RedhatAccess.cases') .service('RecommendationsService', [ 'strataService', @@ -16357,7 +16424,7 @@ angular.module('RedhatAccess.cases') solutions.forEach(angular.bind(this, function (solution) { if (solution !== undefined) { - solution.resource_type = "Solution"; + solution.resource_type = 'Solution'; this.recommendations.push(solution); } })); @@ -16377,9 +16444,13 @@ angular.module('RedhatAccess.cases') return masterDeferred.promise; }; - }]); + } +]); 'use strict'; +/*global strata*/ + /*jshint camelcase: false */ + /*jshint unused:vars */ angular.module('RedhatAccess.cases') .factory('strataService', ['$q', function ($q) { @@ -16391,7 +16462,7 @@ angular.module('RedhatAccess.cases') response: response, status: status }); - } + }; return { problems: function(data, max) { @@ -16674,9 +16745,12 @@ angular.module('RedhatAccess.logViewer', templateUrl : 'log_viewer/views/log_viewer.html' }) } ]) - +.constant('LOGVIEWER_EVENTS', { + allTabsClosed: 'allTabsClosed' + }) .value('hideMachinesDropdown', {value:false}) + .factory('files', function() { var fileList = ''; var selectedFile = ''; @@ -16854,12 +16928,14 @@ angular.module('RedhatAccess.logViewer', }]) .controller('selectFileButton', [ '$scope', + '$rootScope', '$http', '$location', 'files', 'AlertService', - function($scope, $http, $location, - files, AlertService) { + 'LOGVIEWER_EVENTS', + function($scope,$rootScope, $http, $location, + files, AlertService, LOGVIEWER_EVENTS) { $scope.retrieveFileButtonIsDisabled = files.getRetrieveFileButtonIsDisabled(); $scope.fileSelected = function() { @@ -16881,8 +16957,13 @@ angular.module('RedhatAccess.logViewer', AlertService.addDangerMessage(data); }); }; + + $rootScope.$on(LOGVIEWER_EVENTS.allTabsClosed, function() { + $scope.$parent.$parent.sidePaneToggle = !$scope.$parent.$parent.sidePaneToggle; + }); }]) .controller('TabsDemoCtrl', [ + '$rootScope', '$scope', '$http', '$location', @@ -16891,12 +16972,9 @@ angular.module('RedhatAccess.logViewer', 'SearchResultsService', 'securityService', 'AlertService', - function($scope, $http, $location, files, accordian, SearchResultsService, securityService, AlertService) { - $scope.tabs = [ { - shortTitle : "Log File Viewer", - longTitle : "Log File Viewer", - content : "Please select a file from the left to begin." - } ]; + 'LOGVIEWER_EVENTS', + function($rootScope,$scope, $http, $location, files, accordian, SearchResultsService, securityService, AlertService,LOGVIEWER_EVENTS) { + $scope.tabs = []; $scope.isLoading = false; $scope.$watch(function() { return files.getFileClicked().check; @@ -16945,6 +17023,9 @@ angular.module('RedhatAccess.logViewer', }); $scope.removeTab = function(index) { $scope.tabs.splice(index, 1); + if ($scope.tabs.length < 1){ + $rootScope.$broadcast(LOGVIEWER_EVENTS.allTabsClosed); + } }; $scope.checked = false; // This will be @@ -16978,24 +17059,30 @@ angular.module('RedhatAccess.logViewer', //$scope.sleep(5000, $scope.checkTextSelection); }; + $scope.refreshTab = function(index){ var sessionId = $location.search().sessionId; var userId = $location.search().userId; - // $scope.tabs[index].content = ''; - //TODO reuse this code from above - $http( - { - method : 'GET', - url : 'logs?sessionId=' - + encodeURIComponent(sessionId) + '&userId=' - + encodeURIComponent(userId) + '&path=' - + files.selectedFile + '&machine=' - + files.selectedHost - }).success(function(data, status, headers, config) { - $scope.tabs[index].content = data; - }).error(function(data, status, headers, config) { - AlertService.addDangerMessage(data); - }); + var fileNameForRefresh = this.$parent.tab.longTitle; + var hostForRefresh = null; + var splitNameForRefresh = fileNameForRefresh.split(":"); + if(splitNameForRefresh[0] && splitNameForRefresh[1]){ + hostForRefresh = splitNameForRefresh[0]; + fileNameForRefresh = splitNameForRefresh[1]; + $http( + { + method : 'GET', + url : 'logs?sessionId=' + + encodeURIComponent(sessionId) + '&userId=' + + encodeURIComponent(userId) + '&path=' + + fileNameForRefresh+ '&machine=' + + hostForRefresh + }).success(function(data, status, headers, config) { + $scope.tabs[index].content = data; + }).error(function(data, status, headers, config) { + AlertService.addDangerMessage(data); + }); + } }; }]) @@ -17087,7 +17174,7 @@ function returnNode(splitPath, tree, fullFilePath) { } } } -angular.module('RedhatAccess.template', ['common/views/alert.html', 'common/views/header.html', 'common/views/title.html', 'common/views/treenode.html', 'common/views/treeview-selector.html', 'security/login_form.html', 'security/login_status.html', 'search/views/accordion_search.html', 'search/views/accordion_search_results.html', 'search/views/list_search_results.html', 'search/views/resultDetail.html', 'search/views/search.html', 'search/views/search_form.html', 'search/views/standard_search.html', 'cases/views/alert.html', 'cases/views/attachLocalFile.html', 'cases/views/attachProductLogs.html', 'cases/views/attachmentsSection.html', 'cases/views/commentsSection.html', 'cases/views/compact.html', 'cases/views/compactCaseList.html', 'cases/views/compactEdit.html', 'cases/views/descriptionSection.html', 'cases/views/detailsSection.html', 'cases/views/edit.html', 'cases/views/list.html', 'cases/views/listAttachments.html', 'cases/views/listFilter.html', 'cases/views/new.html', 'cases/views/pageHeader.html', 'cases/views/recommendationsSection.html', 'log_viewer/views/log_viewer.html']); +angular.module('RedhatAccess.template', ['common/views/alert.html', 'common/views/header.html', 'common/views/title.html', 'common/views/treenode.html', 'common/views/treeview-selector.html', 'security/login_form.html', 'security/login_status.html', 'search/views/accordion_search.html', 'search/views/accordion_search_results.html', 'search/views/list_search_results.html', 'search/views/resultDetail.html', 'search/views/search.html', 'search/views/search_form.html', 'search/views/standard_search.html', 'cases/views/alert.html', 'cases/views/attachLocalFile.html', 'cases/views/attachProductLogs.html', 'cases/views/attachmentsSection.html', 'cases/views/commentsSection.html', 'cases/views/compact.html', 'cases/views/compactCaseList.html', 'cases/views/compactEdit.html', 'cases/views/descriptionSection.html', 'cases/views/detailsSection.html', 'cases/views/edit.html', 'cases/views/list.html', 'cases/views/listAttachments.html', 'cases/views/listFilter.html', 'cases/views/listNewAttachments.html', 'cases/views/new.html', 'cases/views/pageHeader.html', 'cases/views/recommendationsSection.html', 'log_viewer/views/log_viewer.html']); angular.module("common/views/alert.html", []).run(["$templateCache", function($templateCache) { $templateCache.put("common/views/alert.html", @@ -17108,7 +17195,7 @@ angular.module("common/views/alert.html", []).run(["$templateCache", function($t angular.module("common/views/header.html", []).run(["$templateCache", function($templateCache) { $templateCache.put("common/views/header.html", - "
\n" + + "
\n" + "
\n" + "
\n" + " \n" + @@ -17162,47 +17249,61 @@ angular.module("common/views/treeview-selector.html", []).run(["$templateCache", angular.module("security/login_form.html", []).run(["$templateCache", function($templateCache) { $templateCache.put("security/login_form.html", "
\n" + - "
\n" + - " Sign into the Red Hat Customer Portal\n" + - "
\n" + + "

\n" + + " Sign into the Red Hat Customer Portal\n" + + "

\n" + "
\n" + - "
\n" + - " \n" + - "
\n" + + "
\n" + + "
\n" + + " \n" + + "
\n" + + " Red Hat Access makes it easy for you to self-solve issues, diagnose problems, and engage\n" + + " with us via the Red Hat Customer Portal. To access Red Hat Customer Portal resources, you\n" + + " must enter valid portal credentials.\n" + + "
\n" + + "\n" + + "
\n" + " {{authError}}\n" + "
\n" + "
\n" + - " \n" + - "
\n" + - " \n" + + " \n" + + "
\n" + + " \n" + "
\n" + "
\n" + "
\n" + " \n" + - "
\n" + + "
\n" + " \n" + "
\n" + "
\n" + + "
\n" + + " Note: Red Hat Customer Portal credentials differ from the credentials used to log into this product.\n" + + "
\n" + + "\n" + + " \n" + + "
\n" + + "
\n" + "
\n" + - "
\n" + - " \n" + - "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + "
\n" + - " \n" + + "
\n" + "
"); }]); angular.module("security/login_status.html", []).run(["$templateCache", function($templateCache) { $templateCache.put("security/login_status.html", "
\n" + - " Logged into the Red Hat Customer Portal as {{securityService.loginStatus.loggedInUser}}  | \n" + + " Logged into the Red Hat Customer Portal as {{securityService.loginStatus.loggedInUser}}  | \n" + " Log out\n" + "\n" + - " Not Logged into the Red Hat Customer Portal | \n" + + " Not Logged into the Red Hat Customer Portal | \n" + " Log In\n" + "\n" + - " \n" + - " Verifying login status....\n" + + "\n" + "
\n" + ""); }]); @@ -17236,18 +17337,18 @@ angular.module("search/views/accordion_search_results.html", []).run(["$template " Open a New Support Case\n" + "
\n" + "
\n" + - "
\n" + - "
\n" + + "
\n" + + " \n" + " \n" + " \n" + " \n" + - " \n" + - " {{result.title}}\n" + + " \n" + + "  {{result.title}}\n" + " \n" + " \n" + " \n" + " \n" + - "
\n" + + " \n" + "
"); }]); @@ -17267,11 +17368,13 @@ angular.module("search/views/list_search_results.html", []).run(["$templateCache "
\n" + "
\n" + "
\n" + - "
\n" + - "
\n" + + "
\n" + + "
\n" + " To view a recommendation, click on it.\n" + "
\n" + - " \n" + + "
\n" + + " \n" + + "
\n" + "
"); }]); @@ -17302,7 +17405,7 @@ angular.module("search/views/search.html", []).run(["$templateCache", function($ angular.module("search/views/search_form.html", []).run(["$templateCache", function($templateCache) { $templateCache.put("search/views/search_form.html", - "
\n" + + "
\n" + "
\n" + "
\n" + "
\n" + @@ -17352,7 +17455,7 @@ angular.module("cases/views/attachProductLogs.html", []).run(["$templateCache", angular.module("cases/views/attachmentsSection.html", []).run(["$templateCache", function($templateCache) { $templateCache.put("cases/views/attachmentsSection.html", - "

Attachments

Server File(s) To Attach:
"); + "

Attachments

Server File(s) To Attach:
"); }]); angular.module("cases/views/commentsSection.html", []).run(["$templateCache", function($templateCache) { @@ -17386,7 +17489,7 @@ angular.module("cases/views/compact.html", []).run(["$templateCache", function($ angular.module("cases/views/compactCaseList.html", []).run(["$templateCache", function($templateCache) { $templateCache.put("cases/views/compactCaseList.html", - "
No cases found with given filters.
"); + "
No cases found with given filters.
"); }]); angular.module("cases/views/compactEdit.html", []).run(["$templateCache", function($templateCache) { @@ -17411,22 +17514,27 @@ angular.module("cases/views/edit.html", []).run(["$templateCache", function($tem angular.module("cases/views/list.html", []).run(["$templateCache", function($templateCache) { $templateCache.put("cases/views/list.html", - "
No cases found with given filters.
{{case.case_number}}{{case.summary}}{{case.product}} / {{case.version}}{{case.status}}{{case.severity}}{{case.owner}}{{case.created_date | date:'medium'}}{{case.last_modified_date | date:'medium'}}
"); + "
No cases found with given filters.
{{case.case_number}}{{case.summary}}{{case.product}} / {{case.version}}{{case.status}}{{case.severity}}{{case.owner}}{{case.created_date | date:'medium'}}{{case.last_modified_date | date:'medium'}}
"); }]); angular.module("cases/views/listAttachments.html", []).run(["$templateCache", function($templateCache) { $templateCache.put("cases/views/listAttachments.html", - "
No attachments added
FilenameDescriptionSizeAttachedAttached ByDelete
{{attachment.file_name}}
{{attachment.file_name}}
{{attachment.description}}{{attachment.length | bytes}}{{attachment.created_date | date:'medium'}}{{attachment.created_by}}
Delete
Delete
"); + "
No attachments added
Attached Files
FilenameDescriptionSizeAttachedAttached ByDelete
{{attachment.file_name}}
{{attachment.file_name}}
{{attachment.description}}{{attachment.length | bytes}}{{attachment.created_date | date:'medium'}}{{attachment.created_by}}
Delete
Delete
"); }]); angular.module("cases/views/listFilter.html", []).run(["$templateCache", function($templateCache) { $templateCache.put("cases/views/listFilter.html", - "
"); + "
"); +}]); + +angular.module("cases/views/listNewAttachments.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("cases/views/listNewAttachments.html", + "
Files to Attach
  • {{attachment.file_name}} ({{attachment.length | bytes}}) - {{attachment.description}}
  • {{attachment}}
"); }]); angular.module("cases/views/new.html", []).run(["$templateCache", function($templateCache) { $templateCache.put("cases/views/new.html", - "
Product:
Product Version:
Summary:
Description:
{{CaseService.case.product.name}} {{CaseService.case.version}}
{{CaseService.case.summary}}
{{CaseService.case.description}}
Severity:
Case Group:
Attachments:
Server File(s) To Attach:
"); + "
Product:
Product Version:
Summary:
Description:
{{CaseService.case.product.name}} {{CaseService.case.version}}
{{CaseService.case.summary}}
{{CaseService.case.description}}
Severity:
Case Group:
Attachments:
Server File(s) To Attach:
"); }]); angular.module("cases/views/pageHeader.html", []).run(["$templateCache", function($templateCache) { @@ -17441,81 +17549,121 @@ angular.module("cases/views/recommendationsSection.html", []).run(["$templateCac angular.module("log_viewer/views/log_viewer.html", []).run(["$templateCache", function($templateCache) { $templateCache.put("log_viewer/views/log_viewer.html", - "
\n" + - "
\n" + - " \n" + - "
\n" + - "
\n" + - "
\n" + - "
\n" + - "
\n" + - "

Available Log Files

\n" + - "
\n" + - "
\n" + - " \n" + - " \n" + - " \n" + - "
\n" + - "
\n" + - "
\n" + - "
\n" + - "
\n" + - " \n" + - "
\n" + - "
\n" + - " \n" + - "
\n" + - "
\n" + - "
\n" + - "
\n" + - "
\n" + - " \n" + - "
\n" + - "
\n" + - "
\n" + - " \n" + - " \n" + - " {{tab.shortTitle}}\n" + - " \n" + - " \n" + - " \n" + - " \n" + - "
\n" + - "
\n" + - " \n" + - " \n" + - " \n" + - "

{{tab.longTitle}}

\n" + - "
\n" + - " \n" + - "
\n" + - " \n" + - " \n" + - "
\n" + - "
\n" + - "
\n" + - "
\n" + + "
\n" + + "
\n" + + " \n" + + "
\n" + + "
\n" + + "
\n" + + "
\n" + + "
\n" + + "

Available Log Files

\n" + + "
\n" + + "
\n" + + " \n" + + "
\n" + "\n" + - "
{{tab.content}}
\n" + - "
\n" + - "
\n" + - " \n" + - " \n" + - "
\n" + - "
\n" + - "
\n" + - "
\n" + + " \n" + + " \n" + + "
\n" + + "
\n" + + "
\n" + + "
\n" + + "
\n" + + " \n" + + "
\n" + + "
\n" + + " \n" + + " \n" + + " \n" + + "
\n" + + "
\n" + + "
\n" + + "
\n" + + "
\n" + + " \n" + + " \n" + + " \n" + + "
\n" + + "
\n" + + "
\n" + + "
0\" fill-down ng-style=\"{ height: windowHeight }\" style=\"overflow:auto\">\n" + + "
\n" + + "
\n" + + "

Log File Viewer

\n" + + "

\n" + + "

The log file viewer gives the ability to diagnose application logs as well as file a support case with Red Hat Global Support Services.\n" + + "

\n" + + "
\n" + + "
\n" + + "
\n" + + "

\n" + + "  Select Log

\n" + + "

\n" + + " Simply navigate to and select a log file from the list on the left and click the 'Select File' button.\n" + + "\n" + + "

\n" + + "
\n" + + "
\n" + + "

\n" + + "  Diagnose\n" + + "

\n" + + "

\n" + + " Once you have selected your log file then you may diagnose any part of the log file and clicking the 'Red Hat Diagnose' button. This will then display relevant articles and solutons from our Red Hat Knowledge base.\n" + + "\n" + + "

\n" + + "
\n" + + "
\n" + + "

\n" + + "  Open a New Support Case\n" + + "

\n" + + "

\n" + + " In the event that you would still like to open a support case, select 'Open a New Support Case'. The case will be pre-populated with the portion of the log previously selected.\n" + + "\n" + + "

\n" + + "
\n" + + "\n" + + "
\n" + + " \n" + + " \n" + + " {{tab.shortTitle}}\n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + "
\n" + + " \n" + + " \n" + + " \n" + + "

{{tab.longTitle}}

\n" + + "
\n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + "\n" + + "
\n" + + "
\n" + + "
\n" + + "
\n" + + "\n" + + "
{{tab.content}}
\n" + + "
\n" + + "
\n" + + "
\n" + + "
\n" + + "
\n" + + "
\n" + + "
\n" + + "
\n" + "
"); }]); diff --git a/redhat-access/vendor/assets/stylesheets/redhat_access/redhat_access_angular_ui.css b/redhat-access/vendor/assets/stylesheets/redhat_access/redhat_access_angular_ui.css index 2ace99c..4de23c3 100644 --- a/redhat-access/vendor/assets/stylesheets/redhat_access/redhat_access_angular_ui.css +++ b/redhat-access/vendor/assets/stylesheets/redhat_access/redhat_access_angular_ui.css @@ -1 +1 @@ -div[data-angular-treeview]{-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;font-family:Tahoma;font-size:13px;color:#555;text-decoration:none}div[data-tree-model] ul{margin:0;padding:0;list-style:none;border:0;overflow:hidden}div[data-tree-model] li{position:relative;padding:0 0 0 20px;line-height:20px}div[data-tree-model] li .expanded{padding:1px 10px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAOw4AAA7DAZBCL/sAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAJBJREFUOE9j+P//P0UYqyApGIVzuN3kPzJGlsOF4Yy1xbpAChVAxVA0oGMwAbbt0TwEvtT8/8GuCjBGdxVYLVYDiAS4DUB2AR48PUoe0wCwX9EUgsSIwVgNQOdjxcBwghswP0MFLAAThLHxYbA6mBfA/oIJoinEhmGaUQwgRzPcABAGeYMYDFMPwygc0vF/BgDd66LkDQj2XgAAAABJRU5ErkJggg==);background-repeat:no-repeat}div[data-tree-model] li .collapsed{padding:1px 10px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAIhJREFUOE9j+P//P0UYqyApGIVzuN3kPzJGlsOF4Yy1xbpAChVAxVA0oGMwAbbt0TwEvtT8/8GuCjBGdxVYLVYDiAS4DUB2AR48PUoe0wCwX7EoxobRw4U6BszPUAEHHDEYrBbdALC/sCjGhrGGAUgQ7DQsGtAxVgNAGOQ0YjBMPQyjcEjH/xkAhEKsbVNNI1sAAAAASUVORK5CYII=);background-repeat:no-repeat}div[data-tree-model] li .normal{padding:1px 10px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAOCAYAAADwikbvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAOw4AAA7DAZBCL/sAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAHZJREFUOE9j+P//Pxiv7HH8jw/D1CFjOAOqACu4srcGqwFEa8ZmAEma0Q3A1JxbgIrRAH7NBABezT3bF8JxfU08WCwrJwlMgwD1bYbZguxXkBjIVmSboepwaCYA8GoGRQeyvy07S8AYBmhnMyGAUzOxGKLnPwMABE2jDc+cnOsAAAAASUVORK5CYII=);background-repeat:no-repeat}div[data-tree-model] li i,div[data-tree-model] li span{cursor:pointer}div[data-tree-model] li .selected{background-color:#adf;font-weight:700;padding:1px 5px}.ng-table th{text-align:center;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ng-table th.sortable{cursor:pointer}.ng-table th.sortable div{padding-right:18px;position:relative}.ng-table th.sortable div:after,.ng-table th.sortable div:before{content:"";border-width:0 4px 4px;border-style:solid;border-color:#000 transparent;visibility:visible;right:8px;top:50%;position:absolute;opacity:.3;margin-top:-4px}.ng-table th.sortable div:before{margin-top:2px;border-bottom:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000}.ng-table th.sortable div:hover:after,.ng-table th.sortable div:hover:before{opacity:1;visibility:visible}.ng-table th.sortable.sort-asc,.ng-table th.sortable.sort-desc{background-color:rgba(141,192,219,.25);text-shadow:0 1px 1px rgba(255,255,255,.75)}.ng-table th.sortable.sort-asc div:after,.ng-table th.sortable.sort-desc div:after{margin-top:-2px}.ng-table th.sortable.sort-asc div:before,.ng-table th.sortable.sort-desc div:before{visibility:hidden}.ng-table th.sortable.sort-asc div:after,.ng-table th.sortable.sort-asc div:hover:after{visibility:visible;filter:alpha(opacity=60);-khtml-opacity:.6;-moz-opacity:.6;opacity:.6}.ng-table th.sortable.sort-desc div:after{border-bottom:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000;visibility:visible;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:alpha(opacity=60);-khtml-opacity:.6;-moz-opacity:.6;opacity:.6}.ng-table th.filter .input-filter{margin:0;display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.ng-table+.pagination{margin-top:0}@media only screen and (max-width:800px){.ng-table-responsive{border-bottom:1px solid #999}.ng-table-responsive tr{border-top:1px solid #999;border-left:1px solid #999;border-right:1px solid #999}.ng-table-responsive td:before{position:absolute;padding:8px;left:0;top:0;width:50%;white-space:nowrap;text-align:left;font-weight:700}.ng-table-responsive thead tr th{text-align:left}.ng-table-responsive thead tr.ng-table-filters th{padding:0}.ng-table-responsive thead tr.ng-table-filters th form>div{padding:8px}.ng-table-responsive td{border:0;border-bottom:1px solid #eee;position:relative;padding-left:50%;white-space:normal;text-align:left}.ng-table-responsive td:before{content:attr(data-title-text)}.ng-table-responsive,.ng-table-responsive tbody,.ng-table-responsive td,.ng-table-responsive th,.ng-table-responsive thead,.ng-table-responsive tr{display:block}}li.rha-treeselector-node{list-style-type:none}.rha-treeselector-node .icon{display:block;float:left;width:16px;height:16px}.rha-treeselector-node .expanded{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAOw4AAA7DAZBCL/sAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAJBJREFUOE9j+P//P0UYqyApGIVzuN3kPzJGlsOF4Yy1xbpAChVAxVA0oGMwAbbt0TwEvtT8/8GuCjBGdxVYLVYDiAS4DUB2AR48PUoe0wCwX9EUgsSIwVgNQOdjxcBwghswP0MFLAAThLHxYbA6mBfA/oIJoinEhmGaUQwgRzPcABAGeYMYDFMPwygc0vF/BgDd66LkDQj2XgAAAABJRU5ErkJggg==)}.rha-treeselector-node .collapsed{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAIhJREFUOE9j+P//P0UYqyApGIVzuN3kPzJGlsOF4Yy1xbpAChVAxVA0oGMwAbbt0TwEvtT8/8GuCjBGdxVYLVYDiAS4DUB2AR48PUoe0wCwX7EoxobRw4U6BszPUAEHHDEYrBbdALC/sCjGhrGGAUgQ7DQsGtAxVgNAGOQ0YjBMPQyjcEjH/xkAhEKsbVNNI1sAAAAASUVORK5CYII=)}.rha-treeselector-node .label{color:#000;font-size:100%;font-weight:400;padding-left:2px}input[type=checkbox]{margin:4px 4px 0}#rha-login-modal-body{padding:0 30px;max-height:auto}.rha-login-modal div.modal-dialog{width:300px;padding:5px}.rha-login-modal .modal-header{padding:5px}.rha-login-modal .form-group{margin-bottom:5px}.form-horizontal .control-label{padding-top:1px}#rha-login-modal-buttons{margin-bottom:10px}.rha-search-spinner{padding:1px;background-image:url(data:image/gif;base64,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);background-repeat:no-repeat;display:inline-block;width:32px;height:32px;margin-bottom:5px}th{font-weight:400;color:#777}.details-table>tbody>tr>td,.details-table>tbody>tr>th{padding:8px 0;border-top:0}.section-header{padding:0;border-bottom:solid 1px;border-color:grey}.bold,.comment-creator{font-weight:700}.create-field{padding-bottom:8px}.bottom-border{margin-bottom:14px;padding-bottom:7px;border-bottom:1px solid #ccc}.create-case-section{padding:10px 0}.col-no-padding{padding-left:0;padding-right:0}.details-table-header{width:40%}.side-padding{padding-left:15px;padding-right:15px}.select-feedback{left:-34px!important;top:0!important}div#redhat-access-case .has-feedback .form-control-feedback{right:10px;top:0}div#redhat-access-case .form-group{margin-bottom:0}div#redhat-access-case .table>tbody>tr>th{vertical-align:middle}div#redhat-access-case .glyphicon-asterisk{color:#428bca}div#redhat-access-case a{cursor:pointer}div#redhat-access-case div .panel-body{overflow:auto!important}.rha-hidden{display:none}.container-offset{padding:0 15px}div#rha-case-details .table{margin-bottom:0}div.server-attach-header{font-weight:700;margin-bottom:5px}div#redhat-access-case .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0;border-top:0}div#redhat-access-case .list-group-item:last-child{border-bottom-right-radius:0;border-bottom-left-radius:0}div#redhat-access-case .list-group-item{border-right:0}.col-fluid{position:relative;min-height:1px;overflow:auto}.nav-side-bar{display:block}.nav-side-bar.showMe{width:15px;padding-left:0}.hideable-side-bar{display:block}.hideable-side-bar.showMe{display:none}.solutions{width:15px;padding-right:0}.solutions.showMe{width:50%;display:block}.left-side-glyphicon{position:absolute;top:50%;left:100%;margin-top:-7px;margin-left:-15px}.left-side-glyphicon.showMe{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}#diagnoseButton{float:right}.panel-body{overflow:auto}.right-side-glyphicon{top:50%;position:absolute;right:100%;margin-top:-7px;margin-right:-15px;display:block}.right-side-glyphicon.showMe{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.fileList{overflow:auto;padding-right:0}.no-line-wrap{word-wrap:normal;white-space:pre;overflow:auto}.resizeable-solution-view{display:none;overflow:auto;padding:0 15px}.btn-group,.resizeable-solution-view.showMe{display:block}.btn-group.hideMe{display:none}.dropdown-toggle{border-radius:3px!important;float:none!important}.machines-spinner{display:none}.machines-spinner.showMe{display:block}.tabs-spinner{display:none}.tabs-spinner.showMe{display:inline-block}.rha-search-spinner{margin-bottom:0!important}.file-list-title{display:none}.file-list-title.showMe{display:block} \ No newline at end of file +div[data-angular-treeview]{-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;font-family:Tahoma;font-size:13px;color:#555;text-decoration:none}div[data-tree-model] ul{margin:0;padding:0;list-style:none;border:0;overflow:hidden}div[data-tree-model] li{position:relative;padding:0 0 0 20px;line-height:20px}div[data-tree-model] li .expanded{padding:1px 10px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAOw4AAA7DAZBCL/sAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAJBJREFUOE9j+P//P0UYqyApGIVzuN3kPzJGlsOF4Yy1xbpAChVAxVA0oGMwAbbt0TwEvtT8/8GuCjBGdxVYLVYDiAS4DUB2AR48PUoe0wCwX9EUgsSIwVgNQOdjxcBwghswP0MFLAAThLHxYbA6mBfA/oIJoinEhmGaUQwgRzPcABAGeYMYDFMPwygc0vF/BgDd66LkDQj2XgAAAABJRU5ErkJggg==);background-repeat:no-repeat}div[data-tree-model] li .collapsed{padding:1px 10px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAIhJREFUOE9j+P//P0UYqyApGIVzuN3kPzJGlsOF4Yy1xbpAChVAxVA0oGMwAbbt0TwEvtT8/8GuCjBGdxVYLVYDiAS4DUB2AR48PUoe0wCwX7EoxobRw4U6BszPUAEHHDEYrBbdALC/sCjGhrGGAUgQ7DQsGtAxVgNAGOQ0YjBMPQyjcEjH/xkAhEKsbVNNI1sAAAAASUVORK5CYII=);background-repeat:no-repeat}div[data-tree-model] li .normal{padding:1px 10px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAOCAYAAADwikbvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAOw4AAA7DAZBCL/sAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAHZJREFUOE9j+P//Pxiv7HH8jw/D1CFjOAOqACu4srcGqwFEa8ZmAEma0Q3A1JxbgIrRAH7NBABezT3bF8JxfU08WCwrJwlMgwD1bYbZguxXkBjIVmSboepwaCYA8GoGRQeyvy07S8AYBmhnMyGAUzOxGKLnPwMABE2jDc+cnOsAAAAASUVORK5CYII=);background-repeat:no-repeat}div[data-tree-model] li i,div[data-tree-model] li span{cursor:pointer}div[data-tree-model] li .selected{background-color:#adf;font-weight:700;padding:1px 5px}.ng-table th{text-align:center;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ng-table th.sortable{cursor:pointer}.ng-table th.sortable div{padding-right:18px;position:relative}.ng-table th.sortable div:after,.ng-table th.sortable div:before{content:"";border-width:0 4px 4px;border-style:solid;border-color:#000 transparent;visibility:visible;right:8px;top:50%;position:absolute;opacity:.3;margin-top:-4px}.ng-table th.sortable div:before{margin-top:2px;border-bottom:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000}.ng-table th.sortable div:hover:after,.ng-table th.sortable div:hover:before{opacity:1;visibility:visible}.ng-table th.sortable.sort-asc,.ng-table th.sortable.sort-desc{background-color:rgba(141,192,219,.25);text-shadow:0 1px 1px rgba(255,255,255,.75)}.ng-table th.sortable.sort-asc div:after,.ng-table th.sortable.sort-desc div:after{margin-top:-2px}.ng-table th.sortable.sort-asc div:before,.ng-table th.sortable.sort-desc div:before{visibility:hidden}.ng-table th.sortable.sort-asc div:after,.ng-table th.sortable.sort-asc div:hover:after{visibility:visible;filter:alpha(opacity=60);-khtml-opacity:.6;-moz-opacity:.6;opacity:.6}.ng-table th.sortable.sort-desc div:after{border-bottom:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000;visibility:visible;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:alpha(opacity=60);-khtml-opacity:.6;-moz-opacity:.6;opacity:.6}.ng-table th.filter .input-filter{margin:0;display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.ng-table+.pagination{margin-top:0}@media only screen and (max-width:800px){.ng-table-responsive{border-bottom:1px solid #999}.ng-table-responsive tr{border-top:1px solid #999;border-left:1px solid #999;border-right:1px solid #999}.ng-table-responsive td:before{position:absolute;padding:8px;left:0;top:0;width:50%;white-space:nowrap;text-align:left;font-weight:700}.ng-table-responsive thead tr th{text-align:left}.ng-table-responsive thead tr.ng-table-filters th{padding:0}.ng-table-responsive thead tr.ng-table-filters th form>div{padding:8px}.ng-table-responsive td{border:0;border-bottom:1px solid #eee;position:relative;padding-left:50%;white-space:normal;text-align:left}.ng-table-responsive td:before{content:attr(data-title-text)}.ng-table-responsive,.ng-table-responsive tbody,.ng-table-responsive td,.ng-table-responsive th,.ng-table-responsive thead,.ng-table-responsive tr{display:block}}li.rha-treeselector-node{list-style-type:none}.rha-treeselector-node .icon{display:block;float:left;width:16px;height:16px}.rha-treeselector-node .expanded{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAOw4AAA7DAZBCL/sAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAJBJREFUOE9j+P//P0UYqyApGIVzuN3kPzJGlsOF4Yy1xbpAChVAxVA0oGMwAbbt0TwEvtT8/8GuCjBGdxVYLVYDiAS4DUB2AR48PUoe0wCwX9EUgsSIwVgNQOdjxcBwghswP0MFLAAThLHxYbA6mBfA/oIJoinEhmGaUQwgRzPcABAGeYMYDFMPwygc0vF/BgDd66LkDQj2XgAAAABJRU5ErkJggg==)}.rha-treeselector-node .collapsed{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAIhJREFUOE9j+P//P0UYqyApGIVzuN3kPzJGlsOF4Yy1xbpAChVAxVA0oGMwAbbt0TwEvtT8/8GuCjBGdxVYLVYDiAS4DUB2AR48PUoe0wCwX7EoxobRw4U6BszPUAEHHDEYrBbdALC/sCjGhrGGAUgQ7DQsGtAxVgNAGOQ0YjBMPQyjcEjH/xkAhEKsbVNNI1sAAAAASUVORK5CYII=)}.rha-treeselector-node .label{color:#000;font-size:100%;font-weight:400;padding-left:2px}input[type=checkbox]{margin:4px 4px 0}#rha-login-modal-body{padding:0 30px;max-height:auto}.rha-login-modal div.modal-dialog{width:600px;padding:10px}.rha-login-modal .modal-header{padding-left:30px}.rha-login-modal .form-group{margin-bottom:5px}.form-horizontal .control-label{padding-top:1px}#rha-login-modal-buttons{margin-bottom:10px}.rha-search-spinner{padding:1px;background-image:url(data:image/gif;base64,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);background-repeat:no-repeat;display:inline-block;width:32px;height:32px;margin-bottom:5px}.panel-group .panel-title>a:before{content:none}th{font-weight:400;color:#777}.details-table>tbody>tr>td,.details-table>tbody>tr>th{padding:8px 0;border-top:0}.section-header{padding:0;border-bottom:solid 1px;border-color:grey}.bold,.comment-creator{font-weight:700}.create-field{padding-bottom:8px}.bottom-border{margin-bottom:14px;padding-bottom:7px;border-bottom:1px solid #ccc}.create-case-section{padding:10px 0}.col-no-padding{padding-left:0;padding-right:0}.details-table-header{width:40%}.side-padding{padding-left:15px;padding-right:15px}.select-feedback{left:-34px!important;top:0!important}div#redhat-access-case .has-feedback .form-control-feedback{right:10px;top:0}div#redhat-access-case .form-group{margin-bottom:0}div#redhat-access-case .table>tbody>tr>th{vertical-align:middle}div#redhat-access-case .glyphicon-asterisk{color:#428bca}div#redhat-access-case a{cursor:pointer}div#redhat-access-case div .panel-body{overflow:auto!important}.rha-hidden{display:none}.container-offset{padding:0 15px}div#rha-case-details .table{margin-bottom:0}div.server-attach-header{font-weight:700;margin-bottom:5px}div#redhat-access-compact-list .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0;border-top:0}div#redhat-access-compact-list .list-group-item:last-child{border-bottom-right-radius:0;border-bottom-left-radius:0}div#redhat-access-compact-list .list-group-item{border-right:0}.col-fluid{position:relative;min-height:1px;overflow:auto}.nav-side-bar{display:block}.nav-side-bar.showMe{width:15px;padding-left:0}.hideable-side-bar{display:block}.hideable-side-bar.showMe{display:none}.solutions{width:15px;padding-right:0}.solutions.showMe{width:50%;display:block}.left-side-glyphicon{position:absolute;top:50%;left:100%;margin-top:-7px;margin-left:-15px}.left-side-glyphicon.showMe{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}#diagnoseButton{float:right}.panel-body{overflow:auto}.right-side-glyphicon{top:50%;position:absolute;right:100%;margin-top:-7px;margin-right:-15px;display:block}.right-side-glyphicon.showMe{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.fileList{overflow:auto;padding-right:0}.no-line-wrap{word-wrap:normal;white-space:pre;overflow:auto}.resizeable-solution-view{display:none;overflow:auto;padding:0 15px}.btn-group,.resizeable-solution-view.showMe{display:block}.btn-group.hideMe{display:none}.dropdown-toggle{border-radius:3px!important;float:none!important}.machines-spinner{display:none}.machines-spinner.showMe{display:block}.tabs-spinner{display:none}.tabs-spinner.showMe{display:inline-block}.rha-search-spinner{margin-bottom:0!important}.file-list-title{display:none}.file-list-title.showMe{display:block}.logs-instruction-pane{padding-left:20px;padding-right:20px} \ No newline at end of file