Skip to content

Commit 3a73ff5

Browse files
Merge branch 'master' into dev-1472
2 parents 43e2bf7 + 61cf679 commit 3a73ff5

File tree

10 files changed

+252
-13
lines changed

10 files changed

+252
-13
lines changed

accessibility-checker-extension/src/assets/img/Chrome.svg

+25
Loading

accessibility-checker-extension/src/assets/img/Edge.svg

+20
Loading

accessibility-checker-extension/src/assets/img/Firefox.svg

+25
Loading

accessibility-checker-extension/src/ts/background/backgroundController.ts

+1
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,7 @@ class BackgroundController extends Controller {
456456
if (!("tabStopOutlines" in settings)) { (settings as ISettings).tabStopOutlines = false; }
457457
if (!("tabStopAlerts" in settings)) { (settings as ISettings).tabStopAlerts = true; }
458458
if (!("tabStopFirstTime" in settings)) { (settings as ISettings).tabStopFirstTime = true; }
459+
if (!("checkerViewAwareFirstTime" in settings)) { (settings as ISettings).checkerViewAwareFirstTime = true; }
459460

460461
// Determine which archive we're scanning with
461462
let archiveId = Config.defaultArchiveId + "";
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
@use '@carbon/styles/scss/type'as *;
2+
@use '@carbon/styles/scss/breakpoint'as *;
3+
@use '@carbon/styles/scss/colors'as *;
4+
5+
6+
.checkerViewAware {
7+
.modalHeader {
8+
font-size: var(--cds-heading-03-font-size, 1.25rem);
9+
font-weight: var(--cds-heading-03-font-weight, 400);
10+
line-height: var(--cds-heading-03-line-height, 1.4);
11+
letter-spacing: var(--cds-heading-03-letter-spacing, 0);
12+
color: var(--cds-text-primary, #161616);
13+
}
14+
.modalContent {
15+
font-size: var(--cds-body-01-font-size, 0.875rem);
16+
font-weight: var(--cds-body-01-font-weight, 400);
17+
line-height: var(--cds-body-01-line-height, 1.42857);
18+
letter-spacing: var(--cds-body-01-letter-spacing, 0.16px);
19+
// padding-right: calc(20% - 2rem);
20+
}
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
/******************************************************************************
2+
Copyright:: 2020- IBM, Inc
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*****************************************************************************/
16+
17+
import React from "react";
18+
19+
import { Grid, Column, Button } from '@carbon/react';
20+
import { getBGController } from "../../background/backgroundController";
21+
import { getDevtoolsAppController } from '../devtoolsAppController';
22+
import { BrowserDetection } from '../../util/browserDetection';
23+
import "./checkerViewAware.scss";
24+
import chromeImg from "../../../assets/img/Chrome.svg";
25+
import firefoxImg from "../../../assets/img/Firefox.svg";
26+
import edgeImg from "../../../assets/img/Edge.svg";
27+
28+
29+
interface CheckerViewAwareState {
30+
}
31+
32+
interface CheckerViewAwareProps {
33+
}
34+
let count = 0;
35+
export default class CheckerViewAware extends React.Component<CheckerViewAwareProps, CheckerViewAwareState> {
36+
private bgController = getBGController();
37+
state: CheckerViewAwareState = {
38+
}
39+
40+
myCount = count++;
41+
async componentDidMount(): Promise<void> {
42+
this.bgController.addSettingsListener(async (settings) => {
43+
this.setState({ settings });
44+
});
45+
let settings = await this.bgController.getSettings();
46+
this.setState({ settings });
47+
settings.checkerViewAwareFirstTime = false;
48+
await this.bgController.setSettings(settings);
49+
}
50+
51+
52+
53+
render() {
54+
BrowserDetection.setDarkLight();
55+
let usrAgent = navigator.userAgent;
56+
let elementTabImg: string | undefined;
57+
if (usrAgent.includes("Edg/")) {
58+
elementTabImg = edgeImg;
59+
} else if (usrAgent.includes("Firefox/")) {
60+
elementTabImg = firefoxImg;
61+
} else {
62+
elementTabImg = chromeImg;
63+
}
64+
return <aside className="checkerViewAware">
65+
{/* CheckerViewAware Title */}
66+
<Grid style={{marginTop: "1rem", marginBottom: "1rem"}}>
67+
<Column sm={{ span: 4 }} md={{ span: 8 }} lg={{ span: 8 }}>
68+
<span className="modalHeading">Accessibility Assessment panel</span>
69+
</Column>
70+
</Grid>
71+
{/* Left Column */}
72+
<Grid>
73+
<Column sm={{ span: 4 }} md={{ span: 8 }} lg={{ span: 8 }}>
74+
<div className="modalContent">
75+
<div style={{marginBottom:"1rem"}}>
76+
You are in the <b>Accessibility Assessment</b> panel of the Checker.
77+
</div>
78+
<div style={{marginBottom:"1rem"}}>
79+
For code scanning functionality, navigate to the Accessibility Checker
80+
panel within the Elements panel in the Dev Tools. Be aware that this
81+
panel can be nested within the dev tools navigation bar.
82+
</div>
83+
<div style={{marginBottom:"1rem"}}>
84+
<img src={elementTabImg} alt="Checker view on Elements Tab"></img>
85+
</div>
86+
</div>
87+
<div>
88+
<Button
89+
id="checkerViewAwareButton"
90+
kind="primary"
91+
iconDescription="Dismiss one time info" tooltipPosition="left"
92+
onClick={async () => {
93+
let devtoolsAppController = getDevtoolsAppController();
94+
if (devtoolsAppController.getSecondaryView() === "checkerViewAware") {
95+
devtoolsAppController.closeSecondary();
96+
setTimeout(() => {
97+
devtoolsAppController.setSecondaryView("splash");
98+
}, 1500);
99+
}
100+
}}
101+
size="sm"
102+
>Dismiss</Button>
103+
</div>
104+
</Column>
105+
</Grid>
106+
</aside>
107+
}
108+
}

accessibility-checker-extension/src/ts/devtools/devToolsApp.tsx

+41-5
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ import StoredScreen from './components/storedScreen';
3939
import SummaryScreen from './components/summaryScreen';
4040
import KCMOverviewScreen from './components/kcmOverviewScreen';
4141
import { ePanel } from './devtoolsController';
42+
import CheckerViewAware from './components/checkerViewAware';
43+
import { getBGController } from "../background/backgroundController";
44+
import { ISettings } from '../interfaces/interfaces';
45+
4246

4347
interface DevToolsAppProps {
4448
panel: ePanel;
@@ -50,14 +54,25 @@ interface DevToolsAppState {
5054
}
5155

5256
export class DevToolsApp extends React.Component<DevToolsAppProps, DevToolsAppState> {
57+
bgController = getBGController();
5358
devtoolsAppController = getDevtoolsAppController();
54-
59+
5560
state : DevToolsAppState = {
56-
secondaryView: "splash",
57-
secondaryOpen: false
61+
secondaryView: "checkerViewAware",
62+
secondaryOpen: true
5863
}
5964

65+
66+
6067
componentDidMount(): void {
68+
this.bgController.getSettings().then((settings: ISettings) => {
69+
if (this.props.panel === "main" && settings.checkerViewAwareFirstTime) {
70+
this.setState({ secondaryView: "checkerViewAware" });
71+
} else {
72+
this.setState({ secondaryOpen: false});
73+
this.setState({ secondaryView: "splash" });
74+
}
75+
});
6176
this.devtoolsAppController.addSecondaryOpenListener((open: boolean) => {
6277
this.setState({secondaryOpen: open});
6378
})
@@ -69,6 +84,17 @@ export class DevToolsApp extends React.Component<DevToolsAppProps, DevToolsAppSt
6984
}
7085
}
7186

87+
88+
displayVersion() {
89+
let manifest = chrome.runtime.getManifest();
90+
let extVersion = manifest.version;
91+
if (extVersion.endsWith(".9999")) {
92+
return extVersion.replace(/(\d+\.\d+\.\d+)\.(\d+)/, "$1");
93+
} else {
94+
return extVersion.replace(/(\d+\.\d+\.\d+)\.(\d+)/, "$1-rc.$2");
95+
}
96+
}
97+
7298
render() {
7399

74100
let primaryPanel = <div style={{display: "flex", flexFlow: "column", height: "100%"}}>
@@ -78,13 +104,15 @@ export class DevToolsApp extends React.Component<DevToolsAppProps, DevToolsAppSt
78104
</div>
79105

80106
let secondaryPanel = <>
107+
{this.state.secondaryView === "checkerViewAware" && <CheckerViewAware />}
81108
{this.state.secondaryView === "splash" && <SplashScreen />}
82109
{this.state.secondaryView === "help" && <HelpScreen />}
83110
{this.state.secondaryView === "stored" && <StoredScreen /> }
84111
{this.state.secondaryView === "summary" && <SummaryScreen /> }
85112
{this.state.secondaryView === "kcm_overview" && <KCMOverviewScreen /> }
86113
</>;
87114
let secondaryPanelModal = <>
115+
{this.state.secondaryView === "checkerViewAware" && <CheckerViewAware />}
88116
{this.state.secondaryView === "splash" && <SplashScreen />}
89117
{this.state.secondaryView === "help" && <HelpScreen />}
90118
{this.state.secondaryView === "stored" && <StoredScreen /> }
@@ -113,7 +141,15 @@ export class DevToolsApp extends React.Component<DevToolsAppProps, DevToolsAppSt
113141
<ComposedModal
114142
open={this.state.secondaryOpen}
115143
onClose={() => {
116-
this.devtoolsAppController.closeSecondary();
144+
let devtoolsAppController = getDevtoolsAppController();
145+
if (devtoolsAppController.getSecondaryView() === "checkerViewAware") {
146+
devtoolsAppController.closeSecondary();
147+
setTimeout(() => {
148+
devtoolsAppController.setSecondaryView("splash");
149+
}, 1500);
150+
} else {
151+
this.devtoolsAppController.closeSecondary();
152+
}
117153
}}
118154
style={{height: "100%"}}
119155
isFullWidth={true}
@@ -130,7 +166,7 @@ export class DevToolsApp extends React.Component<DevToolsAppProps, DevToolsAppSt
130166
document.body
131167
)
132168
}
133-
</Theme>
169+
</Theme>
134170
}
135171

136172

accessibility-checker-extension/src/ts/devtools/devtoolsAppController.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
import { getDevtoolsController } from "./devtoolsController";
1818

19-
export type eSecondaryView = "splash" | "summary" | "stored" | "help" | "kcm_overview";
19+
export type eSecondaryView = "splash" | "summary" | "stored" | "help" | "kcm_overview" | "checkerViewAware";
2020

2121
let devtoolsController = getDevtoolsController();
2222

@@ -28,7 +28,7 @@ let devtoolsController = getDevtoolsController();
2828
* and direct messages should be sent to the DevtoolsController
2929
*/
3030
export class DevtoolsAppController {
31-
secondaryView: eSecondaryView = "splash";
31+
secondaryView: eSecondaryView = "checkerViewAware";
3232
secondaryOpen: boolean = false;
3333
secondaryCloseQuerySelect: string = "";
3434
secondaryViewListeners: Array<(view: eSecondaryView) => void> = [];

accessibility-checker-extension/src/ts/interfaces/interfaces.ts

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ export interface ISettings {
4444
tabStopOutlines: boolean
4545
tabStopAlerts: boolean
4646
tabStopFirstTime: boolean
47+
checkerViewAwareFirstTime: boolean
4748
}
4849

4950
export interface ISessionState {

accessibility-checker-extension/src/ts/options/OptionsApp.tsx

+8-6
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ interface OptionsAppState {
6161
storedScansExist: boolean;
6262
modalDeploymentWithScans: boolean;
6363
modalGuidelinesWithScans: boolean;
64+
checkerViewAwareFirstTime: boolean;
6465
savePending: number;
6566
}
6667

@@ -83,6 +84,7 @@ export class OptionsApp extends React.Component<{}, OptionsAppState> {
8384
storedScansExist: false,
8485
modalDeploymentWithScans: false,
8586
modalGuidelinesWithScans: false,
87+
checkerViewAwareFirstTime: true,
8688
savePending: 0
8789
};
8890

@@ -97,7 +99,7 @@ export class OptionsApp extends React.Component<{}, OptionsAppState> {
9799
let tabStopLines: boolean = true;
98100
let tabStopOutlines: boolean = false;
99101
let tabStopAlerts: boolean = true;
100-
let tabStopFirstTime: boolean = true;
102+
let checkerViewAwareFirstTime: boolean = true;
101103

102104
let storedScansExist = await this.existStoredScans();
103105

@@ -107,7 +109,7 @@ export class OptionsApp extends React.Component<{}, OptionsAppState> {
107109
tabStopLines = settings.tabStopLines;
108110
tabStopOutlines = settings.tabStopOutlines;
109111
tabStopAlerts = settings.tabStopAlerts;
110-
tabStopFirstTime = settings.tabStopFirstTime;
112+
checkerViewAwareFirstTime = settings.checkerViewAwareFirstTime;
111113
if (selected_archive) {
112114
if (archives.some((archive: IArchiveDefinition) => (selected_archive && archive.id === selected_archive.id && archive.name === selected_archive.name))) {
113115
// do nothing
@@ -133,7 +135,7 @@ export class OptionsApp extends React.Component<{}, OptionsAppState> {
133135
rulesets: rulesets,
134136
selected_ruleset: this.getGuideline(selected_archive, selectedRulesetId!),
135137
tabStopLines: tabStopLines, tabStopOutlines: tabStopOutlines,
136-
tabStopAlerts: tabStopAlerts, tabStopFirstTime: tabStopFirstTime,
138+
tabStopAlerts: tabStopAlerts, checkerViewAwareFirstTime: checkerViewAwareFirstTime,
137139
storedScansExist: storedScansExist,
138140
});
139141

@@ -246,7 +248,7 @@ export class OptionsApp extends React.Component<{}, OptionsAppState> {
246248
// keep stored scans and don't update rulset (ali says don't give this choice)
247249

248250
this.setState({
249-
tabStopFirstTime: false,
251+
checkerViewAwareFirstTime: false,
250252
})
251253
let newSettings: ISettings = this.settingsFromState()
252254
this.setState({ savePending: 1 });
@@ -272,7 +274,7 @@ export class OptionsApp extends React.Component<{}, OptionsAppState> {
272274
retVal.selected_ruleset = this.state.selected_ruleset!;
273275
retVal.tabStopLines = this.state.tabStopLines;
274276
retVal.tabStopAlerts = this.state.tabStopAlerts;
275-
retVal.tabStopFirstTime = this.state.tabStopFirstTime;
277+
retVal.checkerViewAwareFirstTime = this.state.checkerViewAwareFirstTime;
276278
retVal.tabStopOutlines = this.state.tabStopOutlines;
277279
return retVal;
278280
}
@@ -314,7 +316,7 @@ export class OptionsApp extends React.Component<{}, OptionsAppState> {
314316
tabStopLines: true,
315317
tabStopOutlines: true,
316318
tabStopAlerts: true,
317-
tabStopFirstTime: false
319+
checkerViewAwareFirstTime: false
318320
});
319321
};
320322

0 commit comments

Comments
 (0)