define( [

	"../core",

	"../var/document",

	"./var/rsingleTag",

	"../manipulation/buildFragment",



	// This is the only module that needs core/support

	"./support"

], function( jQuery, document, rsingleTag, buildFragment, support ) {



"use strict";



// Argument "data" should be string of html

// context (optional): If specified, the fragment will be created in this context,

// defaults to document

// keepScripts (optional): If true, will include scripts passed in the html string

jQuery.parseHTML = function( data, context, keepScripts ) {

	if ( typeof data !== "string" ) {

		return [];

	}

	if ( typeof context === "boolean" ) {

		keepScripts = context;

		context = false;

	}



	var base, parsed, scripts;



	if ( !context ) {



		// Stop scripts or inline event handlers from being executed immediately

		// by using document.implementation

		if ( support.createHTMLDocument ) {

			context = document.implementation.createHTMLDocument( "" );



			// Set the base href for the created document

			// so any parsed elements with URLs

			// are based on the document's URL (gh-2965)

			base = context.createElement( "base" );

			base.href = document.location.href;

			context.head.appendChild( base );

		} else {

			context = document;

		}

	}



	parsed = rsingleTag.exec( data );

	scripts = !keepScripts && [];



	// Single tag

	if ( parsed ) {

		return [ context.createElement( parsed[ 1 ] ) ];

	}



	parsed = buildFragment( [ data ], context, scripts );



	if ( scripts && scripts.length ) {

		jQuery( scripts ).remove();

	}



	return jQuery.merge( [], parsed.childNodes );

};



return jQuery.parseHTML;



} );

