Add massive collection of CSS, JavaScript and theme assets that were previously excluded: **CSS Files (681 total):** - HVAC plugin-specific styles (hvac-*.css): 34 files including dashboard, certificates, registration, mobile nav, accessibility fixes, animations, and welcome popup - Theme framework files (Astra, builder systems, layouts): 200+ files - Plugin compatibility styles (WooCommerce, WPForms, Elementor, Contact Form 7): 150+ files - WordPress core and editor styles: 50+ files - Responsive and RTL language support: 200+ files **JavaScript Files (400+ total):** - HVAC plugin functionality (hvac-*.js): 27 files including menu systems, dashboard enhancements, profile sharing, mobile responsive features, accessibility, and animations - Framework and library files: jQuery plugins, GSAP, AOS, Swiper, Chart.js, Lottie, Isotope - Plugin compatibility scripts: WPForms, WooCommerce, Elementor, Contact Form 7, LifterLMS - WordPress core functionality: customizer, admin, block editor compatibility - Third-party integrations: Stripe, SMTP, analytics, search functionality **Assets:** - Certificate background images and logos - Comprehensive theme styling infrastructure - Mobile-responsive design systems - Cross-browser compatibility assets - Performance-optimized minified versions **Updated .gitignore:** - Fixed asset directory whitelisting patterns to properly include CSS/JS/images - Added proper directory structure recognition (!/assets/css/, !/assets/js/, etc.) - Maintains security by excluding sensitive files while including essential assets This commit provides the complete frontend infrastructure needed for: - Full theme functionality and styling - Plugin feature implementations - Mobile responsiveness and accessibility - Cross-browser compatibility - Performance optimization - Developer workflow support
		
			
				
	
	
		
			590 lines
		
	
	
	
		
			14 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			590 lines
		
	
	
	
		
			14 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * Fetch
 | |
|  * https://github.com/github/fetch
 | |
|  *
 | |
|  * Released under the MIT License (MIT)
 | |
|  * https://github.com/github/fetch/blob/master/LICENSE
 | |
|  */
 | |
