Source: session/message_box/QuitConfirmationMenu.js

/**
 * The class that is enabled() will be triggered when the user clicks on the Exit menu button.
 */
class QuitConfirmationMenu
{
}

/**
 * In single-player mode, replay mode and for observers in multiplayer matches that
 * aren't the host, exit the match instantly.
 */
QuitConfirmationMenu.prototype.Singleplayer = class extends QuitConfirmation
{
	enabled()
	{
		return !g_IsNetworked || (!g_IsController && g_IsObserver);
	}
};

/**
 * If the current player is the host of a networked match, have the player
 * confirm intent to end the game for the remote players as well.
 */
QuitConfirmationMenu.prototype.MultiplayerHost = class extends QuitConfirmation
{
	enabled()
	{
		return g_IsNetworked && g_IsController;
	}
};

QuitConfirmationMenu.prototype.MultiplayerHost.prototype.Caption =
	translate("Are you sure you want to quit? Leaving will disconnect all other players.");

/**
 * Active players that aren't the host will be asked if they want to resign before leaving.
 */
QuitConfirmationMenu.prototype.MultiplayerClient = class extends QuitConfirmation
{
	enabled()
	{
		return g_IsNetworked && !g_IsController && !g_IsObserver;
	}
};

QuitConfirmationMenu.prototype.MultiplayerClient.prototype.Caption =
	translate("Are you sure you want to quit?");

QuitConfirmationMenu.prototype.MultiplayerClient.prototype.Buttons =
[
	{
		"caption": translate("No")
	},
	{
		"caption": translate("Yes"),
		"onPress": 	() => {
			(new ReturnQuestion()).display();
		}
	}
];

class ReturnQuestion extends SessionMessageBox
{
}

ReturnQuestion.prototype.Title = translate("Confirmation");
ReturnQuestion.prototype.Caption = translate("Do you want to resign or will you return soon?");
ReturnQuestion.prototype.Buttons = [
	{
		"caption": translate("I will return"),
		"onPress": () => { endGame(false); }
	},
	{
		"caption": translate("I resign"),
		"onPress": () => {
			Engine.PostNetworkCommand({
				"type": "resign"
			});
		}
	}
];