Skip to content

Commit 33a44f8

Browse files
committed
improve logic, explain why it can't use other polyfill patches
1 parent 8d761ad commit 33a44f8

File tree

3 files changed

+12
-8
lines changed

3 files changed

+12
-8
lines changed

web_src/js/modules/tippy.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ function switchTitleToTooltip(target) {
106106
/**
107107
* Creating tooltip tippy instance is expensive, so we only create it when the user hovers over the element
108108
* According to https://www.w3.org/TR/DOM-Level-3-Events/#events-mouseevent-event-order , mouseover event is fired before mouseenter event
109-
* Some old browsers like Pale Moon doesn't support "mouseenter(capture)"
109+
* Some browsers like PaleMoon don't support "addEventListener('mouseenter', capture)"
110110
* The tippy by default uses "mouseenter" event to show, so we use "mouseover" event to switch to tippy
111111
* @param e {Event}
112112
*/

web_src/js/utils/dom.js

+10-6
Original file line numberDiff line numberDiff line change
@@ -195,19 +195,23 @@ export function loadElem(el, src) {
195195
});
196196
}
197197

198-
// some browsers like PaleMoon don't have "SubmitEvent" support, so we need to polyfill it (a tricky method): use the last clicked button as submitter
198+
// some browsers like PaleMoon don't have "SubmitEvent" support, so polyfill it by a tricky method: use the last clicked button as submitter
199+
// it can't use other transparent polyfill patches because PaleMoon also doesn't support "addEventListener(capture)"
199200
const needSubmitEventPolyfill = typeof SubmitEvent === 'undefined';
200201

201202
export function submitEventSubmitter(e) {
202203
return needSubmitEventPolyfill ? (e.target._submitter || null) : e.submitter;
203204
}
204205

206+
function submitEventPolyfillListener(e) {
207+
const form = e.target.closest('form');
208+
if (!form) return;
209+
form._submitter = e.target.closest('button:not([type]), button[type="submit"], input[type="submit"]');
210+
}
211+
205212
export function initSubmitEventPolyfill() {
206213
if (!needSubmitEventPolyfill) return;
207214
console.warn(`This browser doesn't have "SubmitEvent" support, use a tricky method to polyfill`);
208-
document.addEventListener('click', (e) => {
209-
if (!e.target.form) return;
210-
const isSubmitButton = ((e.target.nodeName === 'INPUT' || e.target.nodeName === 'BUTTON') && e.target.type === 'submit');
211-
e.target.form._submitter = isSubmitButton ? e.target : null;
212-
});
215+
document.body.addEventListener('click', submitEventPolyfillListener);
216+
document.body.addEventListener('focus', submitEventPolyfillListener);
213217
}

web_src/js/webcomponents/webcomponents.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import '@webcomponents/custom-elements'; // polyfill for some browsers like Pale Moon
1+
import '@webcomponents/custom-elements'; // polyfill for some browsers like PaleMoon
22
import './polyfill.js';
33

44
import '@github/relative-time-element';

0 commit comments

Comments
 (0)