fix possible .submitter being null
This commit is contained in:
Родитель
75df500d65
Коммит
90764c6e3a
|
@ -153,7 +153,7 @@ function findFocusableElementWithin(hostElement) {
|
|||
/**
|
||||
* Determines if an element is attached to the DOM.
|
||||
* @param {Element} element to check
|
||||
* @return {Boolean} whether the element is in DOM
|
||||
* @return {boolean} whether the element is in DOM
|
||||
*/
|
||||
function isConnected(element) {
|
||||
return element.isConnected || document.body.contains(element);
|
||||
|
@ -161,6 +161,7 @@ function isConnected(element) {
|
|||
|
||||
/**
|
||||
* @param {!Event} event
|
||||
* @return {?Element}
|
||||
*/
|
||||
function findFormSubmitter(event) {
|
||||
if (event.submitter) {
|
||||
|
@ -173,7 +174,7 @@ function findFormSubmitter(event) {
|
|||
}
|
||||
|
||||
var submitter = dialogPolyfill.formSubmitter;
|
||||
if (!submitter) {
|
||||
if (!submitter || submitter.form !== form) {
|
||||
var target = event.target;
|
||||
var root = ('getRootNode' in target && target.getRootNode() || document);
|
||||
submitter = root.activeElement;
|
||||
|
@ -195,7 +196,7 @@ function maybeHandleSubmit(event) {
|
|||
var form = /** @type {!HTMLFormElement} */ (event.target);
|
||||
|
||||
// We'd have a value if we clicked on an imagemap.
|
||||
var value = dialogPolyfill.useValue;
|
||||
var value = dialogPolyfill.imagemapUseValue;
|
||||
var submitter = findFormSubmitter(event);
|
||||
if (value === null && submitter) {
|
||||
value = submitter.value;
|
||||
|
@ -215,7 +216,8 @@ function maybeHandleSubmit(event) {
|
|||
}
|
||||
event.preventDefault();
|
||||
|
||||
if (submitter) {
|
||||
if (value != null) {
|
||||
// nb. we explicitly check against null/undefined
|
||||
dialog.close(value);
|
||||
} else {
|
||||
dialog.close();
|
||||
|
@ -751,7 +753,7 @@ dialogPolyfill.DialogManager.prototype.removeDialog = function(dpi) {
|
|||
|
||||
dialogPolyfill.dm = new dialogPolyfill.DialogManager();
|
||||
dialogPolyfill.formSubmitter = null;
|
||||
dialogPolyfill.useValue = null;
|
||||
dialogPolyfill.imagemapUseValue = null;
|
||||
|
||||
/**
|
||||
* Installs global handlers, such as click listers and native method overrides. These are needed
|
||||
|
@ -796,7 +798,7 @@ if (window.HTMLDialogElement === undefined) {
|
|||
*/
|
||||
document.addEventListener('click', function(ev) {
|
||||
dialogPolyfill.formSubmitter = null;
|
||||
dialogPolyfill.useValue = null;
|
||||
dialogPolyfill.imagemapUseValue = null;
|
||||
if (ev.defaultPrevented) { return; } // e.g. a submit which prevents default submission
|
||||
|
||||
var target = /** @type {Element} */ (ev.target);
|
||||
|
@ -810,7 +812,7 @@ if (window.HTMLDialogElement === undefined) {
|
|||
if (!valid) {
|
||||
if (!(target.localName === 'input' && target.type === 'image')) { return; }
|
||||
// this is a <input type="image">, which can submit forms
|
||||
dialogPolyfill.useValue = ev.offsetX + ',' + ev.offsetY;
|
||||
dialogPolyfill.imagemapUseValue = ev.offsetX + ',' + ev.offsetY;
|
||||
}
|
||||
|
||||
var dialog = findNearestDialog(target);
|
||||
|
|
|
@ -159,7 +159,7 @@
|
|||
/**
|
||||
* Determines if an element is attached to the DOM.
|
||||
* @param {Element} element to check
|
||||
* @return {Boolean} whether the element is in DOM
|
||||
* @return {boolean} whether the element is in DOM
|
||||
*/
|
||||
function isConnected(element) {
|
||||
return element.isConnected || document.body.contains(element);
|
||||
|
@ -167,6 +167,7 @@
|
|||
|
||||
/**
|
||||
* @param {!Event} event
|
||||
* @return {?Element}
|
||||
*/
|
||||
function findFormSubmitter(event) {
|
||||
if (event.submitter) {
|
||||
|
@ -179,7 +180,7 @@
|
|||
}
|
||||
|
||||
var submitter = dialogPolyfill.formSubmitter;
|
||||
if (!submitter) {
|
||||
if (!submitter || submitter.form !== form) {
|
||||
var target = event.target;
|
||||
var root = ('getRootNode' in target && target.getRootNode() || document);
|
||||
submitter = root.activeElement;
|
||||
|
@ -201,7 +202,7 @@
|
|||
var form = /** @type {!HTMLFormElement} */ (event.target);
|
||||
|
||||
// We'd have a value if we clicked on an imagemap.
|
||||
var value = dialogPolyfill.useValue;
|
||||
var value = dialogPolyfill.imagemapUseValue;
|
||||
var submitter = findFormSubmitter(event);
|
||||
if (value === null && submitter) {
|
||||
value = submitter.value;
|
||||
|
@ -221,7 +222,8 @@
|
|||
}
|
||||
event.preventDefault();
|
||||
|
||||
if (submitter) {
|
||||
if (value != null) {
|
||||
// nb. we explicitly check against null/undefined
|
||||
dialog.close(value);
|
||||
} else {
|
||||
dialog.close();
|
||||
|
@ -757,7 +759,7 @@
|
|||
|
||||
dialogPolyfill.dm = new dialogPolyfill.DialogManager();
|
||||
dialogPolyfill.formSubmitter = null;
|
||||
dialogPolyfill.useValue = null;
|
||||
dialogPolyfill.imagemapUseValue = null;
|
||||
|
||||
/**
|
||||
* Installs global handlers, such as click listers and native method overrides. These are needed
|
||||
|
@ -802,7 +804,7 @@
|
|||
*/
|
||||
document.addEventListener('click', function(ev) {
|
||||
dialogPolyfill.formSubmitter = null;
|
||||
dialogPolyfill.useValue = null;
|
||||
dialogPolyfill.imagemapUseValue = null;
|
||||
if (ev.defaultPrevented) { return; } // e.g. a submit which prevents default submission
|
||||
|
||||
var target = /** @type {Element} */ (ev.target);
|
||||
|
@ -816,7 +818,7 @@
|
|||
if (!valid) {
|
||||
if (!(target.localName === 'input' && target.type === 'image')) { return; }
|
||||
// this is a <input type="image">, which can submit forms
|
||||
dialogPolyfill.useValue = ev.offsetX + ',' + ev.offsetY;
|
||||
dialogPolyfill.imagemapUseValue = ev.offsetX + ',' + ev.offsetY;
|
||||
}
|
||||
|
||||
var dialog = findNearestDialog(target);
|
||||
|
|
16
index.js
16
index.js
|
@ -154,7 +154,7 @@ function findFocusableElementWithin(hostElement) {
|
|||
/**
|
||||
* Determines if an element is attached to the DOM.
|
||||
* @param {Element} element to check
|
||||
* @return {Boolean} whether the element is in DOM
|
||||
* @return {boolean} whether the element is in DOM
|
||||
*/
|
||||
function isConnected(element) {
|
||||
return element.isConnected || document.body.contains(element);
|
||||
|
@ -162,6 +162,7 @@ function isConnected(element) {
|
|||
|
||||
/**
|
||||
* @param {!Event} event
|
||||
* @return {?Element}
|
||||
*/
|
||||
function findFormSubmitter(event) {
|
||||
if (event.submitter) {
|
||||
|
@ -174,7 +175,7 @@ function findFormSubmitter(event) {
|
|||
}
|
||||
|
||||
var submitter = dialogPolyfill.formSubmitter;
|
||||
if (!submitter) {
|
||||
if (!submitter || submitter.form !== form) {
|
||||
var target = event.target;
|
||||
var root = ('getRootNode' in target && target.getRootNode() || document);
|
||||
submitter = root.activeElement;
|
||||
|
@ -196,7 +197,7 @@ function maybeHandleSubmit(event) {
|
|||
var form = /** @type {!HTMLFormElement} */ (event.target);
|
||||
|
||||
// We'd have a value if we clicked on an imagemap.
|
||||
var value = dialogPolyfill.useValue;
|
||||
var value = dialogPolyfill.imagemapUseValue;
|
||||
var submitter = findFormSubmitter(event);
|
||||
if (value === null && submitter) {
|
||||
value = submitter.value;
|
||||
|
@ -216,7 +217,8 @@ function maybeHandleSubmit(event) {
|
|||
}
|
||||
event.preventDefault();
|
||||
|
||||
if (submitter) {
|
||||
if (value != null) {
|
||||
// nb. we explicitly check against null/undefined
|
||||
dialog.close(value);
|
||||
} else {
|
||||
dialog.close();
|
||||
|
@ -754,7 +756,7 @@ dialogPolyfill.DialogManager.prototype.removeDialog = function(dpi) {
|
|||
|
||||
dialogPolyfill.dm = new dialogPolyfill.DialogManager();
|
||||
dialogPolyfill.formSubmitter = null;
|
||||
dialogPolyfill.useValue = null;
|
||||
dialogPolyfill.imagemapUseValue = null;
|
||||
|
||||
/**
|
||||
* Installs global handlers, such as click listers and native method overrides. These are needed
|
||||
|
@ -799,7 +801,7 @@ if (window.HTMLDialogElement === undefined) {
|
|||
*/
|
||||
document.addEventListener('click', function(ev) {
|
||||
dialogPolyfill.formSubmitter = null;
|
||||
dialogPolyfill.useValue = null;
|
||||
dialogPolyfill.imagemapUseValue = null;
|
||||
if (ev.defaultPrevented) { return; } // e.g. a submit which prevents default submission
|
||||
|
||||
var target = /** @type {Element} */ (ev.target);
|
||||
|
@ -813,7 +815,7 @@ if (window.HTMLDialogElement === undefined) {
|
|||
if (!valid) {
|
||||
if (!(target.localName === 'input' && target.type === 'image')) { return; }
|
||||
// this is a <input type="image">, which can submit forms
|
||||
dialogPolyfill.useValue = ev.offsetX + ',' + ev.offsetY;
|
||||
dialogPolyfill.imagemapUseValue = ev.offsetX + ',' + ev.offsetY;
|
||||
}
|
||||
|
||||
var dialog = findNearestDialog(target);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "dialog-polyfill",
|
||||
"version": "0.5.5",
|
||||
"version": "0.5.6",
|
||||
"description": "Polyfill for the dialog element",
|
||||
"main": "dist/dialog-polyfill.js",
|
||||
"module": "dist/dialog-polyfill.esm.js",
|
||||
|
|
Загрузка…
Ссылка в новой задаче