Skip to content

Commit 47d2f98

Browse files
author
castastrophe
committed
Updating modal to add in polyfill support for IE11 and workarounds for event key
1 parent 7454e85 commit 47d2f98

File tree

7 files changed

+6111
-6091
lines changed

7 files changed

+6111
-6091
lines changed

elements/pfe-modal/demo/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ <h2 slot="pfe-modal--header">Modal with a header with a super duper long title a
6969
</section>
7070

7171
<script>
72-
document.querySelector("#custom-trigger").addEventListener("click", event => {
72+
document.querySelector("#custom-trigger").addEventListener("click", function (event) {
7373
document.querySelector("#custom-modal").openModal(event);
7474
});
7575
</script>

elements/pfe-modal/demo/pfe-modal.story.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,5 @@ stories.add(PfeModal.tag, () => {
4242
}];
4343

4444
const render = template(config);
45-
const output = tools.preview(render);
46-
return output;
4745
return tools.preview(render);
4846
});

elements/pfe-modal/src/pfe-modal.js

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
import PFElement from "../pfelement/pfelement.js";
22

3+
// StartsWith polyfill
4+
if (!String.prototype.startsWith) {
5+
String.prototype.startsWith = function(searchString, position){
6+
return this.substr(position || 0, searchString.length) === searchString;
7+
};
8+
}
9+
310
class PfeModal extends PFElement {
411
static get tag() {
512
return "pfe-modal";
@@ -29,7 +36,7 @@ class PfeModal extends PFElement {
2936
openModal(event) {
3037
event.preventDefault();
3138

32-
this.trigger = event.target;
39+
this.trigger = event ? event.target : window.event.srcElement;
3340

3441
this.dispatchEvent(
3542
new CustomEvent(`${this.tag}:open`, {
@@ -88,7 +95,9 @@ class PfeModal extends PFElement {
8895
this.addEventListener(`${this.tag}:close`, this._toggleModal);
8996

9097
this.addEventListener("keydown", this._keydownHandler);
98+
this._modalCloseButton.addEventListener("keydown", this._keydownHandler);
9199
this._modalCloseButton.addEventListener("click", this.closeModal);
100+
this._overlay.addEventListener("click", this.closeModal);
92101

93102
this._observer.observe(this, { childList: true });
94103
}
@@ -98,8 +107,9 @@ class PfeModal extends PFElement {
98107
this.removeEventListener(`${this.tag}:close`, this._toggleModal);
99108

100109
this.removeEventListener("keydown", this._keydownHandler);
101-
102110
this._modalCloseButton.removeEventListener("click", this.closeModal);
111+
this._modalCloseButton.removeEventListener("click", this.closeModal);
112+
this._overlay.removeEventListener("click", this.closeModal);
103113

104114
if (this.trigger) {
105115
this.trigger.removeEventListener("click", this.openModal);
@@ -125,8 +135,7 @@ class PfeModal extends PFElement {
125135
this.header.setAttribute("id", this.header_id);
126136
this._modalWindow.setAttribute("aria-labelledby", this.header_id);
127137
} else {
128-
// @TODO Do something else to assign the label
129-
this._container.setAttribute("no_header", "");
138+
// Get the first heading in the modal if it exists
130139
const headings = this.body.filter(el => el.tagName.startsWith("H"));
131140
if (headings.length > 0) {
132141
headings[0].setAttribute("id", this.header_id);
@@ -135,24 +144,27 @@ class PfeModal extends PFElement {
135144
this._modalWindow.setAttribute("aria-label", this.trigger.innerText);
136145
}
137146
}
138-
139-
this._overlay.addEventListener("click", this.closeModal);
140-
this._modalCloseButton.addEventListener("keydown", this._keydownHandler);
141147
}
142148

143149
_keydownHandler(event) {
144-
switch (event.key) {
150+
let target = event.target || window.event.srcElement;
151+
let key = event.key || event.keyCode;
152+
switch (key) {
145153
case "Tab":
146-
if (event.target === this._modalCloseButton) {
154+
case 9:
155+
if (target === this._modalCloseButton) {
147156
event.preventDefault();
148157
this._modalWindow.focus();
149158
}
150159
return;
151160
case "Escape":
161+
case "Esc":
162+
case 27:
152163
this.closeModal(event);
153164
return;
154165
case "Enter":
155-
if (event.target === this.trigger) {
166+
case 13:
167+
if (target === this.trigger) {
156168
this.openModal(event);
157169
}
158170
return;

elements/pfe-modal/src/pfe-modal.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ $pfe-modal--breakpoint--medium: 640px;
7272
display: none;
7373
}
7474

75-
&[no_header] {
75+
:host(:not([has_header])) & {
7676
@media screen and (min-width: $pfe-modal--breakpoint--medium) {
7777
padding: calc(#{pfe-var(container-padding)} * 2) calc(#{pfe-var(container-padding)} * 6) calc(#{pfe-var(container-padding)} * 2) calc(#{pfe-var(container-padding)} * 2);
7878
}

examples/index.html

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,12 @@ <h1>Demos</h1>
2222
<li><a href="../elements/pfe-icon/demo">pfe-icon</a></li>
2323
<li><a href="../elements/pfe-icon-panel/demo">pfe-icon-panel</a></li>
2424
<li><a href="../elements/pfe-layouts/demo">pfe-layouts</a></li>
25-
<li><a href="../elements/pfe-link-list/demo">pfe-link-list</a></li>
2625
<li><a href="../elements/pfe-markdown/demo">pfe-markdown</a></li>
2726
<li><a href="../elements/pfe-modal/demo">pfe-modal</a></li>
28-
<li><a href="../elements/pfe-navigation/demo">pfe-navigation</a></li>
2927
<li><a href="../elements/pfe-number/demo">pfe-number</a></li>
3028
<li><a href="../elements/pfe-page-status/demo">pfe-page-status</a></li>
3129
<li><a href="../elements/pfe-progress-indicator/demo">pfe-progress-indicator</a></li>
30+
<li><a href="../elements/pfe-styles/demo">pfe-styles</a></li>
3231
<li><a href="../elements/pfe-tabs/demo">pfe-tabs</a></li>
3332
</ul>
3433
</body>

0 commit comments

Comments
 (0)