From df4127f7f1fbfa10c9248e51c26131120bc61a21 Mon Sep 17 00:00:00 2001 From: Raphael Gauthier Date: Thu, 30 Nov 2023 11:01:38 +0100 Subject: [PATCH 1/2] Fixes #23790: Since the bootstrap 5 update, modals no longer open --- .../main/elm/sources/Accounts/ViewModals.elm | 20 +++----- .../main/elm/sources/Editor/ViewTechnique.elm | 2 +- .../elm/sources/NodeProperties/ViewUtils.elm | 6 +-- .../src/main/elm/sources/Rules/View.elm | 24 ++++----- .../src/main/javascript/rudder/rudder.js | 27 +++++----- .../rudder/web/comet/AsyncDeployment.scala | 34 +++++-------- .../web/components/DirectiveEditForm.scala | 12 ++--- .../components/NodeGroupCategoryForm.scala | 14 ++---- .../rudder/web/components/NodeGroupForm.scala | 8 +-- .../rudder/web/components/RuleDisplayer.scala | 4 +- .../TechniqueCategoryEditForm.scala | 22 ++++---- .../web/components/TechniqueEditForm.scala | 12 ++--- .../CreateActiveTechniqueCategoryPopup.scala | 2 +- .../popup/CreateCategoryOrGroupPopup.scala | 2 +- .../popup/CreateCloneDirectivePopup.scala | 14 ++---- .../popup/CreateCloneGroupPopup.scala | 2 +- .../CreateOrUpdateGlobalParameterPopup.scala | 14 ++---- .../components/popup/CreateRulePopup.scala | 2 +- .../popup/ExpectedPolicyPopup.scala | 1 - .../components/popup/GiveReasonPopup.scala | 2 +- .../popup/ModificationValidationPopup.scala | 4 +- .../components/popup/RuleCategoryPopup.scala | 2 +- .../RuleModificationValidationPopup.scala | 2 +- .../rudder/web/services/DisplayNode.scala | 6 +-- .../TechniqueLibraryManagement.scala | 6 +-- .../configuration/ParameterManagement.scala | 4 +- .../rudder/web/snippet/node/AcceptNode.scala | 6 +-- .../rudder/web/snippet/node/Groups.scala | 2 +- .../rudder/web/snippet/node/SearchNodes.scala | 2 +- .../src/main/style/rudder/rudder-main.css | 4 -- .../src/main/style/rudder/rudder-menu.scss | 5 +- .../style/rudder/rudder-technique-editor.css | 6 --- .../src/main/style/rudder/rudder-template.css | 24 --------- .../src/main/style/rudder/rudder.css | 11 ---- .../techniqueLibraryManagement.html | 4 +- .../parameterManagement.html | 2 +- .../webapp/secure/nodeManager/groups.html | 2 +- .../secure/nodeManager/searchNodes.html | 2 +- .../Popup/ModificationValidationPopup.html | 14 ++---- .../Popup/RuleCategoryPopup.html | 28 ++++------- .../RuleModificationValidationPopup.html | 14 ++---- .../Popup/accept_new_server.html | 10 ++-- .../Popup/createActiveTechniqueCategory.html | 16 +++--- .../Popup/createCategoryOrGroup.html | 12 ++--- .../Popup/createCloneGroupPopup.html | 12 ++--- .../templates-hidden/Popup/createRule.html | 12 ++--- .../Popup/expected_policy_popup.html | 14 ++---- .../templates-hidden/Popup/giveReason.html | 12 ++--- .../Popup/refuse_new_server.html | 10 ++-- .../templates-hidden/common-layout.html | 50 ++++++++----------- .../ComponentDirectiveEditForm.html | 8 +-- .../ComponentTechniqueEditForm.html | 31 +++++------- .../components/NodeGroupForm.html | 4 +- 53 files changed, 212 insertions(+), 353 deletions(-) diff --git a/webapp/sources/rudder/rudder-web/src/main/elm/sources/Accounts/ViewModals.elm b/webapp/sources/rudder/rudder-web/src/main/elm/sources/Accounts/ViewModals.elm index 3db083e40f9..5d2385f59a7 100644 --- a/webapp/sources/rudder/rudder-web/src/main/elm/sources/Accounts/ViewModals.elm +++ b/webapp/sources/rudder/rudder-web/src/main/elm/sources/Accounts/ViewModals.elm @@ -25,7 +25,7 @@ displayModals model = EditAccount a -> ( String.isEmpty account.name , String.isEmpty account.name , (a.name/=account.name && List.member account.name (List.map .name model.accounts)) ) _ -> ( False , False , False ) - modalClass = if model.ui.modalState == NoModal then "" else " in" + modalClass = if model.ui.modalState == NoModal then "" else " show" (modalTitle, btnTxt, btnClass) = case model.ui.modalState of NoModal -> ( "" , "Save", "default") @@ -120,14 +120,12 @@ displayModals model = ) in div [class ("modal fade " ++ modalClass)] - [ div [class "modal-backdrop fade in", onClick (ToggleEditPopup NoModal)][] + [ div [class "modal-backdrop fade show", onClick (ToggleEditPopup NoModal)][] , div [class "modal-dialog"] [ div [class "modal-content"] [ div [class "modal-header"] - [ div [class "close", attribute "data-bs-dismiss" "modal", onClick (ToggleEditPopup NoModal)] - [ span[][text (String.fromChar (Char.fromCode 215))] - ] - , h4 [class "modal-title"] [text modalTitle] + [ h5 [class "modal-title"] [text modalTitle] + , button [type_ "button", class "btn-close", attribute "data-bs-dismiss" "modal", attribute "aria-label" "Close"][] ] , div [class "modal-body"] [ popupBody @@ -152,17 +150,15 @@ displayCopy model = t = case model.ui.copyState of NoCopy -> "" Token string -> string - modalClass = if model.ui.copyState == NoCopy then "" else " in" + modalClass = if model.ui.copyState == NoCopy then "" else " show" in div [class ("modal fade" ++ modalClass)] - [ div [class "modal-backdrop fade in", onClick (CloseCopyPopup)][] + [ div [class "modal-backdrop fade show", onClick (CloseCopyPopup)][] , div [class "modal-dialog"] [ div [class "modal-content"] [ div [class "modal-header"] - [ div [class "close", attribute "data-bs-dismiss" "modal", onClick (CloseCopyPopup)] - [ span[][text (String.fromChar (Char.fromCode 215))] - ] - , h4 [class "modal-title"] [text "Copy the token"] + [ h5 [class "modal-title"] [text "Copy the token"] + , button [type_ "button", class "btn-close", attribute "data-bs-dismiss" "modal", attribute "aria-label" "Close"][] ] , div [class "modal-body"] [ div[] diff --git a/webapp/sources/rudder/rudder-web/src/main/elm/sources/Editor/ViewTechnique.elm b/webapp/sources/rudder/rudder-web/src/main/elm/sources/Editor/ViewTechnique.elm index dfd312e07c1..282d0dacb63 100755 --- a/webapp/sources/rudder/rudder-web/src/main/elm/sources/Editor/ViewTechnique.elm +++ b/webapp/sources/rudder/rudder-web/src/main/elm/sources/Editor/ViewTechnique.elm @@ -406,7 +406,7 @@ view model = div [ class "modal-dialog" ] [ div [ class "modal-content" ] [-- uib-modal-transclude=""> div [ class "modal-header ng-scope" ] [ - h3 [ class "modal-title" ] [ text "Delete Technique"] + h5 [ class "modal-title" ] [ text "Delete Technique"] ] , div [ class "modal-body" ] [ text ("Are you sure you want to Delete Technique '") diff --git a/webapp/sources/rudder/rudder-web/src/main/elm/sources/NodeProperties/ViewUtils.elm b/webapp/sources/rudder/rudder-web/src/main/elm/sources/NodeProperties/ViewUtils.elm index a01e057a7b5..49e6d03c228 100644 --- a/webapp/sources/rudder/rudder-web/src/main/elm/sources/NodeProperties/ViewUtils.elm +++ b/webapp/sources/rudder/rudder-web/src/main/elm/sources/NodeProperties/ViewUtils.elm @@ -249,12 +249,12 @@ modalDelete model = case model.ui.modalState of NoModal -> text "" Deletion name -> - div [ tabindex -1, class "modal fade in", style "z-index" "1050", style "display" "block" ] - [ div [class "modal-backdrop fade in"][] + div [ tabindex -1, class "modal fade show", style "z-index" "1050", style "display" "block" ] + [ div [class "modal-backdrop fade show", onClick (ClosePopup Ignore)][] , div [ class "modal-dialog" ] [ div [ class "modal-content" ] [ div [ class "modal-header ng-scope" ] - [ h3 [ class "modal-title" ] [ text "Delete property"] ] + [ h5 [ class "modal-title" ] [ text "Delete property"] ] , div [ class "modal-body" ] [ text ("Are you sure you want to delete property '"++ name ++"'?") ] , div [ class "modal-footer" ] diff --git a/webapp/sources/rudder/rudder-web/src/main/elm/sources/Rules/View.elm b/webapp/sources/rudder/rudder-web/src/main/elm/sources/Rules/View.elm index c893459c63d..309623f7601 100644 --- a/webapp/sources/rudder/rudder-web/src/main/elm/sources/Rules/View.elm +++ b/webapp/sources/rudder/rudder-web/src/main/elm/sources/Rules/View.elm @@ -167,12 +167,12 @@ view model = , False ) in - div [ tabindex -1, class "modal fade in", style "z-index" "1050", style "display" "block" ] - [ div [class "modal-backdrop fade in"][] + div [ tabindex -1, class "modal fade show", style "z-index" "1050", style "display" "block" ] + [ div [class "modal-backdrop fade show", onClick (ClosePopup Ignore)][] , div [ class "modal-dialog" ] [ div [ class "modal-content" ] [ div [ class "modal-header ng-scope" ] [ - h3 [ class "modal-title" ] [ text "Delete Rule"] + h5 [ class "modal-title" ] [ text "Delete Rule"] ] , div [ class "modal-body" ] [ h4 [class "text-center"][text ("Are you sure you want to Delete rule '"++ rule.name ++"'?")] @@ -203,12 +203,12 @@ view model = ) in - div [ tabindex -1, class "modal fade in", style "z-index" "1050", style "display" "block" ] - [ div [class "modal-backdrop fade in"][] + div [ tabindex -1, class "modal fade show", style "z-index" "1050", style "display" "block" ] + [ div [class "modal-backdrop fade show", onClick (ClosePopup Ignore)][] , div [ class "modal-dialog" ] [ div [ class "modal-content" ] [ div [ class "modal-header ng-scope" ] [ - h3 [ class "modal-title" ] [ text (txtDisable ++" Rule")] + h5[ class "modal-title" ] [ text (txtDisable ++" Rule")] ] , div [ class "modal-body" ] [ h4 [class "text-center"][text ("Are you sure you want to "++ String.toLower txtDisable ++" rule '"++ rule.name ++"'?")] @@ -228,12 +228,12 @@ view model = ] ] DeletionValidationCat category -> - div [ tabindex -1, class "modal fade in", style "z-index" "1050", style "display" "block" ] - [ div [class "modal-backdrop fade in"][] + div [ tabindex -1, class "modal fade show", style "z-index" "1050", style "display" "block" ] + [ div [class "modal-backdrop fade show", onClick (ClosePopup Ignore)][] , div [ class "modal-dialog" ] [ div [ class "modal-content" ] [ div [ class "modal-header ng-scope" ] [ - h3 [ class "modal-title" ] [ text "Delete category"] + h5 [ class "modal-title" ] [ text "Delete category"] ] , div [ class "modal-body" ] [ h4 [class "text-center"][text ("Are you sure you want to delete category '"++ category.name ++"'?")] @@ -253,12 +253,12 @@ view model = let action = if creation then "Create" else "Update" in - div [ tabindex -1, class "modal fade in", style "z-index" "1050", style "display" "block" ] - [ div [class "modal-backdrop fade in"][] + div [ tabindex -1, class "modal fade show", style "z-index" "1050", style "display" "block" ] + [ div [class "modal-backdrop fade show", onClick (ClosePopup Ignore)][] , div [ class "modal-dialog" ] [ div [ class "modal-content" ] [ div [ class "modal-header ng-scope" ] - [ h3 [ class "modal-title" ] [ text (action ++" Rule")] + [ h5 [ class "modal-title" ] [ text (action ++" Rule")] ] , div [ class "modal-body" ] [ h4 [class "text-center"] diff --git a/webapp/sources/rudder/rudder-web/src/main/javascript/rudder/rudder.js b/webapp/sources/rudder/rudder-web/src/main/javascript/rudder/rudder.js index 828f397a045..18abf01250c 100644 --- a/webapp/sources/rudder/rudder-web/src/main/javascript/rudder/rudder.js +++ b/webapp/sources/rudder/rudder-web/src/main/javascript/rudder/rudder.js @@ -60,11 +60,7 @@ function escapeHTML (string) { } function callPopupWithTimeout(timeout, popupName){ - setTimeout("createPopup('"+popupName+"')", timeout); -} - -function createPopup(popupName){ - $('#'+popupName).bsModal('show'); + setTimeout("initBsModal('"+popupName+"')", timeout); } function reverseErrorDetails(){ @@ -146,14 +142,6 @@ function jqCheckAll( id, name ) }); }); - // Logout - $(function() { - $('#logout').click(function() { - $('#ModalLogOut').bsModal('show'); - return false; - }); - }); - function processKey(e , buttonId){ if (null == e) e = window.event ; @@ -853,7 +841,18 @@ function initBsTooltips(){ function removeBsTooltips(){ document.querySelectorAll(".tooltip").forEach(e => e.remove()); } -//tooltip.hide() +function initBsModal(modalName){ + var selector = document.querySelector('#' + modalName); + var modal = bootstrap.Modal.getInstance(selector); + var instance = (modal === null || modal === undefined) ? new bootstrap.Modal('#'+modalName) : modal; + instance.show(); +} +function hideBsModal(modalName){ + var selector = document.querySelector('#' + modalName); + var modal = bootstrap.Modal.getInstance(selector); + if(modal === null || modal === undefined) return false; + modal.hide(); +} function initBsTabs(){ var triggerTabList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tab"]')); triggerTabList.forEach(function (triggerEl) { diff --git a/webapp/sources/rudder/rudder-web/src/main/scala/com/normation/rudder/web/comet/AsyncDeployment.scala b/webapp/sources/rudder/rudder-web/src/main/scala/com/normation/rudder/web/comet/AsyncDeployment.scala index c242084877d..68dcd47357c 100644 --- a/webapp/sources/rudder/rudder-web/src/main/scala/com/normation/rudder/web/comet/AsyncDeployment.scala +++ b/webapp/sources/rudder/rudder-web/src/main/scala/com/normation/rudder/web/comet/AsyncDeployment.scala @@ -166,7 +166,7 @@ class AsyncDeployment extends CometActor with CometListener with Loggable { } } - val callback = JsRaw("$('#errorDetailsDialog').bsModal('show');") & SetHtml("errorDetailsMessage", popupContent) + val callback = JsRaw("initBsModal('errorDetailsDialog');") & SetHtml("errorDetailsMessage", popupContent) commonStatement( start, @@ -185,7 +185,7 @@ class AsyncDeployment extends CometActor with CometListener with Loggable { } private[this] def closePopup(): JsCmd = { - JsRaw("""$('#generatePoliciesDialog').hide();""") + JsRaw("""hideBsModal('generatePoliciesDialog')""") } private[this] def fullPolicyGeneration: NodeSeq = { @@ -207,7 +207,7 @@ class AsyncDeployment extends CometActor with CometListener with Loggable { } private[this] def showGeneratePoliciesPopup: NodeSeq = { - val callback = JsRaw("$('#generatePoliciesDialog').bsModal('show');") + val callback = JsRaw("initBsModal('generatePoliciesDialog')") { SHtml.a( Text("Regenerate all policies"), @@ -239,16 +239,12 @@ class AsyncDeployment extends CometActor with CometListener with Loggable { } private[this] def errorPopup = { - + diff --git a/webapp/sources/rudder/rudder-web/src/main/webapp/templates-hidden/Popup/expected_policy_popup.html b/webapp/sources/rudder/rudder-web/src/main/webapp/templates-hidden/Popup/expected_policy_popup.html index 5459a33de1d..0df2dd6b5ac 100644 --- a/webapp/sources/rudder/rudder-web/src/main/webapp/templates-hidden/Popup/expected_policy_popup.html +++ b/webapp/sources/rudder/rudder-web/src/main/webapp/templates-hidden/Popup/expected_policy_popup.html @@ -6,16 +6,12 @@ --> - + diff --git a/webapp/sources/rudder/rudder-web/src/main/webapp/templates-hidden/Popup/refuse_new_server.html b/webapp/sources/rudder/rudder-web/src/main/webapp/templates-hidden/Popup/refuse_new_server.html index 34de7af305b..36570eb3514 100644 --- a/webapp/sources/rudder/rudder-web/src/main/webapp/templates-hidden/Popup/refuse_new_server.html +++ b/webapp/sources/rudder/rudder-web/src/main/webapp/templates-hidden/Popup/refuse_new_server.html @@ -6,16 +6,12 @@ --> -