0ad/binaries/data/mods/mod/gui/timedconfirmation/timedconfirmation.js
phosit 6ffc251114
Some checks are pending
checkrefs / lfscheck (push) Waiting to run
checkrefs / checkrefs (push) Waiting to run
lint / cppcheck (push) Waiting to run
lint / copyright (push) Waiting to run
lint / jenkinsfiles (push) Waiting to run
pre-commit / pre-commit (push) Waiting to run
Make timedconfirmation.js a module
Refs: #8081
2026-08-14 12:41:45 +02:00

75 lines
2.2 KiB
JavaScript

/**
* @class TimedConfirmation
* This class displays confirmation box, which will be closed after defined time in miliseconds.
*/
class TimedConfirmation
{
messageObject = Engine.GetGUIObjectByName("tmcText");
panel = Engine.GetGUIObjectByName("tmcMain");
constructor()
{
this.panel.onTick = this.onTick.bind(this);
}
/**
* @param {Object} data
* @param {Number} data.width - The width of the confirmation box
* @param {Number} data.height - The height of the confirmation box
* @param {String} data.message - The message to be displayed with parameter for time which will be displayed in seconds
* @param {String} data.timeParameter - The string used in 'message' for time, e.g 'time' with %(time)s in message
* @param {Number} data.timeout - The time in miliseconds after which confirmation box closes itself
* @param {String} data.title - The string displayed in header
* @param {String|undefined} data.buttonCaptions - The captions used for buttons (if not defined, defaults to 'OK')
* @param {String|undefined} data.font - The used font
*/
setup(data)
{
Engine.GetGUIObjectByName("tmcTitleBar").caption = data.title;
this.timeout = +data.timeout + Date.now();
this.message = data.message;
this.timeParameter = data.timeParameter;
if (data.font)
this.messageObject.font = data.font;
this.updateDisplayedTimer(data.timeout);
const cancelHotkey = Engine.GetGUIObjectByName("tmcCancelHotkey");
const lRDiff = data.width / 2;
const uDDiff = data.height / 2;
this.panel.size = "50%-" + lRDiff + " 50%-" + uDDiff + " 50%+" + lRDiff + " 50%+" + uDDiff;
const captions = data.buttonCaptions || [translate("OK")];
const button = [];
const closePromise =
setButtonCaptionsAndVisibility(button, captions, cancelHotkey, "tmcButton");
distributeButtonsHorizontally(button, captions);
return closePromise;
}
onTick()
{
const remaining = this.timeout - Date.now();
if (remaining < 1)
Engine.GetGUIObjectByName("tmcButton1").onPress();
this.updateDisplayedTimer(remaining);
}
updateDisplayedTimer(time)
{
this.messageObject.caption = sprintf(
this.message,
{ [this.timeParameter]: Math.ceil(time / 1000) }
);
}
}
export function init(data)
{
return new TimedConfirmation().setup(data);
}