From 3e2e4dff5c67a848e2a4219707657130c4eae584 Mon Sep 17 00:00:00 2001 From: Jens Maus Date: Sat, 17 Oct 2026 07:11:11 +0000 Subject: [PATCH] webui: name the object in the delete confirmation dialogs This applies OpenCCU rootfs patch 0156-WebUI-ImprovedConfirmDeletePopup.patch including the fix of OpenCCU/OpenCCU#4458: - The delete confirmation dialogs of system variables, users, favorites and direct links name the object to be deleted ('%s' in the translations). - The names are encoded for the JavaScript string in ReGa (\xNN for backslash, quotes, angle brackets and ampersand) and HTML-escaped before they are inserted into the dialog text. --- src/webui/rega/www/pages/tabs/admin/systemvars.htm | 8 +++++--- .../rega/www/pages/tabs/admin/userAdministration.htm | 8 +++++--- src/webui/rega/www/pages/tabs/user/favOverview.htm | 8 +++++--- .../www/webui/js/lang/de/translate.lang.extension.js | 2 +- src/webui/www/webui/js/lang/de/translate.lang.js | 8 ++++---- .../www/webui/js/lang/en/translate.lang.extension.js | 2 +- src/webui/www/webui/js/lang/en/translate.lang.js | 8 ++++---- src/webui/www_source/config/js/ic_common.js | 2 +- 8 files changed, 26 insertions(+), 20 deletions(-) diff --git a/src/webui/rega/www/pages/tabs/admin/systemvars.htm b/src/webui/rega/www/pages/tabs/admin/systemvars.htm index 80f39aed..2755649a 100644 --- a/src/webui/rega/www/pages/tabs/admin/systemvars.htm +++ b/src/webui/rega/www/pages/tabs/admin/systemvars.htm @@ -264,7 +264,8 @@ Write(""); Write("") Write("") @@ -186,10 +187,11 @@ CreatePopup(ID_USER_ACCOUNT_CONFIG_ADMIN, id); } - deleteUser = function(id) + deleteUser = function(id,name) { var _id_ = id; - new YesNoDialog(translateKey("dialogSafetyCheck"), translateKey("dialogQuestionRemoveUser"), function(result) { + var _name_ = String(name).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"').replace(/'/g, '''); + new YesNoDialog(translateKey("dialogSafetyCheck"), translateKey("dialogQuestionRemoveUser").replace(/%s/, function() { return _name_; }), function(result) { if (result == YesNoDialog.RESULT_YES) { var url = "/esp/system.htm?sid=" + SessionId; diff --git a/src/webui/rega/www/pages/tabs/user/favOverview.htm b/src/webui/rega/www/pages/tabs/user/favOverview.htm index ee3955f3..5ac659ae 100644 --- a/src/webui/rega/www/pages/tabs/user/favOverview.htm +++ b/src/webui/rega/www/pages/tabs/user/favOverview.htm @@ -257,7 +257,8 @@ Write('
Bearbeiten...
'); } if ((bDelAllowed) && (!oFav.Unerasable())) { - Write('
${btnRemove}
'); + string sDelName = oFav.Name().Replace("\\", "\\x5C").Replace("'", "\\x27").Replace("\"", "\\x22").Replace("<", "\\x3C").Replace(">", "\\x3E").Replace("&", "\\x26"); + Write('
${btnRemove}
'); } else { Write('
${btnRemove}
'); @@ -416,10 +417,11 @@ updateContent("/pages/tabs/user/newFav.htm"); } - DeleteFavorite = function(id) + DeleteFavorite = function(id,name) { var _id_ = id; - new YesNoDialog(translateKey("dialogSafetyCheck"), translateKey("dialogQuestionRemoveFavorite"), function(result) { + var _name_ = String(name).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"').replace(/'/g, '''); + new YesNoDialog(translateKey("dialogSafetyCheck"), translateKey("dialogQuestionRemoveFavorite").replace(/%s/, function() { return _name_; }), function(result) { if (result == YesNoDialog.RESULT_YES) { iseFavorites.RemoveList(_id_); } }); }; diff --git a/src/webui/www/webui/js/lang/de/translate.lang.extension.js b/src/webui/www/webui/js/lang/de/translate.lang.extension.js index 5a17d9f2..d225d0fa 100644 --- a/src/webui/www/webui/js/lang/de/translate.lang.extension.js +++ b/src/webui/www/webui/js/lang/de/translate.lang.extension.js @@ -700,7 +700,7 @@ jQuery.extend(true,langJSON, { "channelModeHumidityLimiter" : "Feuchtigkeitsbegrenzer", "channelModeTactileSwitch" : "Taster", "channelModeTemperatureLimiter" : "Temperaturbegrenzer", - "dialogQuestionRemoveInternalLink" : "ACHTUNG:

Es handelt sich hier um eine interne Verkn%FCpfung des Ger%E4tes. Das L%F6schen dieser Verkn%FCpfung kann dazu f%FChren, dass das Ger%E4t unbedienbar wird. In diesem Fall m%FCssen Sie die Verkn%FCpfung neu erstellen.

M%F6chten Sie die Verkn%FCpfung wirklich l%F6schen?", + "dialogQuestionRemoveInternalLink" : "ACHTUNG:

Es handelt sich hier um eine interne Verkn%FCpfung des Ger%E4tes. Das L%F6schen dieser Verkn%FCpfung kann dazu f%FChren, dass das Ger%E4t unbedienbar wird. In diesem Fall m%FCssen Sie die Verkn%FCpfung neu erstellen.

M%F6chten Sie die Verkn%FCpfung '%s' wirklich l%F6schen?", "descriptionTransmitterDataTransmissionCondition0" : "Modus 1

Senden auf Pegel%E4nderung am Daten%FCbertragungspin (DU30) von HIGH- auf LOW-Pegel.", "descriptionTransmitterDataTransmissionCondition1" : "Modus 2

Senden auf Pegel%E4nderung am Daten%FCbertragungspin (DU30) von LOW- auf HIGH-Pegel.", "descriptionTransmitterDataTransmissionCondition2" : "Modus 3

Senden auf Pegel%E4nderung am Daten%FCbertragungspin (DU30) auf jede Logikpegel%E4nderung.", diff --git a/src/webui/www/webui/js/lang/de/translate.lang.js b/src/webui/www/webui/js/lang/de/translate.lang.js index 81d5175a..8d8e88b3 100644 --- a/src/webui/www/webui/js/lang/de/translate.lang.js +++ b/src/webui/www/webui/js/lang/de/translate.lang.js @@ -404,10 +404,10 @@ jQuery.extend(true,langJSON, { "dialogInfo" : "Info", "dialogHint" : "Hinweis", "dialogQuestionRemoveProgram" : "M%F6chten Sie das Programm '%s' wirklich l%F6schen?", - "dialogQuestionRemoveLink" : "M%F6chten Sie die Verkn%FCpfung wirklich l%F6schen?", - "dialogQuestionRemoveUser" : "M%F6chten Sie den Benutzer wirklich l%F6schen?", - "dialogQuestionRemoveSysVar" : "M%F6chten Sie die Systemvariable wirklich l%F6schen?", - "dialogQuestionRemoveFavorite" : "M%F6chten Sie den Favoriten wirklich l%F6schen?", + "dialogQuestionRemoveLink" : "M%F6chten Sie die Verkn%FCpfung '%s' wirklich l%F6schen?", + "dialogQuestionRemoveUser" : "M%F6chten Sie den Benutzer '%s' wirklich l%F6schen?", + "dialogQuestionRemoveSysVar" : "M%F6chten Sie die Systemvariable '%s' wirklich l%F6schen?", + "dialogQuestionRemoveFavorite" : "M%F6chten Sie den Favoriten '%s' wirklich l%F6schen?", "dialogQuestionRemoveCFG" : "M%F6chten Sie den " + HMIdentifier.de.HomeMaticCFGAdapter + " wirklich l%F6schen?", "dialogQuestionRemoveExtraSoftware" : "Wollen Sie die Zusatzsoftware wirklich entfernen?", "dialogQuestionRestart" : "Best%E4tigen Sie hier, um den Neustart durchzuf%FChren.", diff --git a/src/webui/www/webui/js/lang/en/translate.lang.extension.js b/src/webui/www/webui/js/lang/en/translate.lang.extension.js index 80c7f6b0..efe325fd 100644 --- a/src/webui/www/webui/js/lang/en/translate.lang.extension.js +++ b/src/webui/www/webui/js/lang/en/translate.lang.extension.js @@ -700,7 +700,7 @@ jQuery.extend(true, langJSON, { "channelModeHumidityLimiter" : "Humidity limiter", "channelModeTactileSwitch" : "Push-button", "channelModeTemperatureLimiter" : "Temperature limiter", - "dialogQuestionRemoveInternalLink" : "PLEASE NOTE:

This is an internal connection of the device. It may occur that the device cannot be operated any more if you delete this connection. In this case, you have to create the connection again.

Do you really want to delete the connection?", + "dialogQuestionRemoveInternalLink" : "PLEASE NOTE:

This is an internal connection of the device. It may occur that the device cannot be operated any more if you delete this connection. In this case, you have to create the connection again.

Do you really want to delete the connection '%s'?", "descriptionTransmitterDataTransmissionCondition0" : "Mode 1

Transmit on level change of data transmission pin (DU30) from HIGH to LOW level.", "descriptionTransmitterDataTransmissionCondition1" : "Mode 2

Transmit on level change of data transmission pin (DU30) from LOW to HIGH level.", "descriptionTransmitterDataTransmissionCondition2" : "Mode 3

Transmit on level change of data transmission pin (DU30) on every logic level change.", diff --git a/src/webui/www/webui/js/lang/en/translate.lang.js b/src/webui/www/webui/js/lang/en/translate.lang.js index 268d6dac..a917b894 100644 --- a/src/webui/www/webui/js/lang/en/translate.lang.js +++ b/src/webui/www/webui/js/lang/en/translate.lang.js @@ -403,10 +403,10 @@ jQuery.extend(true,langJSON, { "dialogInfo" : "Info", "dialogHint" : "Please note", "dialogQuestionRemoveProgram" : "Do you really want to delete the program '%s'?", - "dialogQuestionRemoveLink" : "Do you really want to delete the connection?", - "dialogQuestionRemoveUser" : "Do you really want to delete the user?", - "dialogQuestionRemoveSysVar" : "Do you really want to delete the system variable?", - "dialogQuestionRemoveFavorite" : "Do you really want to delete the favourite?", + "dialogQuestionRemoveLink" : "Do you really want to delete the connection '%s'?", + "dialogQuestionRemoveUser" : "Do you really want to delete the user '%s'?", + "dialogQuestionRemoveSysVar" : "Do you really want to delete the system variable '%s'?", + "dialogQuestionRemoveFavorite" : "Do you really want to delete the favourite '%s'?", "dialogQuestionRemoveCFG" : "Do you really want to delete the " + HMIdentifier.en.HomeMaticCFGAdapter + "?", "dialogQuestionRemoveExtraSoftware" : "Do you really want to delete the additional software?", "dialogQuestionRestart" : "Please click here to perform the restart?", diff --git a/src/webui/www_source/config/js/ic_common.js b/src/webui/www_source/config/js/ic_common.js index aeb990e8..a1f1088c 100644 --- a/src/webui/www_source/config/js/ic_common.js +++ b/src/webui/www_source/config/js/ic_common.js @@ -738,7 +738,7 @@ RemoveLink = function(iface, sender_address, receiver_address, sender_type, redi { var questionRemoveLink = ((iface == "HmIP-RF") && (sender_type != "HmIP-SMI55") && (sender_type != "HmIP-SMI55-A") && (sender_address.split(":")[0] == receiver_address.split(":")[0])) ? translateKey('dialogQuestionRemoveInternalLink') : translateKey('dialogQuestionRemoveLink'); - new YesNoDialog(translateKey('dialogSafetyCheck'), questionRemoveLink, function(result) { + new YesNoDialog(translateKey('dialogSafetyCheck'), questionRemoveLink.replace('%s', sender_address+' - '+receiver_address), function(result) { if (result == YesNoDialog.RESULT_YES) { ResetPostString();
"); string sClassName = "StdButton"; - string sOnclick = "DeleteSysVar("#sv.ID()#");"; + string sDelName = sv.Name().Replace("\\", "\\x5C").Replace("'", "\\x27").Replace("\"", "\\x22").Replace("<", "\\x3C").Replace(">", "\\x3E").Replace("&", "\\x26"); + string sOnclick = "DeleteSysVar("#sv.ID()#",\""#sDelName#"\");"; if( sv.Unerasable() ) { sClassName = sClassName#"Inactive"; @@ -458,10 +459,11 @@ } } - DeleteSysVar = function(id) + DeleteSysVar = function(id,name) { var _id_ = id; - new YesNoDialog(translateKey("dialogSafetyCheck"), translateKey("dialogQuestionRemoveSysVar"), function(result) { + var _name_ = String(name).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"').replace(/'/g, '''); + new YesNoDialog(translateKey("dialogSafetyCheck"), translateKey("dialogQuestionRemoveSysVar").replace(/%s/, function() { return _name_; }), function(result) { if (result == YesNoDialog.RESULT_YES) { DeleteObject(_id_); } }); }; diff --git a/src/webui/rega/www/pages/tabs/admin/userAdministration.htm b/src/webui/rega/www/pages/tabs/admin/userAdministration.htm index 054b341b..1a168e02 100644 --- a/src/webui/rega/www/pages/tabs/admin/userAdministration.htm +++ b/src/webui/rega/www/pages/tabs/admin/userAdministration.htm @@ -145,7 +145,8 @@ Write("") Write("
${btnEdit}
") if (system.GetSessionVar('sessionUserID') != user.ID()) { - Write("
${btnRemove}
") + string sDelName = user.Name().Replace("\\", "\\x5C").Replace("'", "\\x27").Replace("\"", "\\x22").Replace("<", "\\x3C").Replace(">", "\\x3E").Replace("&", "\\x26"); + Write("
${btnRemove}
") } Write("