Source: session/TimeNotificationOverlay.js

/**
 * The objective of this class is to displays all active counters (messages showing the remaining time)
 * for wonder-victory, ceasefire etc.
 */
class TimeNotificationOverlay
{
	constructor(playerViewControl)
	{
		this.notificationText = Engine.GetGUIObjectByName("notificationText");
		
		registerSimulationUpdateHandler(this.rebuild.bind(this));
		playerViewControl.registerViewedPlayerChangeHandler(this.rebuild.bind(this));
	}

	rebuild()
	{
		let notifications = Engine.GuiInterfaceCall("GetTimeNotifications", g_ViewedPlayer);

		let notificationText = "";
		for (let notification of notifications)
		{
			let message = notification.message;
			if (notification.translateMessage)
				message = translate(message);

			let parameters = notification.parameters || {};
			if (notification.translateParameters)
				translateObjectKeys(parameters, notification.translateParameters);

			parameters.time = timeToString(notification.endTime - g_SimState.timeElapsed);

			colorizePlayernameParameters(parameters);

			notificationText += sprintf(message, parameters) + "\n";
		}

		this.notificationText.caption = notificationText;
	}
}