| ( function ( global, factory ) {
 | |
| 	typeof exports === 'object' && typeof module !== 'undefined'
 | |
| 		? factory( exports )
 | |
| 		: typeof define === 'function' && define.amd
 | |
| 		? define( [ 'exports' ], factory )
 | |
| 		: factory( ( global.WHATWGFetch = {} ) );
 | |
| } )( this, function ( exports ) {
 | |
| 	'use strict';
 | |
| 
 | |
| 	var support = {
 | |
| 		searchParams: 'URLSearchParams' in self,
 | |
| 		iterable: 'Symbol' in self && 'iterator' in Symbol,
 | |
| 		blob:
 | |
| 			'FileReader' in self &&
 | |
| 			'Blob' in self &&
 | |
| 			( function () {
 | |
| 				try {
 | |
| 					new Blob();
 | |
| 					return true;
 | |
| 				} catch ( e ) {
 | |
| 					return false;
 | |
| 				}
 | |
| 			} )(),
 | |
| 		formData: 'FormData' in self,
 | |
| 		arrayBuffer: 'ArrayBuffer' in self,
 | |
| 	};
 | |
| 
 | |
| 	function isDataView( obj ) {
 | |
| 		return obj && DataView.prototype.isPrototypeOf( obj );
 | |
| 	}
 | |
| 
 | |
| 	if ( support.arrayBuffer ) {
 | |
| 		var viewClasses = [
 | |
| 			'[object Int8Array]',
 | |
| 			'[object Uint8Array]',
 | |
| 			'[object Uint8ClampedArray]',
 | |
| 			'[object Int16Array]',
 | |
| 			'[object Uint16Array]',
 | |
| 			'[object Int32Array]',
 | |
| 			'[object Uint32Array]',
 | |
| 			'[object Float32Array]',
 | |
| 			'[object Float64Array]',
 | |
| 		];
 | |
| 
 | |
| 		var isArrayBufferView =
 | |
| 			ArrayBuffer.isView ||
 | |
| 			function ( obj ) {
 | |
| 				return (
 | |
| 					obj &&
 | |
| 					viewClasses.indexOf(
 | |
| 						Object.prototype.toString.call( obj )
 | |
| 					) > -1
 | |
| 				);
 | |
| 			};
 | |
| 	}
 | |
| 
 | |
| 	function normalizeName( name ) {
 | |
| 		if ( typeof name !== 'string' ) {
 | |
| 			name = String( name );
 | |
| 		}
 | |
| 		if ( /[^a-z0-9\-#$%&'*+.^_`|~]/i.test( name ) ) {
 | |
| 			throw new TypeError( 'Invalid character in header field name' );
 | |
| 		}
 | |
| 		return name.toLowerCase();
 | |
| 	}
 | |
| 
 | |
| 	function normalizeValue( value ) {
 | |
| 		if ( typeof value !== 'string' ) {
 | |
| 			value = String( value );
 | |
| 		}
 | |
| 		return value;
 | |
| 	}
 | |
| 
 | |
| 	// Build a destructive iterator for the value list
 | |
| 	function iteratorFor( items ) {
 | |
| 		var iterator = {
 | |
| 			next: function () {
 | |
| 				var value = items.shift();
 | |
| 				return { done: value === undefined, value: value };
 | |
| 			},
 | |
| 		};
 | |
| 
 | |
| 		if ( support.iterable ) {
 | |
| 			iterator[ Symbol.iterator ] = function () {
 | |
| 				return iterator;
 | |
| 			};
 | |
| 		}
 | |
| 
 | |
| 		return iterator;
 | |
| 	}
 | |
| 
 | |
| 	function Headers( headers ) {
 | |
| 		this.map = {};
 | |
| 
 | |
| 		if ( headers instanceof Headers ) {
 | |
| 			headers.forEach( function ( value, name ) {
 | |
| 				this.append( name, value );
 | |
| 			}, this );
 | |
| 		} else if ( Array.isArray( headers ) ) {
 | |
| 			headers.forEach( function ( header ) {
 | |
| 				this.append( header[ 0 ], header[ 1 ] );
 | |
| 			}, this );
 | |
| 		} else if ( headers ) {
 | |
| 			Object.getOwnPropertyNames( headers ).forEach( function ( name ) {
 | |
| 				this.append( name, headers[ name ] );
 | |
| 			}, this );
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	Headers.prototype.append = function ( name, value ) {
 | |
| 		name = normalizeName( name );
 | |
| 		value = normalizeValue( value );
 | |
| 		var oldValue = this.map[ name ];
 | |
| 		this.map[ name ] = oldValue ? oldValue + ', ' + value : value;
 | |
| 	};
 | |
| 
 | |
| 	Headers.prototype[ 'delete' ] = function ( name ) {
 | |
| 		delete this.map[ normalizeName( name ) ];
 | |
| 	};
 | |
| 
 | |
| 	Headers.prototype.get = function ( name ) {
 | |
| 		name = normalizeName( name );
 | |
| 		return this.has( name ) ? this.map[ name ] : null;
 | |
| 	};
 | |
| 
 | |
| 	Headers.prototype.has = function ( name ) {
 | |
| 		return this.map.hasOwnProperty( normalizeName( name ) );
 | |
| 	};
 | |
| 
 | |
| 	Headers.prototype.set = function ( name, value ) {
 | |
| 		this.map[ normalizeName( name ) ] = normalizeValue( value );
 | |
| 	};
 | |
| 
 | |
| 	Headers.prototype.forEach = function ( callback, thisArg ) {
 | |
| 		for ( var name in this.map ) {
 | |
| 			if ( this.map.hasOwnProperty( name ) ) {
 | |
| 				callback.call( thisArg, this.map[ name ], name, this );
 | |
| 			}
 | |
| 		}
 | |
| 	};
 | |
| 
 | |
| 	Headers.prototype.keys = function () {
 | |
| 		var items = [];
 | |
| 		this.forEach( function ( value, name ) {
 | |
| 			items.push( name );
 | |
| 		} );
 | |
| 		return iteratorFor( items );
 | |
| 	};
 | |
| 
 | |
| 	Headers.prototype.values = function () {
 | |
| 		var items = [];
 | |
| 		this.forEach( function ( value ) {
 | |
| 			items.push( value );
 | |
| 		} );
 | |
| 		return iteratorFor( items );
 | |
| 	};
 | |
| 
 | |
| 	Headers.prototype.entries = function () {
 | |
| 		var items = [];
 | |
| 		this.forEach( function ( value, name ) {
 | |
| 			items.push( [ name, value ] );
 | |
| 		} );
 | |
| 		return iteratorFor( items );
 | |
| 	};
 | |
| 
 | |
| 	if ( support.iterable ) {
 | |
| 		Headers.prototype[ Symbol.iterator ] = Headers.prototype.entries;
 | |
| 	}
 | |
| 
 | |
| 	function consumed( body ) {
 | |
| 		if ( body.bodyUsed ) {
 | |
| 			return Promise.reject( new TypeError( 'Already read' ) );
 | |
| 		}
 | |
| 		body.bodyUsed = true;
 | |
| 	}
 | |
| 
 | |
| 	function fileReaderReady( reader ) {
 | |
| 		return new Promise( function ( resolve, reject ) {
 | |
| 			reader.onload = function () {
 | |
| 				resolve( reader.result );
 | |
| 			};
 | |
| 			reader.onerror = function () {
 | |
| 				reject( reader.error );
 | |
| 			};
 | |
| 		} );
 | |
| 	}
 | |
| 
 | |
| 	function readBlobAsArrayBuffer( blob ) {
 | |
| 		var reader = new FileReader();
 | |
| 		var promise = fileReaderReady( reader );
 | |
| 		reader.readAsArrayBuffer( blob );
 | |
| 		return promise;
 | |
| 	}
 | |
| 
 | |
| 	function readBlobAsText( blob ) {
 | |
| 		var reader = new FileReader();
 | |
| 		var promise = fileReaderReady( reader );
 | |
| 		reader.readAsText( blob );
 | |
| 		return promise;
 | |
| 	}
 | |
| 
 | |
| 	function readArrayBufferAsText( buf ) {
 | |
| 		var view = new Uint8Array( buf );
 | |
| 		var chars = new Array( view.length );
 | |
| 
 | |
| 		for ( var i = 0; i < view.length; i++ ) {
 | |
| 			chars[ i ] = String.fromCharCode( view[ i ] );
 | |
| 		}
 | |
| 		return chars.join( '' );
 | |
| 	}
 | |
| 
 | |
| 	function bufferClone( buf ) {
 | |
| 		if ( buf.slice ) {
 | |
| 			return buf.slice( 0 );
 | |
| 		} else {
 | |
| 			var view = new Uint8Array( buf.byteLength );
 | |
| 			view.set( new Uint8Array( buf ) );
 | |
| 			return view.buffer;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	function Body() {
 | |
| 		this.bodyUsed = false;
 | |
| 
 | |
| 		this._initBody = function ( body ) {
 | |
| 			this._bodyInit = body;
 | |
| 			if ( ! body ) {
 | |
| 				this._bodyText = '';
 | |
| 			} else if ( typeof body === 'string' ) {
 | |
| 				this._bodyText = body;
 | |
| 			} else if ( support.blob && Blob.prototype.isPrototypeOf( body ) ) {
 | |
| 				this._bodyBlob = body;
 | |
| 			} else if (
 | |
| 				support.formData &&
 | |
| 				FormData.prototype.isPrototypeOf( body )
 | |
| 			) {
 | |
| 				this._bodyFormData = body;
 | |
| 			} else if (
 | |
| 				support.searchParams &&
 | |
| 				URLSearchParams.prototype.isPrototypeOf( body )
 | |
| 			) {
 | |
| 				this._bodyText = body.toString();
 | |
| 			} else if (
 | |
| 				support.arrayBuffer &&
 | |
| 				support.blob &&
 | |
| 				isDataView( body )
 | |
| 			) {
 | |
| 				this._bodyArrayBuffer = bufferClone( body.buffer );
 | |
| 				// IE 10-11 can't handle a DataView body.
 | |
| 				this._bodyInit = new Blob( [ this._bodyArrayBuffer ] );
 | |
| 			} else if (
 | |
| 				support.arrayBuffer &&
 | |
| 				( ArrayBuffer.prototype.isPrototypeOf( body ) ||
 | |
| 					isArrayBufferView( body ) )
 | |
| 			) {
 | |
| 				this._bodyArrayBuffer = bufferClone( body );
 | |
| 			} else {
 | |
| 				this._bodyText = body = Object.prototype.toString.call( body );
 | |
| 			}
 | |
| 
 | |
| 			if ( ! this.headers.get( 'content-type' ) ) {
 | |
| 				if ( typeof body === 'string' ) {
 | |
| 					this.headers.set(
 | |
| 						'content-type',
 | |
| 						'text/plain;charset=UTF-8'
 | |
| 					);
 | |
| 				} else if ( this._bodyBlob && this._bodyBlob.type ) {
 | |
| 					this.headers.set( 'content-type', this._bodyBlob.type );
 | |
| 				} else if (
 | |
| 					support.searchParams &&
 | |
| 					URLSearchParams.prototype.isPrototypeOf( body )
 | |
| 				) {
 | |
| 					this.headers.set(
 | |
| 						'content-type',
 | |
| 						'application/x-www-form-urlencoded;charset=UTF-8'
 | |
| 					);
 | |
| 				}
 | |
| 			}
 | |
| 		};
 | |
| 
 | |
| 		if ( support.blob ) {
 | |
| 			this.blob = function () {
 | |
| 				var rejected = consumed( this );
 | |
| 				if ( rejected ) {
 | |
| 					return rejected;
 | |
| 				}
 | |
| 
 | |
| 				if ( this._bodyBlob ) {
 | |
| 					return Promise.resolve( this._bodyBlob );
 | |
| 				} else if ( this._bodyArrayBuffer ) {
 | |
| 					return Promise.resolve(
 | |
| 						new Blob( [ this._bodyArrayBuffer ] )
 | |
| 					);
 | |
| 				} else if ( this._bodyFormData ) {
 | |
| 					throw new Error( 'could not read FormData body as blob' );
 | |
| 				} else {
 | |
| 					return Promise.resolve( new Blob( [ this._bodyText ] ) );
 | |
| 				}
 | |
| 			};
 | |
| 
 | |
| 			this.arrayBuffer = function () {
 | |
| 				if ( this._bodyArrayBuffer ) {
 | |
| 					return (
 | |
| 						consumed( this ) ||
 | |
| 						Promise.resolve( this._bodyArrayBuffer )
 | |
| 					);
 | |
| 				} else {
 | |
| 					return this.blob().then( readBlobAsArrayBuffer );
 | |
| 				}
 | |
| 			};
 | |
| 		}
 | |
| 
 | |
| 		this.text = function () {
 | |
| 			var rejected = consumed( this );
 | |
| 			if ( rejected ) {
 | |
| 				return rejected;
 | |
| 			}
 | |
| 
 | |
| 			if ( this._bodyBlob ) {
 | |
| 				return readBlobAsText( this._bodyBlob );
 | |
| 			} else if ( this._bodyArrayBuffer ) {
 | |
| 				return Promise.resolve(
 | |
| 					readArrayBufferAsText( this._bodyArrayBuffer )
 | |
| 				);
 | |
| 			} else if ( this._bodyFormData ) {
 | |
| 				throw new Error( 'could not read FormData body as text' );
 | |
| 			} else {
 | |
| 				return Promise.resolve( this._bodyText );
 | |
| 			}
 | |
| 		};
 | |
| 
 | |
| 		if ( support.formData ) {
 | |
| 			this.formData = function () {
 | |
| 				return this.text().then( decode );
 | |
| 			};
 | |
| 		}
 | |
| 
 | |
| 		this.json = function () {
 | |
| 			return this.text().then( JSON.parse );
 | |
| 		};
 | |
| 
 | |
| 		return this;
 | |
| 	}
 | |
| 
 | |
| 	// HTTP methods whose capitalization should be normalized
 | |
| 	var methods = [ 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT' ];
 | |
| 
 | |
| 	function normalizeMethod( method ) {
 | |
| 		var upcased = method.toUpperCase();
 | |
| 		return methods.indexOf( upcased ) > -1 ? upcased : method;
 | |
| 	}
 | |
| 
 | |
| 	function Request( input, options ) {
 | |
| 		options = options || {};
 | |
| 		var body = options.body;
 | |
| 
 | |
| 		if ( input instanceof Request ) {
 | |
| 			if ( input.bodyUsed ) {
 | |
| 				throw new TypeError( 'Already read' );
 | |
| 			}
 | |
| 			this.url = input.url;
 | |
| 			this.credentials = input.credentials;
 | |
| 			if ( ! options.headers ) {
 | |
| 				this.headers = new Headers( input.headers );
 | |
| 			}
 | |
| 			this.method = input.method;
 | |
| 			this.mode = input.mode;
 | |
| 			this.signal = input.signal;
 | |
| 			if ( ! body && input._bodyInit != null ) {
 | |
| 				body = input._bodyInit;
 | |
| 				input.bodyUsed = true;
 | |
| 			}
 | |
| 		} else {
 | |
| 			this.url = String( input );
 | |
| 		}
 | |
| 
 | |
| 		this.credentials =
 | |
| 			options.credentials || this.credentials || 'same-origin';
 | |
| 		if ( options.headers || ! this.headers ) {
 | |
| 			this.headers = new Headers( options.headers );
 | |
| 		}
 | |
| 		this.method = normalizeMethod( options.method || this.method || 'GET' );
 | |
| 		this.mode = options.mode || this.mode || null;
 | |
| 		this.signal = options.signal || this.signal;
 | |
| 		this.referrer = null;
 | |
| 
 | |
| 		if ( ( this.method === 'GET' || this.method === 'HEAD' ) && body ) {
 | |
| 			throw new TypeError( 'Body not allowed for GET or HEAD requests' );
 | |
| 		}
 | |
| 		this._initBody( body );
 | |
| 	}
 | |
| 
 | |
| 	Request.prototype.clone = function () {
 | |
| 		return new Request( this, { body: this._bodyInit } );
 | |
| 	};
 | |
| 
 | |
| 	function decode( body ) {
 | |
| 		var form = new FormData();
 | |
| 		body.trim()
 | |
| 			.split( '&' )
 | |
| 			.forEach( function ( bytes ) {
 | |
| 				if ( bytes ) {
 | |
| 					var split = bytes.split( '=' );
 | |
| 					var name = split.shift().replace( /\+/g, ' ' );
 | |
| 					var value = split.join( '=' ).replace( /\+/g, ' ' );
 | |
| 					form.append(
 | |
| 						decodeURIComponent( name ),
 | |
| 						decodeURIComponent( value )
 | |
| 					);
 | |
| 				}
 | |
| 			} );
 | |
| 		return form;
 | |
| 	}
 | |
| 
 | |
| 	function parseHeaders( rawHeaders ) {
 | |
| 		var headers = new Headers();
 | |
| 		// Replace instances of \r\n and \n followed by at least one space or horizontal tab with a space
 | |
| 		// https://tools.ietf.org/html/rfc7230#section-3.2
 | |
| 		var preProcessedHeaders = rawHeaders.replace( /\r?\n[\t ]+/g, ' ' );
 | |
| 		preProcessedHeaders.split( /\r?\n/ ).forEach( function ( line ) {
 | |
| 			var parts = line.split( ':' );
 | |
| 			var key = parts.shift().trim();
 | |
| 			if ( key ) {
 | |
| 				var value = parts.join( ':' ).trim();
 | |
| 				headers.append( key, value );
 | |
| 			}
 | |
| 		} );
 | |
| 		return headers;
 | |
| 	}
 | |
| 
 | |
| 	Body.call( Request.prototype );
 | |
| 
 | |
| 	function Response( bodyInit, options ) {
 | |
| 		if ( ! options ) {
 | |
| 			options = {};
 | |
| 		}
 | |
| 
 | |
| 		this.type = 'default';
 | |
| 		this.status = options.status === undefined ? 200 : options.status;
 | |
| 		this.ok = this.status >= 200 && this.status < 300;
 | |
| 		this.statusText = 'statusText' in options ? options.statusText : 'OK';
 | |
| 		this.headers = new Headers( options.headers );
 | |
| 		this.url = options.url || '';
 | |
| 		this._initBody( bodyInit );
 | |
| 	}
 | |
| 
 | |
| 	Body.call( Response.prototype );
 | |
| 
 | |
| 	Response.prototype.clone = function () {
 | |
| 		return new Response( this._bodyInit, {
 | |
| 			status: this.status,
 | |
| 			statusText: this.statusText,
 | |
| 			headers: new Headers( this.headers ),
 | |
| 			url: this.url,
 | |
| 		} );
 | |
| 	};
 | |
| 
 | |
| 	Response.error = function () {
 | |
| 		var response = new Response( null, { status: 0, statusText: '' } );
 | |
| 		response.type = 'error';
 | |
| 		return response;
 | |
| 	};
 | |
| 
 | |
| 	var redirectStatuses = [ 301, 302, 303, 307, 308 ];
 | |
| 
 | |
| 	Response.redirect = function ( url, status ) {
 | |
| 		if ( redirectStatuses.indexOf( status ) === -1 ) {
 | |
| 			throw new RangeError( 'Invalid status code' );
 | |
| 		}
 | |
| 
 | |
| 		return new Response( null, {
 | |
| 			status: status,
 | |
| 			headers: { location: url },
 | |
| 		} );
 | |
| 	};
 | |
| 
 | |
| 	exports.DOMException = self.DOMException;
 | |
| 	try {
 | |
| 		new exports.DOMException();
 | |
| 	} catch ( err ) {
 | |
| 		exports.DOMException = function ( message, name ) {
 | |
| 			this.message = message;
 | |
| 			this.name = name;
 | |
| 			var error = Error( message );
 | |
| 			this.stack = error.stack;
 | |
| 		};
 | |
| 		exports.DOMException.prototype = Object.create( Error.prototype );
 | |
| 		exports.DOMException.prototype.constructor = exports.DOMException;
 | |
| 	}
 | |
| 
 | |
| 	function fetch( input, init ) {
 | |
| 		return new Promise( function ( resolve, reject ) {
 | |
| 			var request = new Request( input, init );
 | |
| 
 | |
| 			if ( request.signal && request.signal.aborted ) {
 | |
| 				return reject(
 | |
| 					new exports.DOMException( 'Aborted', 'AbortError' )
 | |
| 				);
 | |
| 			}
 | |
| 
 | |
| 			var xhr = new XMLHttpRequest();
 | |
| 
 | |
| 			function abortXhr() {
 | |
| 				xhr.abort();
 | |
| 			}
 | |
| 
 | |
| 			xhr.onload = function () {
 | |
| 				var options = {
 | |
| 					status: xhr.status,
 | |
| 					statusText: xhr.statusText,
 | |
| 					headers: parseHeaders( xhr.getAllResponseHeaders() || '' ),
 | |
| 				};
 | |
| 				options.url =
 | |
| 					'responseURL' in xhr
 | |
| 						? xhr.responseURL
 | |
| 						: options.headers.get( 'X-Request-URL' );
 | |
| 				var body = 'response' in xhr ? xhr.response : xhr.responseText;
 | |
| 				resolve( new Response( body, options ) );
 | |
| 			};
 | |
| 
 | |
| 			xhr.onerror = function () {
 | |
| 				reject( new TypeError( 'Network request failed' ) );
 | |
| 			};
 | |
| 
 | |
| 			xhr.ontimeout = function () {
 | |
| 				reject( new TypeError( 'Network request failed' ) );
 | |
| 			};
 | |
| 
 | |
| 			xhr.onabort = function () {
 | |
| 				reject( new exports.DOMException( 'Aborted', 'AbortError' ) );
 | |
| 			};
 | |
| 
 | |
| 			xhr.open( request.method, request.url, true );
 | |
| 
 | |
| 			if ( request.credentials === 'include' ) {
 | |
| 				xhr.withCredentials = true;
 | |
| 			} else if ( request.credentials === 'omit' ) {
 | |
| 				xhr.withCredentials = false;
 | |
| 			}
 | |
| 
 | |
| 			if ( 'responseType' in xhr && support.blob ) {
 | |
| 				xhr.responseType = 'blob';
 | |
| 			}
 | |
| 
 | |
| 			request.headers.forEach( function ( value, name ) {
 | |
| 				xhr.setRequestHeader( name, value );
 | |
| 			} );
 | |
| 
 | |
| 			if ( request.signal ) {
 | |
| 				request.signal.addEventListener( 'abort', abortXhr );
 | |
| 
 | |
| 				xhr.onreadystatechange = function () {
 | |
| 					// DONE (success or failure)
 | |
| 					if ( xhr.readyState === 4 ) {
 | |
| 						request.signal.removeEventListener( 'abort', abortXhr );
 | |
| 					}
 | |
| 				};
 | |
| 			}
 | |
| 
 | |
| 			xhr.send(
 | |
| 				typeof request._bodyInit === 'undefined'
 | |
| 					? null
 | |
| 					: request._bodyInit
 | |
| 			);
 | |
| 		} );
 | |
| 	}
 | |
| 
 | |
| 	fetch.polyfill = true;
 | |
| 
 | |
| 	if ( ! self.fetch ) {
 | |
| 		self.fetch = fetch;
 | |
| 		self.Headers = Headers;
 | |
| 		self.Request = Request;
 | |
| 		self.Response = Response;
 | |
| 	}
 | |
| 
 | |
| 	exports.Headers = Headers;
 | |
| 	exports.Request = Request;
 | |
| 	exports.Response = Response;
 | |
| 	exports.fetch = fetch;
 | |
| 
 | |
| 	Object.defineProperty( exports, '__esModule', { value: true } );
 | |
| } );
 |