UNPKG

@tech_query/formdata-submitter-polyfill

Version:

Support the submitter parameter to the FormData constructor in older browsers.

2 lines (1 loc) 1.95 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true});function y(e){return e instanceof HTMLInputElement&&(e.type==="submit"||e.type==="image")||e instanceof HTMLButtonElement&&e.type==="submit"}var c=Symbol();function p(e){return e instanceof HTMLInputElement&&e.type==="image"}function F(){window.addEventListener("click",e=>{p(e.target)&&(e.target[c]={x:e.offsetX,y:e.offsetY})})}function E(e,n){let t=document.createElement("span");n.insertAdjacentElement("afterend",t);let r=!e.contains(n);function o(a,s){let m=document.createElement("input");m.type="hidden",m.name=a,m.value=String(s),r&&m.setAttribute("form",e.id),t.insertAdjacentElement("beforeend",m)}let i=l(n);for(let[a,s]of i)o(a,s);return n.insertAdjacentElement("afterend",t),t}function l(e){var n;if(p(e)){let t=(n=e[c])!=null?n:{x:0,y:0},r=e.name?`${e.name}.`:"";return[[`${r}x`,String(t.x)],[`${r}y`,String(t.y)]]}else if(e.name)return[[e.name,e.value]];return[]}function u(e){let[n,t]=e;if(n!==void 0&&!(n instanceof HTMLFormElement))throw new TypeError("Failed to construct 'FormData': parameter 1 is not of type 'HTMLFormElement'");if(t!=null){if(!y(t))throw new TypeError("Failed to construct 'FormData': The specified element is not a submit button.");if(n&&t.form!==n)throw new DOMException("Failed to construct 'FormData': The specified element is not owned by this form element","NotFoundError")}}function b(e){if(typeof document!="undefined"){try{new window.FormData(document.createElement("form"),"not a submitter")}catch(n){return}window.FormData=e,F()}}var d=class extends window.FormData{constructor(...n){u(n);let[t,r]=n;if(!t||r==null){super(t);return}let o=r.disabled;r.disabled=!0;try{let i=E(t,r);super(t),i.remove()}finally{r.disabled=o}}};var f=class extends window.FormData{constructor(...n){u(n);let[t,r]=n;if(!t||r==null){super(t);return}super(t);let o=l(r);for(let[i,a]of o)this.append(i,a)}};exports.a = b; exports.b = d; exports.c = f;