Bug 1572521 - Improve click target size of job actions ellipses

This commit is contained in:
Cameron Dawson 2019-09-05 09:25:33 -07:00
Родитель 090390ca9a
Коммит 1300d3927e
7 изменённых файлов: 73 добавлений и 183 удалений

Просмотреть файл

@ -41,44 +41,13 @@ div#tabs-panel .tab-headers {
margin-left: 5px;
}
div#details-panel-content .navbar-nav > ul {
height: 32px;
}
div#details-panel-content .navbar-nav.actionbar-nav > li > a,
div#details-panel-content .navbar-nav.actionbar-nav > li > button {
padding: 8px 15px;
line-height: 16px;
}
div#details-panel-content .navbar-nav.tab-headers > li > a,
div#details-panel-content .navbar-nav.tab-headers > li > button {
padding: 8px 15px;
line-height: 30px;
}
div#details-panel-content .navbar-nav > li > button {
border: none;
background: transparent;
}
/* Use a loaded image, rather than an icon, so it needs to be slightly shorter */
div#details-panel-content .navbar-nav > li > a#logviewer-btn {
line-height: 18px;
}
div#details-panel-content .navbar-nav > li > a.disabled,
div#details-panel-content .navbar-nav > li > button.disabled,
ul.actionbar-menu > li.disabled {
div#details-panel-content .actionbar-nav > li > a.disabled,
div#details-panel-content .actionbar-nav > li > button.disabled,
ul.actionbar-menu > li > .disabled {
cursor: not-allowed;
text-decoration: none;
}
div#details-panel-content .navbar-nav > li.active a,
div#details-panel-content .navbar-nav > li.active a:hover,
div#details-panel-content .navbar-nav > li.active a:focus {
outline: 0;
}
div#details-panel-content .details-panel-navbar > ul.tab-headers > li {
border-right: 1px solid #42484f;
}
@ -133,57 +102,24 @@ div#details-panel-content .details-panel-navbar > ul.tab-headers > li {
min-width: 646px !important;
}
.details-panel-navbar-controls {
flex-wrap: nowrap;
}
.details-panel-navbar .navbar-nav {
display: flex;
flex-direction: row;
}
.details-panel-navbar .navbar-nav > li {
white-space: nowrap;
}
.details-panel-navbar .navbar-nav > li > a,
.details-panel-navbar .navbar-nav > li > .btn {
.details-panel-navbar .actionbar-nav > li > a,
.details-panel-navbar .actionbar-nav > li > .btn {
color: #9fa3a5;
padding: 4px 15px;
}
div#details-panel-content .navbar-nav > li > a:hover,
div#details-panel-content .navbar-nav > li > a:focus,
div#details-panel-content .navbar-nav > li > button:hover,
div#details-panel-content .navbar-nav > li > button:focus {
div#details-panel-content .actionbar-nav > li > a:hover,
div#details-panel-content .actionbar-nav > li > a:focus,
div#details-panel-content .actionbar-nav > li > button:hover,
div#details-panel-content .actionbar-nav > li > button:focus {
background-color: #1e252b;
color: #d3d8da;
}
div#details-panel-content .navbar-nav > li > a:active,
div#details-panel-content .navbar-nav > li > button:active {
background-color: #000;
}
div#details-panel-content .navbar-nav > li > a.disabled:active,
div#details-panel-content .navbar-nav > li > button.disabled:active {
background-color: #1e252b;
}
.details-panel-navbar .actionbar-nav {
flex: auto;
}
div#details-panel-content .details-panel-navbar .navbar-nav > li.active a,
div#details-panel-content .details-panel-navbar .navbar-nav > li.active a:hover,
div#details-panel-content .details-panel-navbar .navbar-nav > li.active a:focus,
div#details-panel-content .details-panel-navbar > li.active a,
div#details-panel-content .details-panel-navbar > li.active a:hover,
div#details-panel-content .details-panel-navbar > li.active a:focus {
background-color: #1a4666;
color: #eef0f2;
}
.tab-header-tabs > li.selected-tab {
background-color: #1a4666;
color: #eef0f2;
@ -219,12 +155,6 @@ div#details-panel-content .details-panel-navbar > li.active a:focus {
flex-flow: row;
}
#summary-panel {
background-color: #fff;
display: flex;
flex-flow: column;
}
#job-details-actionbar {
min-height: 33px;
}
@ -233,6 +163,16 @@ div#details-panel-content .details-panel-navbar > li.active a:focus {
* action bar
*/
.actionbar-nav-btn {
cursor: pointer;
padding: 5px 15px;
color: #9fa3a5;
}
.actionbar-nav-btn.disabled {
cursor: not-allowed;
}
.action-bar-spin {
animation: action-bar-spin 0.7s;
}
@ -246,38 +186,6 @@ div#details-panel-content .details-panel-navbar > li.active a:focus {
}
}
.actionbar-nav {
flex-direction: row;
}
.actionbar-nav .btn {
cursor: pointer;
}
.actionbar-nav > li {
/* Override padding on all icons to keep compact */
padding: 0 !important;
}
.actionbar-menu {
margin-top: 23px;
margin-left: 6px;
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;
@ -297,31 +205,9 @@ div#details-panel-content .details-panel-navbar > li.active a:focus {
* Job details panel (left side)
*/
#summary-panel-content {
overflow-y: auto;
}
#summary-panel {
width: 260px;
min-width: 260px;
height: 100%;
}
#summary-panel .content-spacer {
padding-top: 2px;
padding-bottom: 4px;
}
#summary-panel ul li {
padding: 0 0 0 5px;
line-height: 15px;
word-wrap: break-word;
}
#summary-panel ul li label {
padding: 0 3px 0 0;
margin: 2px 0;
font-weight: bold;
}
/*

Просмотреть файл

@ -401,7 +401,7 @@ class ActionBar extends React.PureComponent {
return (
<div id="job-details-actionbar">
<nav className="navbar navbar-dark details-panel-navbar">
<ul className="nav navbar-nav actionbar-nav">
<ul className="nav actionbar-nav">
<LogUrls
logUrls={jobLogUrls}
logViewerUrl={logViewerUrl}
@ -411,7 +411,7 @@ class ActionBar extends React.PureComponent {
<Button
id="pin-job-btn"
title="Add this job to the pinboard"
className="btn icon-blue"
className="actionbar-nav-btn btn icon-blue bg-transparent border-0"
onClick={() => pinJob(selectedJobFull)}
>
<FontAwesomeIcon icon={faThumbtack} title="Pin job" />
@ -425,7 +425,9 @@ class ActionBar extends React.PureComponent {
? 'Repeat the selected job'
: 'Must be logged in to retrigger a job'
}
className={`btn ${user.isLoggedIn ? 'icon-green' : 'disabled'}`}
className={`actionbar-nav-btn btn bg-transparent border-0 ${
user.isLoggedIn ? 'icon-green' : 'disabled'
}`}
disabled={!user.isLoggedIn}
onClick={() => this.retriggerJob([selectedJobFull])}
>
@ -437,6 +439,7 @@ class ActionBar extends React.PureComponent {
<li key={`reftest-${jobLogUrl.id}`}>
<a
title="Launch the Reftest Analyzer in a new window"
className="actionbar-nav-btn"
target="_blank"
rel="noopener noreferrer"
href={getReftestUrl(jobLogUrl.url)}
@ -456,27 +459,30 @@ class ActionBar extends React.PureComponent {
? 'Cancel this job'
: 'Must be logged in to cancel a job'
}
className={user.isLoggedIn ? 'hover-warning' : 'disabled'}
className={`actionbar-nav-btn ${
user.isLoggedIn ? 'hover-warning' : 'disabled'
}`}
onClick={() => this.cancelJob()}
>
<FontAwesomeIcon icon={faTimesCircle} title="Cancel job" />
</Button>
</li>
)}
</ul>
<ul className="nav navbar-right">
<li className="dropdown">
<li className="dropdown ml-auto">
<Button
id="actionbar-menu-btn"
title="Other job actions"
aria-haspopup="true"
aria-expanded="false"
className="btn btn-sm dropdown-toggle bg-transparent border-0 pr-2 py-0 m-0"
className="btn actionbar-nav-btn btn-sm dropdown-toggle bg-transparent text-light border-0 pr-2 py-2 m-0"
data-toggle="dropdown"
>
<FontAwesomeIcon icon={faEllipsisH} title="Other job actions" />
</Button>
<ul className="dropdown-menu actionbar-menu" role="menu">
<ul
className="dropdown-menu actionbar-menu dropdown-menu-right"
role="menu"
>
<li>
<span
id="backfill-btn"
@ -495,7 +501,7 @@ class ActionBar extends React.PureComponent {
<a
target="_blank"
rel="noopener noreferrer"
className="dropdown-item"
className="dropdown-item pl-4"
href={getInspectTaskUrl(
selectedJobFull.taskcluster_metadata.task_id,
)}

Просмотреть файл

@ -18,7 +18,7 @@ export default function ClassificationsPanel(props) {
return (
<React.Fragment>
<li>
<li className="ml-1">
<span title={classificationName.name}>
<FontAwesomeIcon
icon={icon}
@ -39,7 +39,7 @@ export default function ClassificationsPanel(props) {
)}
</li>
{classification.text.length > 0 && (
<li>
<li className="ml-1">
<em>
<RevisionLinkify repo={currentRepo}>
{classification.text}
@ -47,13 +47,13 @@ export default function ClassificationsPanel(props) {
</em>
</li>
)}
<li className="revision-comment">
<li className="revision-comment ml-1">
{new Date(classification.created).toLocaleString(
'en-US',
longDateFormat,
)}
</li>
<li className="revision-comment">{classification.who}</li>
<li className="revision-comment ml-1">{classification.who}</li>
</React.Fragment>
);
}

Просмотреть файл

@ -53,10 +53,10 @@ export default function LogUrls(props) {
</a>
</li>
))}
<li>
{!logUrls.length && (
{!logUrls.length && (
<li>
<Button
className="logviewer-btn disabled"
className="logviewer-btn disabled bg-transparent border-0"
title="No logs available for this job"
aria-label="No logs available for this job"
>
@ -66,8 +66,8 @@ export default function LogUrls(props) {
className="logviewer-icon"
/>
</Button>
)}
</li>
</li>
)}
{logUrls.map(jobLogUrl => (
<li key={`raw-${jobLogUrl.id}`}>
@ -85,7 +85,7 @@ export default function LogUrls(props) {
{!logUrls.length && (
<li>
<Button
className="disabled raw-log-icon text-white-50"
className="disabled raw-log-icon text-white-50 bg-transparent border-0"
title="No logs available for this job"
aria-label="No logs available for this job"
>

Просмотреть файл

@ -6,8 +6,8 @@ function StatusPanel(props) {
const shadingClass = `result-status-shading-${selectedJobFull.resultStatus}`;
return (
<li id="result-status-pane" className={`small ${shadingClass}`}>
<div>
<li id="result-status-pane" className={`small ${shadingClass} p-0`}>
<div className="ml-1">
<strong>Result:</strong>
<span> {selectedJobFull.result}</span>
</div>

Просмотреть файл

@ -48,34 +48,32 @@ class SummaryPanel extends React.PureComponent {
user={user}
/>
<div id="summary-panel-content">
<div>
{jobDetailLoading && (
<div className="overlay">
<div>
<FontAwesomeIcon
icon={faSpinner}
pulse
className="th-spinner-lg"
title="Loading..."
/>
</div>
</div>
)}
<ul className="list-unstyled">
{latestClassification && (
<ClassificationsPanel
job={selectedJobFull}
classification={latestClassification}
classificationMap={classificationMap}
bugs={bugs}
currentRepo={currentRepo}
{jobDetailLoading && (
<div className="overlay">
<div>
<FontAwesomeIcon
icon={faSpinner}
pulse
className="th-spinner-lg"
title="Loading..."
/>
)}
<StatusPanel selectedJobFull={selectedJobFull} />
<JobInfo job={selectedJobFull} extraFields={logStatus} />
</ul>
</div>
</div>
</div>
)}
<ul className="list-unstyled">
{latestClassification && (
<ClassificationsPanel
job={selectedJobFull}
classification={latestClassification}
classificationMap={classificationMap}
bugs={bugs}
currentRepo={currentRepo}
/>
)}
<StatusPanel selectedJobFull={selectedJobFull} />
<JobInfo job={selectedJobFull} extraFields={logStatus} />
</ul>
</div>
</div>
);

Просмотреть файл

@ -44,7 +44,7 @@ export default class JobInfo extends React.PureComponent {
const timeFields = getTimeFields(job);
return (
<ul id="job-info" className="list-unstyled">
<ul id="job-info" className="list-unstyled ml-1">
<li className="small">
<strong>Job: </strong>
{showJobFilters ? (