Skip to content

Commit c480f90

Browse files
committed
Breaking: Convert indicator to jsx, add outer container (fixes 230)
1 parent f764480 commit c480f90

4 files changed

+50
-40
lines changed

js/PageLevelProgressIndicatorView.js

+25-26
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
import Adapt from 'core/js/adapt';
2+
import React from 'react';
3+
import ReactDOM from 'react-dom';
4+
import { templates } from 'core/js/reactHelpers';
25

36
class PageLevelProgressIndicatorView extends Backbone.View {
47

@@ -16,25 +19,15 @@ class PageLevelProgressIndicatorView extends Backbone.View {
1619
this.setUpEventListeners();
1720
this.setPercentageComplete();
1821
this.render();
19-
this.refresh();
2022
}
2123

2224
addClasses() {
2325
this.$el.addClass([
24-
'pagelevelprogress__indicator',
26+
'pagelevelprogress__indicator-outer',
2527
'is-' + this.type
2628
].join(' '));
2729
}
2830

29-
checkAria() {
30-
if (!this.ariaLabel) {
31-
this.$el.attr('aria-hidden', true);
32-
return;
33-
}
34-
const data = this.getRenderData();
35-
this.$('.js-indicator-aria-label').html(Handlebars.compile(this.ariaLabel)(data));
36-
}
37-
3831
setUpEventListeners() {
3932
if (this.parent) {
4033
this.listenToOnce(this.parent, 'postRemove', this.remove);
@@ -47,6 +40,9 @@ class PageLevelProgressIndicatorView extends Backbone.View {
4740
setPercentageComplete() {
4841
const percentage = this.calculatePercentage();
4942
this.model.set('percentageComplete', percentage);
43+
this.$el.css({
44+
'--adapt-pagelevelprogress-percentage': percentage + '%'
45+
});
5046
return percentage;
5147
}
5248

@@ -55,24 +51,15 @@ class PageLevelProgressIndicatorView extends Backbone.View {
5551
}
5652

5753
render() {
54+
this.checkCompletion();
55+
this.checkAriaHidden();
5856
const data = this.getRenderData();
59-
const template = Handlebars.templates[this.constructor.template];
60-
this.$el.html(template(data));
61-
}
62-
63-
getRenderData() {
64-
const data = this.model.toJSON();
65-
data.ariaLabel = this.ariaLabel;
66-
data.type = this.type;
67-
return data;
57+
const Component = templates.pageLevelProgressIndicator;
58+
ReactDOM.render(<Component {...data} />, this.el);
6859
}
6960

7061
refresh() {
71-
this.checkCompletion();
72-
this.checkAria();
73-
this.$('.js-indicator-bar').css({
74-
width: this.calculatePercentage() + '%'
75-
});
62+
this.render();
7663
}
7764

7865
checkCompletion() {
@@ -90,8 +77,20 @@ class PageLevelProgressIndicatorView extends Backbone.View {
9077
.toggleClass('is-incorrect', isIncorrect);
9178
}
9279

80+
checkAriaHidden() {
81+
if (this.ariaLabel) return;
82+
this.$el.attr('aria-hidden', true);
83+
}
84+
85+
getRenderData() {
86+
const data = this.model.toJSON();
87+
data.ariaLabel = this.ariaLabel;
88+
data.type = this.type;
89+
return data;
90+
}
91+
9392
}
9493

95-
PageLevelProgressIndicatorView.template = 'pageLevelProgressIndicator';
94+
PageLevelProgressIndicatorView.template = 'pageLevelProgressIndicator.jsx';
9695

9796
export default PageLevelProgressIndicatorView;

less/pageLevelProgressIndicator.less

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
height: inherit;
2626
min-width: 15%;
2727
background-color: @black;
28+
width: var(--adapt-pagelevelprogress-percentage);
2829
}
2930

3031
&__indicator .js-indicator-aria-label {

templates/pageLevelProgressIndicator.hbs

-14
This file was deleted.
+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import React from 'react';
2+
import { compile } from 'core/js/reactHelpers';
3+
4+
export default function PageLevelProgressIndicator (props) {
5+
const {
6+
ariaLabel
7+
} = props;
8+
9+
return (
10+
<span className='pagelevelprogress__indicator'>
11+
<span className="pagelevelprogress__indicator-inner">
12+
13+
<span className="pagelevelprogress__indicator-bar"></span>
14+
15+
{ariaLabel &&
16+
<span className="aria-label">
17+
{compile(ariaLabel)}
18+
</span>
19+
}
20+
21+
</span>
22+
</span>
23+
);
24+
};

0 commit comments

Comments
 (0)