🍦 Vanilla JavaScript

Projects for the Vanilla JS Academy

Day 15

Random Ron Without Duplicates

Goal

Modify the previous script to prevent repeat appearances of the same quote.

Project

View Source
(function() {
	let apiURL = "//ron-swanson-quotes.herokuapp.com/v2/quotes";
	let elError = document.querySelector( "#error-message" );
	let history = [];

	let displayError = message =>
	{
		elError.innerText = message;
		elError.classList.remove( "hidden" );
	};

	let fetchQuote = () =>
	{
		return fetch( apiURL )
			.then( response => response.json() )
			.then( json =>
			{
				if( json[0] )
				{
					elError.classList.add( "hidden" );
					return json[0];
				}

				throw new Error( "The server returned an unexpected response." );
			})
			.catch( error =>
			{
				displayError( error.message );
			});
	}

	let renderQuote = quote =>
	{
		if( quote )
		{
			document.querySelector( "blockquote" ).innerHTML = `“${quote}”`;
		}
	};

	let getQuote = () =>
	{
		fetchQuote()
			.then( quote =>
			{
				if( history.includes( quote ) )
				{
					getQuote();
				}
				else
				{
					history.splice( 50 );
					history.push( quote );
					renderQuote( quote );
				}
			})
			.catch( error => console.error( error ) );
	}

	getQuote();
	document.querySelector( "button" ).addEventListener( "click", getQuote );
})();