diff --git a/.eslintrc.js b/.eslintrc.js
index f70728299..b0b710d96 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -29,7 +29,6 @@ module.exports = {
'class-methods-use-this': 'off',
'consistent-return': 'off',
'default-case': 'off',
- 'jsx-a11y/anchor-is-valid': 'off',
'jsx-a11y/click-events-have-key-events': 'off',
'jsx-a11y/label-has-associated-control': 'off',
'jsx-a11y/label-has-for': 'off',
diff --git a/tests/selenium/pages/treeherder.py b/tests/selenium/pages/treeherder.py
index 82cbc4ced..8c5dac034 100644
--- a/tests/selenium/pages/treeherder.py
+++ b/tests/selenium/pages/treeherder.py
@@ -401,7 +401,7 @@ class Treeherder(Base):
class Pinboard(Region):
_root_locator = (By.ID, 'pinboard-panel')
- _clear_all_locator = (By.CSS_SELECTOR, '#pinboard-controls .dropdown-menu li:nth-child(3) a')
+ _clear_all_locator = (By.CSS_SELECTOR, '#pinboard-controls .dropdown-menu li:nth-child(3) button')
_jobs_locator = (By.CLASS_NAME, 'pinned-job')
_save_menu_locator = (By.CSS_SELECTOR, '#pinboard-controls .save-btn-dropdown')
diff --git a/ui/css/treeherder.css b/ui/css/treeherder.css
index 0a5e5f1e4..f17481412 100644
--- a/ui/css/treeherder.css
+++ b/ui/css/treeherder.css
@@ -14,6 +14,10 @@
height: 100%;
}
+.dropdown-item.disabled {
+ cursor: not-allowed;
+ font-style: italic;
+}
/*
* Resizer between PushList and DetailsPanel
*/
diff --git a/ui/job-view/details/PinBoard.jsx b/ui/job-view/details/PinBoard.jsx
index a2cf1a9c6..1b98ea7a1 100644
--- a/ui/job-view/details/PinBoard.jsx
+++ b/ui/job-view/details/PinBoard.jsx
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { FormGroup, Input, FormFeedback } from 'reactstrap';
+import { Button, FormGroup, Input, FormFeedback } from 'reactstrap';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faPlusSquare, faTimes } from '@fortawesome/free-solid-svg-icons';
@@ -553,19 +553,19 @@ class PinBoard extends React.Component {
title={this.hasPinnedJobs() ? '' : 'No pinned jobs'}
>
diff --git a/ui/job-view/details/tabs/autoclassify/ErrorLine.jsx b/ui/job-view/details/tabs/autoclassify/ErrorLine.jsx
index a98d1b211..555de9081 100644
--- a/ui/job-view/details/tabs/autoclassify/ErrorLine.jsx
+++ b/ui/job-view/details/tabs/autoclassify/ErrorLine.jsx
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { FormGroup } from 'reactstrap';
+import { Button, FormGroup } from 'reactstrap';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import {
faCaretDown,
@@ -684,7 +684,7 @@ class ErrorLine extends React.Component {
)}
{this.hasHidden(options) && (
-
this.setState(prevState => ({
showHidden: !prevState.showHidden,
@@ -693,7 +693,7 @@ class ErrorLine extends React.Component {
className="link-style has-hidden"
>
{!showHidden ? More… : Fewer}
-
+
)}
{canClassify && (
diff --git a/ui/job-view/details/tabs/autoclassify/LineOption.jsx b/ui/job-view/details/tabs/autoclassify/LineOption.jsx
index ef1f61af3..71d20245b 100644
--- a/ui/job-view/details/tabs/autoclassify/LineOption.jsx
+++ b/ui/job-view/details/tabs/autoclassify/LineOption.jsx
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { FormGroup, Label, Input } from 'reactstrap';
+import { Button, FormGroup, Label, Input } from 'reactstrap';
import Select from 'react-select';
import Highlighter from 'react-highlight-words';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
@@ -105,16 +105,15 @@ class LineOption extends React.Component {
{!!option.bugNumber && (
{(!canClassify || selectedJob.id in pinnedJobs) && (
-
+
)}
{!!option.bugResolution && (
@@ -166,13 +165,13 @@ class LineOption extends React.Component {
onManualBugNumberChange(option, evt.target.value)
}
/>
- this.fileBug()}
title="File a bug for this failure"
>
-
+
{option.id === 'manual' && !!option.manualBugNumber && (
{(!canClassify || selectedJob.id in pinnedJobs) && (
-
+
)}
{!!option.bugResolution && (
@@ -107,9 +107,9 @@ function StaticLineOption(props) {
)}
);