diff --git a/neutrino-custom/base.js b/neutrino-custom/base.js index 2a4dfbbf337..3dec89e380c 100644 --- a/neutrino-custom/base.js +++ b/neutrino-custom/base.js @@ -33,7 +33,7 @@ module.exports = neutrino => { // Include files from node_modules in the separate, more-cacheable vendor chunk: const jsDeps = [ 'angular', 'angular-cookies', 'angular-local-storage', 'angular-resource', - 'angular-route', 'angular-sanitize', 'angular-toarrayfilter', 'angular-ui-bootstrap', + 'angular-route', 'angular-sanitize', 'angular-toarrayfilter', 'angular1-ui-bootstrap4', 'angular-ui-router', 'bootstrap/dist/js/bootstrap', 'hawk', 'jquery', 'jquery.scrollto', 'js-yaml', 'mousetrap', 'react', 'react-dom', 'taskcluster-client', 'numeral', 'metrics-graphics']; jsDeps.map(dep => @@ -166,6 +166,8 @@ module.exports = neutrino => { jQuery: require.resolve('jquery'), 'window.$': require.resolve('jquery'), 'window.jQuery': require.resolve('jquery'), + // Required by Bootstrap 4: https://getbootstrap.com/docs/4.0/getting-started/webpack/ + Popper: ['popper.js', 'default'], React: require.resolve('react'), _: require.resolve('lodash'), treeherder: require.resolve(path.join(UI, 'js/treeherder.js')), diff --git a/package.json b/package.json index f0c50a119ef..64c0b9a64b8 100644 --- a/package.json +++ b/package.json @@ -20,9 +20,9 @@ "angular-route": "1.5.11", "angular-sanitize": "1.5.11", "angular-toarrayfilter": "1.0.2", - "angular-ui-bootstrap": "1.3.3", "angular-ui-router": "0.4.3", - "bootstrap": "3.3.7", + "angular1-ui-bootstrap4": "2.4.22", + "bootstrap": "4.0.0-beta.2", "deepmerge": "1.5.2", "font-awesome": "4.7.0", "hawk": "6.0.2", @@ -39,6 +39,7 @@ "neutrino-preset-react": "4.2.3", "ngreact": "0.5.0", "numeral": "2.0.6", + "popper.js": "1.12.6", "raw-loader": "0.5.1", "react": "15.3.2", "react-dom": "15.3.2", diff --git a/tests/ui/unit/init.js b/tests/ui/unit/init.js index 5e15febfbf9..f4886ee8748 100644 --- a/tests/ui/unit/init.js +++ b/tests/ui/unit/init.js @@ -21,7 +21,7 @@ require('angular-toarrayfilter'); require('mousetrap'); require('js-yaml'); require('ngreact'); -require('angular-ui-bootstrap'); +require('angular1-ui-bootstrap4'); require('angular-marked'); require('../../../ui/vendor/resizer.js'); diff --git a/ui/css/failureviewer.css b/ui/css/failureviewer.css index 375c1dc76e7..a415ea18a34 100644 --- a/ui/css/failureviewer.css +++ b/ui/css/failureviewer.css @@ -17,13 +17,17 @@ body { margin-bottom: 10px; /* Breathing space for run-data */ } -.navbar > li > a, .navbar-default > li > a, .navbar-nav > li > a { +.nav li { + padding-right: 20px; +} + +.navbar > li > a, .navbar-light > li > a, .navbar-nav > li > a { padding: 0; line-height: inherit; } #fv-logo { - padding: 14px 15px 0 15px; + padding: 6px 15px 0 10px; border: none; background: #f8f8f8; } diff --git a/ui/css/logviewer.css b/ui/css/logviewer.css index f8a1f61334c..272e1831cc4 100644 --- a/ui/css/logviewer.css +++ b/ui/css/logviewer.css @@ -24,17 +24,31 @@ body { padding-bottom: 8px; } -.navbar-nav > li > a { +.navbar-light { + background-color: #f8f8f8; + border-color: #e7e7e7; + padding: 0; +} + +.navbar-row { + flex-direction: row; +} + +.navbar-row li { + align-self: center; +} + +.navbar-row > li > a { padding: 10px 15px; font-size: 12px; } -.navbar-nav > li > div { +.navbar-row > li > div { padding: 10px 15px; line-height: 20px; } -.navbar-nav > li > span { +.navbar-row > li > span { line-height: 20px; } @@ -65,12 +79,10 @@ body { } .lv-line-no { - width: 3em; -} - -.lv-line-no.label { - border-radius: 0px; - margin: 0em 0.6em 0em 0em; + width: 4em; + padding: 2px 1px 4px 5px; + border-radius: 0; + margin: 0 0.2em 0 0; } .lv-error-line { @@ -142,7 +154,7 @@ div.lv-step { background-color: #FFF; } -.lv-actionbtn span { +.lv-actionbtn span, .navbar-default li > a { color: #777; } diff --git a/ui/css/perf.css b/ui/css/perf.css index 47ce0f35aaf..ee9f3eea45e 100644 --- a/ui/css/perf.css +++ b/ui/css/perf.css @@ -30,6 +30,10 @@ to { opacity: 0; } background: #f8f8f8; } +login { + align-self: center; +} + #graph-chooser { flex: none; width: 240px; padding: 8px; } #data-display { flex: auto; } @@ -143,6 +147,10 @@ to { opacity: 0; } font-weight: bold; } +.subtest-header th { + padding: 5px; +} + .subtest-improvement { background: green; color: white; @@ -195,7 +203,7 @@ to { opacity: 0; } .btn-group-vertical { flex: none; position: relative; - top: 310px; + top: 115px; padding: 3px; } @@ -215,7 +223,7 @@ to { opacity: 0; } .choose-test-list { margin-top: 8px; - height: 200px; + height: 85px; } .test-loading-placeholder { @@ -225,6 +233,11 @@ to { opacity: 0; } /* Compare interface stuff */ +ph-compare-table hr { + margin-top: 20px; + margin-bottom: 20px; +} + .push-information { font-size: 18px; color: #777; @@ -245,10 +258,6 @@ to { opacity: 0; } flex-flow: row; } -.centered-element { - flex: none; -} - .compare-form { align: center; display: flex; @@ -261,7 +270,7 @@ to { opacity: 0; } flex: none; } -.compare-form .form-group .panel { +.compare-form .form-group .card { flex: none; width: 360px; height: 250px; @@ -275,9 +284,12 @@ to { opacity: 0; } left: -5px; } -.compare-form .form-group .input-group-btn { - flex: none; - width: 80px; +.compare-form .input-group-btn button:hover { + background-color: darkgrey; +} + +.compare-form .input-group-btn button:focus { + box-shadow: none; } .compare-table td, th { @@ -386,10 +398,15 @@ span.compare-notsure { cursor: pointer; } +.alert-summary { + margin-bottom: 20px; +} + .alert-summary-heading { display: flex; flex-flow: row; padding: 0; + border-bottom: 1px solid transparent; } .alert-summary-header-element { @@ -399,7 +416,8 @@ span.compare-notsure { .alert-summary-title { flex: auto; - padding: 8px 4px; + padding: 9px 4px; + line-height: 19px; } .alert-summary-title .anchor { @@ -407,12 +425,34 @@ span.compare-notsure { font-weight: bold; } +.alert-summary-title .dropdown { + vertical-align: text-bottom; +} + .alert-summary-title .icon-superscript { vertical-align: super; font-size: 0.625em; margin-left: -0.2em; } +.alert-summary-title #push-dropdown { + padding: 0; + margin-bottom: -4px; +} + +.alert-summary .compare-table { + margin-bottom: 0; +} + +.alert-summary .card-body { + border-top: 1px solid #ddd; + padding: 15px; +} + +.alert-summary .card-body p { + margin: 0 0 10px; +} + .dropdown { padding: 0; vertical-align: inherit; @@ -430,9 +470,11 @@ span.compare-notsure { /* Table widths for alerts */ td.alert-checkbox { width: 30px; + padding: 8px; } td.alert-title { text-align: left; + padding: 8px; } td.alert-value { width: 140px; @@ -461,6 +503,10 @@ td.alert-confidence { text-decoration: line-through; } +.alert-selects .form-group { + margin-right: 6px; +} + .compare-table-tooltip .tooltip-inner { max-width: 280px; } @@ -497,3 +543,27 @@ td.alert-confidence { .replicate-graph .mg-category-guides line { stroke: #ffffff; } + +/* The paginator in angular1-ui-bootstrap4 always tries to put chevrons + for the prev/next buttons, but they look all messed up sizing wise. + The paginator SHOULD show the text of Next/Previous, but it's not, so this + is a work-around.*/ +li.page-item .material-icons { + font-size: 0; +} + +li.pagination-prev .material-icons::before { + content: "Previous"; + font-size: 14px; + font-style: normal; +} + +li.pagination-next .material-icons::before { + content: "Next"; + font-size: 14px; + font-style: normal; +} + +.pagination { + margin: 20px 0; +} diff --git a/ui/css/treeherder-global.css b/ui/css/treeherder-global.css index be26a83e6a3..634f7a425ba 100755 --- a/ui/css/treeherder-global.css +++ b/ui/css/treeherder-global.css @@ -13,6 +13,7 @@ html, body { height: 100%; font-size: 14px; line-height: 1.42; + overflow-x: hidden; } body { @@ -20,12 +21,20 @@ body { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; } -a:visited { +a:visited, .link-style:visited { color: purple; } a { color: #337ab7; + cursor: pointer; +} + +/* Bootstrap 4 will not show as a link style if it has no href. + This adds that style back. */ +.link-style { + color: #337ab7 !important; + cursor: pointer; } #global-container { @@ -41,7 +50,7 @@ a { overflow-x: hidden; } -.pagination, .carousel, .panel-title a { +.pagination, .panel-title a { cursor: pointer; } @@ -50,11 +59,11 @@ a { visibility: hidden; } -/* Presently Tier menu, Similar Jobs panel */ +/* Similar Jobs panel */ .checkbox { min-height: 20px; padding-left: 4px; - padding-top: 4px; + padding-top: 2px; justify-content: center; } @@ -76,9 +85,16 @@ input[type="checkbox"] { cursor: not-allowed; } -/* Spacing for menus with adjacent checkboxes */ -.checkbox-dropdown-menu { - padding-left: 8px; +/* For cases where the base Bootstrap 4 equivalent doesn't + work, due to our special uses.*/ +.nav-dropdown-menu-right { + left: auto; + right: 0; +} + +.form-control:focus { + border: 1px solid #ced4da; + box-shadow: none; } /* Spacing for menus with adjacent icons */ @@ -86,6 +102,10 @@ input[type="checkbox"] { width: 20px; } +.modal-header .close:hover { + cursor: pointer; +} + /* * Icons */ @@ -252,6 +272,12 @@ input[type="checkbox"] { font-size: 12px; } +.btn-sm { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; +} + .btn-light-bordered { border: 1px solid darkgrey; background-color: white; diff --git a/ui/css/treeherder-info-panel.css b/ui/css/treeherder-info-panel.css index b0d28412d3b..3787a0eb364 100644 --- a/ui/css/treeherder-info-panel.css +++ b/ui/css/treeherder-info-panel.css @@ -42,10 +42,16 @@ div#info-panel .navbar-nav > ul { height: 32px; } -div#info-panel .navbar-nav > li > a, -div#info-panel .navbar-nav > li > button { - padding: 6px 15px; - line-height: 19px; +div#info-panel .navbar-nav.actionbar-nav > li > a, +div#info-panel .navbar-nav.actionbar-nav > li > button { + padding: 8px 15px; + line-height: 16px; +} + +div#info-panel .navbar-nav.tab-headers > li > a, +div#info-panel .navbar-nav.tab-headers > li > button { + padding: 8px 15px; + line-height: 30px; } div#info-panel .navbar-nav > li > button { @@ -79,11 +85,23 @@ div#info-panel .info-panel-navbar > ul.tab-headers > li { border: 1px solid transparent; color: #CED3D9; display: flex; + flex-direction: row; z-index: 100; + height: 33px; +} + +.info-panel-navbar li { + align-self: center; } .info-panel-navbar-tabs { justify-content: space-between; + flex-direction: row; +} + +.tab-headers { + flex-direction: row; + min-width: 550px; } .info-panel-navbar-controls { @@ -92,6 +110,7 @@ div#info-panel .info-panel-navbar > ul.tab-headers > li { .info-panel-navbar .navbar-nav { display: flex; + flex-direction: row; } .info-panel-navbar .navbar-nav > li { @@ -101,6 +120,7 @@ div#info-panel .info-panel-navbar > ul.tab-headers > li { .info-panel-navbar .navbar-nav > li > a, .info-panel-navbar .navbar-nav > li > button { color: #9FA3A5; + padding: 7px 15px; } div#info-panel .navbar-nav > li > a:hover, @@ -130,7 +150,10 @@ div#info-panel .navbar-nav > li > button.disabled:active div#info-panel .info-panel-navbar .navbar-nav > li.active a, div#info-panel .info-panel-navbar .navbar-nav > li.active a:hover, -div#info-panel .info-panel-navbar .navbar-nav > li.active a:focus { +div#info-panel .info-panel-navbar .navbar-nav > li.active a:focus, +div#info-panel .info-panel-navbar > li.active a, +div#info-panel .info-panel-navbar > li.active a:hover, +div#info-panel .info-panel-navbar > li.active a:focus { background-color: #1A4666; color: #EEF0F2; } @@ -166,16 +189,47 @@ div#info-panel .info-panel-navbar .navbar-nav > li.active a:focus { 100% { transform: rotate(1turn); } } +.actionbar-nav { + flex-direction: row; +} + .actionbar-nav > li { /* Override padding on all icons to keep compact */ padding: 0 !important; } .actionbar-menu { - /* We have to override non-responsive bootstrap for correct styling */ - margin-top: 1px !important; + margin-top: 23px; margin-left: 6px; - border-radius: 4px !important; + border-radius: 4px; + top: 0; + right: 0; + left: auto; +} + +#actionbar-menu-btn { + padding: 8px 13px; + margin-right: 1px; +} + +#actionbar-menu-btn:hover { + background-color: #262626; + cursor: pointer; +} + +#actionbar-menu-btn:focus { + box-shadow: none; + border: none; + outline: none; +} + +/* Remove the caret from the ellipses */ +#actionbar-menu-btn.dropdown-toggle::after { + display:none +} + +#job-details-actionbar #actionbar-menu-btn + ul > li { + padding: 0; } /* @@ -423,6 +477,7 @@ ul.failure-summary-list li .btn-xs { .btn-similar-jobs { background: #fff; cursor: default; + font-size: 12px; } .similar_jobs { @@ -626,7 +681,7 @@ th-error-line.ignored { color: darkgrey; } -th-error-line .label-ignored { +th-error-line .badge-ignored { background-color: lightgrey; } diff --git a/ui/css/treeherder-job-buttons.css b/ui/css/treeherder-job-buttons.css index 8a71d8f6c16..4d9b8872935 100644 --- a/ui/css/treeherder-job-buttons.css +++ b/ui/css/treeherder-job-buttons.css @@ -210,10 +210,10 @@ .btn-orange.disabled:focus, .btn-orange.disabled:active, .btn-orange.disabled.active, -.btn-orange[disabled]:hover, -.btn-orange[disabled]:focus, -.btn-orange[disabled]:active, -.btn-orange[disabled].active, +.btn-orange:disabled:hover, +.btn-orange:disabled:focus, +.btn-orange:disabled:active, +.btn-orange:disabled.active, fieldset[disabled] .btn-orange:hover, fieldset[disabled] .btn-orange:focus, fieldset[disabled] .btn-orange:active, @@ -242,10 +242,10 @@ fieldset[disabled] .btn-orange.active { .btn-orange-classified.disabled:focus, .btn-orange-classified.disabled:active, .btn-orange-classified.disabled.active, -.btn-orange-classified[disabled]:hover, -.btn-orange-classified[disabled]:focus, -.btn-orange-classified[disabled]:active, -.btn-orange-classified[disabled].active, +.btn-orange-classified:disabled:hover, +.btn-orange-classified:disabled:focus, +.btn-orange-classified:disabled:active, +.btn-orange-classified:disabled.active, fieldset[disabled] .btn-orange-classified:hover, fieldset[disabled] .btn-orange-classified:focus, fieldset[disabled] .btn-orange-classified:active, @@ -272,10 +272,10 @@ fieldset[disabled] .btn-orange-classified.active { .btn-red.disabled:focus, .btn-red.disabled:active, .btn-red.disabled.active, -.btn-red[disabled]:hover, -.btn-red[disabled]:focus, -.btn-red[disabled]:active, -.btn-red[disabled].active, +.btn-red:disabled:hover, +.btn-red:disabled:focus, +.btn-red:disabled:active, +.btn-red:disabled.active, fieldset[disabled] .btn-red:hover, fieldset[disabled] .btn-red:focus, fieldset[disabled] .btn-red:active, @@ -302,10 +302,10 @@ fieldset[disabled] .btn-red.active { .btn-red-classified.disabled:focus, .btn-red-classified.disabled:active, .btn-red-classified.disabled.active, -.btn-red-classified[disabled]:hover, -.btn-red-classified[disabled]:focus, -.btn-red-classified[disabled]:active, -.btn-red-classified[disabled].active, +.btn-red-classified:disabled:hover, +.btn-red-classified:disabled:focus, +.btn-red-classified:disabled:active, +.btn-red-classified:disabled.active, fieldset[disabled] .btn-red-classified:hover, fieldset[disabled] .btn-red-classified:focus, fieldset[disabled] .btn-red-classified:active, @@ -339,10 +339,10 @@ fieldset[disabled] .btn-red-classified.active { .btn-dkblue.disabled:focus, .btn-dkblue.disabled:active, .btn-dkblue.disabled.active, -.btn-dkblue[disabled]:hover, -.btn-dkblue[disabled]:focus, -.btn-dkblue[disabled]:active, -.btn-dkblue[disabled].active, +.btn-dkblue:disabled:hover, +.btn-dkblue:disabled:focus, +.btn-dkblue:disabled:active, +.btn-dkblue:disabled.active, fieldset[disabled] .btn-dkblue:hover, fieldset[disabled] .btn-dkblue:focus, fieldset[disabled] .btn-dkblue:active, @@ -374,10 +374,10 @@ fieldset[disabled] .btn-dkblue.active { .btn-green.disabled:focus, .btn-green.disabled:active, .btn-green.disabled.active, -.btn-green[disabled]:hover, -.btn-green[disabled]:focus, -.btn-green[disabled]:active, -.btn-green[disabled].active, +.btn-green:disabled:hover, +.btn-green:disabled:focus, +.btn-green:disabled:active, +.btn-green:disabled.active, fieldset[disabled] .btn-green:hover, fieldset[disabled] .btn-green:focus, fieldset[disabled] .btn-green:active, @@ -403,10 +403,10 @@ fieldset[disabled] .btn-green.active { .btn-purple.disabled:focus, .btn-purple.disabled:active, .btn-purple.disabled.active, -.btn-purple[disabled]:hover, -.btn-purple[disabled]:focus, -.btn-purple[disabled]:active, -.btn-purple[disabled].active, +.btn-purple:disabled:hover, +.btn-purple:disabled:focus, +.btn-purple:disabled:active, +.btn-purple:disabled.active, fieldset[disabled] .btn-purple:hover, fieldset[disabled] .btn-purple:focus, fieldset[disabled] .btn-purple:active, @@ -434,10 +434,10 @@ fieldset[disabled] .btn-purple.active { .btn-purple-classified.disabled:focus, .btn-purple-classified.disabled:active, .btn-purple-classified.disabled.active, -.btn-purple-classified[disabled]:hover, -.btn-purple-classified[disabled]:focus, -.btn-purple-classified[disabled]:active, -.btn-purple-classified[disabled].active, +.btn-purple-classified:disabled:hover, +.btn-purple-classified:disabled:focus, +.btn-purple-classified:disabled:active, +.btn-purple-classified:disabled.active, fieldset[disabled] .btn-purple-classified:hover, fieldset[disabled] .btn-purple-classified:focus, fieldset[disabled] .btn-purple-classified:active, @@ -470,10 +470,10 @@ fieldset[disabled] .btn-purple-classified.active { .btn-ltblue.disabled:focus, .btn-ltblue.disabled:active, .btn-ltblue.disabled.active, -.btn-ltblue[disabled]:hover, -.btn-ltblue[disabled]:focus, -.btn-ltblue[disabled]:active, -.btn-ltblue[disabled].active, +.btn-ltblue:disabled:hover, +.btn-ltblue:disabled:focus, +.btn-ltblue:disabled:active, +.btn-ltblue:disabled.active, fieldset[disabled] .btn-ltblue:hover, fieldset[disabled] .btn-ltblue:focus, fieldset[disabled] .btn-ltblue:active, @@ -504,10 +504,10 @@ fieldset[disabled] .btn-ltblue.active { .btn-ltgray.disabled:focus, .btn-ltgray.disabled:active, .btn-ltgray.disabled.active, -.btn-ltgray[disabled]:hover, -.btn-ltgray[disabled]:focus, -.btn-ltgray[disabled]:active, -.btn-ltgray[disabled].active, +.btn-ltgray:disabled:hover, +.btn-ltgray:disabled:focus, +.btn-ltgray:disabled:active, +.btn-ltgray:disabled.active, fieldset[disabled] .btn-ltgray:hover, fieldset[disabled] .btn-ltgray:focus, fieldset[disabled] .btn-ltgray:active, @@ -538,10 +538,10 @@ fieldset[disabled] .btn-ltgray.active { .btn-mdgray.disabled:focus, .btn-mdgray.disabled:active, .btn-mdgray.disabled.active, -.btn-mdgray[disabled]:hover, -.btn-mdgray[disabled]:focus, -.btn-mdgray[disabled]:active, -.btn-mdgray[disabled].active, +.btn-mdgray:disabled:hover, +.btn-mdgray:disabled:focus, +.btn-mdgray:disabled:active, +.btn-mdgray:disabled.active, fieldset[disabled] .btn-mdgray:hover, fieldset[disabled] .btn-mdgray:focus, fieldset[disabled] .btn-mdgray:active, @@ -572,10 +572,10 @@ fieldset[disabled] .btn-mdgray.active { .btn-dkgray.disabled:focus, .btn-dkgray.disabled:active, .btn-dkgray.disabled.active, -.btn-dkgray[disabled]:hover, -.btn-dkgray[disabled]:focus, -.btn-dkgray[disabled]:active, -.btn-dkgray[disabled].active, +.btn-dkgray:disabled:hover, +.btn-dkgray:disabled:focus, +.btn-dkgray:disabled:active, +.btn-dkgray:disabled.active, fieldset[disabled] .btn-dkgray:hover, fieldset[disabled] .btn-dkgray:focus, fieldset[disabled] .btn-dkgray:active, @@ -612,10 +612,10 @@ fieldset[disabled] .btn-dkgray.active { .btn-yellow.disabled:focus, .btn-yellow.disabled:active, .btn-yellow.disabled.active, -.btn-yellow[disabled]:hover, -.btn-yellow[disabled]:focus, -.btn-yellow[disabled]:active, -.btn-yellow[disabled].active, +.btn-yellow:disabled:hover, +.btn-yellow:disabled:focus, +.btn-yellow:disabled:active, +.btn-yellow:disabled.active, fieldset[disabled] .btn-yellow:hover, fieldset[disabled] .btn-yellow:focus, fieldset[disabled] .btn-yellow:active, @@ -647,10 +647,10 @@ fieldset[disabled] .btn-yellow.active { .btn-pink.disabled:focus, .btn-pink.disabled:active, .btn-pink.disabled.active, -.btn-pink[disabled]:hover, -.btn-pink[disabled]:focus, -.btn-pink[disabled]:active, -.btn-pink[disabled].active, +.btn-pink:disabled:hover, +.btn-pink:disabled:focus, +.btn-pink:disabled:active, +.btn-pink:disabled.active, fieldset[disabled] .btn-pink:hover, fieldset[disabled] .btn-pink:focus, fieldset[disabled] .btn-pink:active, diff --git a/ui/css/treeherder-navbar-panels.css b/ui/css/treeherder-navbar-panels.css index 88cc14d2b7f..5aef919b0b1 100644 --- a/ui/css/treeherder-navbar-panels.css +++ b/ui/css/treeherder-navbar-panels.css @@ -24,7 +24,7 @@ * Active Filters panel */ .active-filters-bar { - padding: 5px 25px 5px 30px; + padding: 4px 25px 4px 30px; } .active-filters-title { @@ -40,3 +40,11 @@ .new-filter-input { margin-top: 5px; } + +.new-filter-input button, +.new-filter-input input, +.new-filter-input select { + margin-right: 5px; + padding-top: 3px; + border: 1px solid #ced4da; +} diff --git a/ui/css/treeherder-navbar.css b/ui/css/treeherder-navbar.css index 546ce423c1d..e8fdb9217ab 100644 --- a/ui/css/treeherder-navbar.css +++ b/ui/css/treeherder-navbar.css @@ -10,21 +10,44 @@ #th-global-navbar-top { padding-left: 0; + padding-top: 1px; border-bottom: 1px solid black; + justify-content: space-between; + display: flex; + width: 100%; + background-color: #222; } .navbar { - min-height: 36px; - margin-bottom: 0px; - border-radius: 0px; + padding: 0; } -.navbar .dropdown-menu { - max-height: 600px; - min-width: 80px; - overflow: auto; - margin-top: 10px; - padding-bottom: 8px; +#th-global-navbar-top .dropdown-menu { + top: inherit; +} + +.dropdown-menu { + min-width: inherit; +} + +.dropdown-menu > li > a { + font-weight: normal; + line-height: 1.42857143; + color: #333; + white-space: nowrap; +} + +.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { + color: #262626; + text-decoration: none; +} + +label.dropdown-item { + margin-bottom: 0; +} + +.dropdown-item input[type="checkbox"] { + margin-right: 5px; } #th-logo { @@ -32,28 +55,24 @@ border-left: 0; } -.btn-right-navbar { - font-size: 13px; -} - /* * Right hand upper navbar */ -.navbar-right { - /* Override bootstrap 3.3.5 which doesn't work with the way we align our navbar */ - margin-right: 0px; -} - -.navbar-collapse { - /* Override bootstrap for flush right navbar menus */ - padding-right: 0; -} + .navbar-right { + display: flex; + justify-content: flex-end; + } .nav-menu-btn { margin-right: -4px; padding-left: 14px; padding-right: 14px; + font-size: 13px; +} + +.nav-menu-btn:after { + font-size: 14px; } .nav-help-btn { @@ -85,6 +104,8 @@ .nav-login-btn { padding-left: 22px; padding-right: 27px; + color: lightgrey; + cursor: pointer; } .nav-logged-in-btn { @@ -97,6 +118,11 @@ overflow: visible; } +login { + align-items: center; + display: flex; +} + /* * Left hand lower navbar */ @@ -120,6 +146,11 @@ .watched-repo-navbar { overflow: visible; + flex-direction: row; + justify-content: space-between; + width: 100%; + display: flex; + background-color: #354048; } .tree-closed { @@ -138,36 +169,22 @@ color: lightgray; } -th-watched-repo { - /* Required for Chrome */ - float: left; -} - /* * Right hand lower navbar */ -.revision-collapsed { - color: grey; -} - .group-state-nav-icon { width: 7px; display: inline-block; } -.btn-collapse-resultsets { - margin-top: -1px; - margin-bottom: -1px; - font-size: 14px; -} - .btn-nav-filter { padding: 7px 2px; } #filter-chicklets .btn { font-size: 14px; + padding: 3px 2px 2px 2px; } .btn.btn-view-nav.btn-orange-filter-chicklet, @@ -281,10 +298,10 @@ th-watched-repo { .btn-unclassified-failures.disabled:focus, .btn-unclassified-failures.disabled:active, .btn-unclassified-failures.disabled.active, -.btn-unclassified-failures[disabled]:hover, -.btn-unclassified-failures[disabled]:focus, -.btn-unclassified-failures[disabled]:active, -.btn-unclassified-failures[disabled].active, +.btn-unclassified-failures:disabled:hover, +.btn-unclassified-failures:disabled:focus, +.btn-unclassified-failures:disabled:active, +.btn-unclassified-failures:disabled.active, fieldset[disabled] .btn-unclassified-failures:hover, fieldset[disabled] .btn-unclassified-failures:focus, fieldset[disabled] .btn-unclassified-failures:active, @@ -319,10 +336,10 @@ fieldset[disabled] .btn-unclassified-failures.active { .btn-view-nav.disabled:focus, .btn-view-nav.disabled:active, .btn-view-nav.disabled.active, -.btn-view-nav[disabled]:hover, -.btn-view-nav[disabled]:focus, -.btn-view-nav[disabled]:active, -.btn-view-nav[disabled].active, +.btn-view-nav:disabled:hover, +.btn-view-nav:disabled:focus, +.btn-view-nav:disabled:active, +.btn-view-nav:disabled.active, fieldset[disabled] .btn-view-nav:hover, fieldset[disabled] .btn-view-nav:focus, fieldset[disabled] .btn-view-nav:active, @@ -352,10 +369,10 @@ fieldset[disabled] .btn-view-nav.active { .btn-view-nav-closed.disabled:focus, .btn-view-nav-closed.disabled:active, .btn-view-nav-closed.disabled.active, -.btn-view-nav-closed[disabled]:hover, -.btn-view-nav-closed[disabled]:focus, -.btn-view-nav-closed[disabled]:active, -.btn-view-nav-closed[disabled].active, +.btn-view-nav-closed:disabled:hover, +.btn-view-nav-closed:disabled:focus, +.btn-view-nav-closed:disabled:active, +.btn-view-nav-closed:disabled.active, fieldset[disabled] .btn-view-nav-closed:hover, fieldset[disabled] .btn-view-nav-closed:focus, fieldset[disabled] .btn-view-nav-closed:active, @@ -404,48 +421,33 @@ fieldset[disabled] .btn-view-nav-closed.active { font-size: 10px; } -.dropdown.open > #repo-dropdown { - width: 420px; - display: inline-grid; - grid-template-columns: repeat(2, 1fr); - grid-gap: 10px; - grid-auto-rows: minmax(150px, auto); +#repo-dropdown { + min-width: 30rem; + max-height: 35rem; + overflow-x: hidden; } -#repo-dropdown > .repogroup.even { - grid-column: 1; +.dropdown-menu li { + list-style: none; } -#repo-dropdown > .repogroup.odd { - grid-column: 2; +.dropdown-header { + font-size: 12px; } -#repo-dropdown .repogroup { - margin-left: 15px; - margin-top: 5px; +.dropdown-link, .dropdown-link > a { + color: #212529cc; + padding-top: .5rem; } -#filter-dropdown { - padding: 0 10px 10px 10px; +#infra-dropdown { + min-width: 11rem; } -#filter-dropdown .dropdown-header { - padding-top: 10px; -} -#filter-dropdown .dropdown-item { - list-style: none; - cursor: pointer; - padding-top: 6px; - margin: 0 0 1px 0; - font-weight: inherit; +.checkbox-dropdown-menu .repogroup { + padding-left: 0; } -#filter-dropdown .dropdown-item:hover { +.dropdown-item:hover { background-color: #d3d3d34d; } - -#filter-dropdown .dropdown-divider { - border-top: 1px solid #a9a9a980; - padding-bottom: 5px; - margin-top: 7px; -} diff --git a/ui/css/treeherder-notifications.css b/ui/css/treeherder-notifications.css index 81289b7a797..4d109b85c9a 100644 --- a/ui/css/treeherder-notifications.css +++ b/ui/css/treeherder-notifications.css @@ -18,10 +18,11 @@ } #notification-box button.close { - position: relative; - top: -4px; - right: -8px; color: inherit; + line-height: 13px; + font-size: 18px; + padding-left: 10px; + margin-right: -7px; } /* Notification icon */ diff --git a/ui/css/treeherder-pinboard.css b/ui/css/treeherder-pinboard.css index cc870203e2b..de86e9bc3ba 100644 --- a/ui/css/treeherder-pinboard.css +++ b/ui/css/treeherder-pinboard.css @@ -1,7 +1,14 @@ -.pinboard-btn { - margin-top: -1px; - background-color: #e6eef5 !important; - color: #252c33 !important; +#job-tabs-navbar .info-panel-navbar #pinboard-btn { + margin-top: -2px; + background-color: #e6eef5; + color: #252c33; + line-height: 30px; + cursor: pointer; +} + +.pinboard-btn-text { + margin: 0 15px; + font-size: 12px; } .pin-count-group { @@ -198,6 +205,10 @@ width: 70px; } +.save-btn-group { + margin-top: -22px; +} + .save-btn { width: 81px; } @@ -206,6 +217,17 @@ width: 18px; } +.save-btn-dropdown > .caret { + margin-left: -4px; +} + +.save-btn-dropdown-menu { + right: 0; + left: -88px !important; + transform: inherit !important; + top: 22px !important; +} + .btn-group + .btn + .save-btn-dropdown { margin-left: -5px; } diff --git a/ui/css/treeherder-resultsets.css b/ui/css/treeherder-resultsets.css index 67b504de680..4ecf6160831 100644 --- a/ui/css/treeherder-resultsets.css +++ b/ui/css/treeherder-resultsets.css @@ -42,7 +42,6 @@ margin-top: 2px; white-space: normal; width: 100%; - position: relative; } .result-counts { @@ -63,6 +62,13 @@ .btn-resultset { color: #666; background-color: transparent; + padding-left: 9px; + padding-right: 10px; +} + +.btn-resultset.btn:focus { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); } .btn-resultset:hover { @@ -73,15 +79,20 @@ .btn-resultset.disabled:hover, .btn-resultset.disabled:active, .btn-resultset.disabled.active, -.btn-resultset[disabled]:hover, -.btn-resultset[disabled]:active, -.btn-resultset[disabled].active, +.btn-resultset:disabled:hover, +.btn-resultset:disabled:active, +.btn-resultset:disabled.active, fieldset[disabled] .btn-resultset:hover { background-color: #7c7a7d; border-color: #7c7a7d; color: white; } +th-action-button .btn-resultset { + padding-left: 6px; + font-size: 14px; +} + /* Encompasses unknown push,resultset,repo */ .unknown-message-body { padding-top: 10px; @@ -109,8 +120,11 @@ fieldset[disabled] .btn-resultset:hover { * Revision list */ -.revision-list { +revisions { overflow: hidden; +} + +.revision-list { white-space: nowrap; } @@ -164,6 +178,7 @@ fieldset[disabled] .btn-resultset:hover { .platform { font-size: 12px; padding: 0 5px 0 0; + line-height: 15px; width: 14.5em; min-width: 14.5em; overflow: hidden; @@ -172,8 +187,11 @@ fieldset[disabled] .btn-resultset:hover { .job-row { display: table-cell; + line-height: 15px; white-space: normal; word-break: normal; + padding-top: 0; + padding-bottom: 0; } .job-list table { @@ -187,3 +205,19 @@ fieldset[disabled] .btn-resultset:hover { .job-list table tr:nth-child(even) { background: #f8f8f8; } + +.get-next { + flex-direction: row; + font-size: 14px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; +} + +.get-next > span { + align-self: center; + padding-right: 8px; +} + +.get-next .btn { + font-size: 12px; +} diff --git a/ui/entry-failureviewer.js b/ui/entry-failureviewer.js index 6b2c7b8331c..48fe93c4012 100644 --- a/ui/entry-failureviewer.js +++ b/ui/entry-failureviewer.js @@ -20,7 +20,7 @@ require('angular-cookies'); require('angular-sanitize'); require('angular-local-storage'); require('bootstrap/dist/js/bootstrap'); -require('angular-ui-bootstrap'); +require('angular1-ui-bootstrap4'); require('./vendor/resizer.js'); // Failureviewer JS diff --git a/ui/entry-index.js b/ui/entry-index.js index 1a9011c1770..4ca089de7c9 100644 --- a/ui/entry-index.js +++ b/ui/entry-index.js @@ -7,7 +7,6 @@ require('./js/config'); // Styles require('bootstrap/dist/css/bootstrap.css'); require('font-awesome/css/font-awesome.css'); -require('./vendor/css/bootstrap-non-responsive.css'); require('./css/treeherder-global.css'); require('./css/treeherder-navbar.css'); require('./css/treeherder-navbar-panels.css'); @@ -28,7 +27,7 @@ require('angular-sanitize'); require('angular-toarrayfilter'); require('angular-local-storage'); require('bootstrap/dist/js/bootstrap'); -require('angular-ui-bootstrap'); +require('angular1-ui-bootstrap4'); require('mousetrap'); require('js-yaml'); require('angular-marked'); diff --git a/ui/entry-perf.js b/ui/entry-perf.js index 634f67ec8ba..b90c2beee24 100644 --- a/ui/entry-perf.js +++ b/ui/entry-perf.js @@ -8,6 +8,7 @@ require('./js/config'); // Styles require('bootstrap/dist/css/bootstrap.css'); require('font-awesome/css/font-awesome.css'); +require('./css/treeherder-global.css'); require('./css/treeherder-navbar.css'); require('./css/perf.css'); require('./css/treeherder-loading-overlay.css'); @@ -22,7 +23,7 @@ require('angular-sanitize'); require('angular-local-storage'); require('mousetrap'); require('bootstrap/dist/js/bootstrap'); -require('angular-ui-bootstrap'); +require('angular1-ui-bootstrap4'); require('./vendor/angular-clipboard.js'); // The jquery flot package does not seem to be updated on npm, so we use a local version: require('./vendor/jquery.flot.js'); diff --git a/ui/failureviewer.html b/ui/failureviewer.html index 861e02ac4f7..1aef9ee4a03 100644 --- a/ui/failureviewer.html +++ b/ui/failureviewer.html @@ -3,24 +3,25 @@ Failure Viewer + -