[{"data":1,"prerenderedAt":469},["ShallowReactive",2],{"\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Fcomposants-ui\u002Fmodales-et-boutons":3,"section:\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Fcomposants-ui\u002Fmodales-et-boutons":468},{"id":4,"title":5,"body":6,"description":453,"extension":454,"meta":455,"navigation":457,"path":464,"seo":465,"stem":466,"__hash__":467},"docs\u002F2.next\u002F3.dodock\u002F10.developpeurs\u002F03.composants-ui\u002Fmodales-et-boutons.md","Modales et boutons dans Dokos",{"type":7,"value":8,"toc":448},"minimark",[9,13,17,67,72,78,134,137,140,144,297,311,315,410,419,429,444],[10,11,5],"h1",{"id":12},"modales-et-boutons-dans-dokos",[14,15,16],"p",{},"Une modale de confirmation demande à l'utilisateur de valider une action avant son exécution. Dodock propose deux fonctions. Leur différence est la couleur du bouton principal.",[18,19,20,36],"table",{},[21,22,23],"thead",{},[24,25,26,30,33],"tr",{},[27,28,29],"th",{},"Fonction",[27,31,32],{},"Bouton principal",[27,34,35],{},"Usage",[37,38,39,54],"tbody",{},[24,40,41,48,51],{},[42,43,44],"td",{},[45,46,47],"code",{},"frappe.confirm",[42,49,50],{},"Neutre (« Oui »)",[42,52,53],{},"Action réversible ou sans risque.",[24,55,56,61,64],{},[42,57,58],{},[45,59,60],{},"frappe.warn",[42,62,63],{},"Rouge",[42,65,66],{},"Action destructive : suppression, annulation.",[68,69,71],"h2",{"id":70},"ce-que-voit-lutilisateur","Ce que voit l'utilisateur",[14,73,74,75,77],{},"Les actions destructives standard ouvrent une modale ",[45,76,60],{}," :",[18,79,80,99],{},[21,81,82],{},[24,83,84,87,90,93,96],{},[27,85,86],{},"Action",[27,88,89],{},"Titre",[27,91,92],{},"Message",[27,94,95],{},"Bouton rouge",[27,97,98],{},"Bouton secondaire",[37,100,101,118],{},[24,102,103,106,109,112,115],{},[42,104,105],{},"Supprimer un document",[42,107,108],{},"« Confirmation »",[42,110,111],{},"« Validez-vous la suppression du document {0} ? »",[42,113,114],{},"« Supprimer »",[42,116,117],{},"« Annuler »",[24,119,120,123,125,128,131],{},[42,121,122],{},"Annuler un document validé",[42,124,108],{},[42,126,127],{},"« Validez-vous l'annulation du document {0} ? »",[42,129,130],{},"« Oui »",[42,132,133],{},"« Non »",[14,135,136],{},"Pour l'annulation, le bouton secondaire est « Non ». Un bouton « Annuler » serait ambigu quand l'action est elle-même une annulation.",[14,138,139],{},"La touche Entrée valide le bouton principal. Échap ou la croix ferme la modale sans exécuter l'action.",[68,141,143],{"id":142},"demander-une-confirmation-dans-un-script","Demander une confirmation dans un script",[145,146,151],"pre",{"className":147,"code":148,"language":149,"meta":150,"style":150},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","frappe.confirm(\n    __(\"Recalculer les prix de toutes les lignes ?\"),\n    () => frm.call(\"recalculer_prix\"),   \u002F\u002F Oui\n    () => frappe.ui.toast({ message: __(\"Prix inchangés\") })  \u002F\u002F Non ou fermeture\n);\n","js","",[45,152,153,173,197,233,289],{"__ignoreMap":150},[154,155,158,162,166,170],"span",{"class":156,"line":157},"line",1,[154,159,161],{"class":160},"sTEyZ","frappe",[154,163,165],{"class":164},"sMK4o",".",[154,167,169],{"class":168},"s2Zo4","confirm",[154,171,172],{"class":160},"(\n",[154,174,176,179,182,185,189,191,194],{"class":156,"line":175},2,[154,177,178],{"class":168},"    __",[154,180,181],{"class":160},"(",[154,183,184],{"class":164},"\"",[154,186,188],{"class":187},"sfazB","Recalculer les prix de toutes les lignes ?",[154,190,184],{"class":164},[154,192,193],{"class":160},")",[154,195,196],{"class":164},",\n",[154,198,200,203,207,210,212,215,217,219,222,224,226,229],{"class":156,"line":199},3,[154,201,202],{"class":164},"    ()",[154,204,206],{"class":205},"spNyl"," =>",[154,208,209],{"class":160}," frm",[154,211,165],{"class":164},[154,213,214],{"class":168},"call",[154,216,181],{"class":160},[154,218,184],{"class":164},[154,220,221],{"class":187},"recalculer_prix",[154,223,184],{"class":164},[154,225,193],{"class":160},[154,227,228],{"class":164},",",[154,230,232],{"class":231},"sHwdD","   \u002F\u002F Oui\n",[154,234,236,238,240,243,245,248,250,253,255,258,262,265,268,270,272,275,277,280,283,286],{"class":156,"line":235},4,[154,237,202],{"class":164},[154,239,206],{"class":205},[154,241,242],{"class":160}," frappe",[154,244,165],{"class":164},[154,246,247],{"class":160},"ui",[154,249,165],{"class":164},[154,251,252],{"class":168},"toast",[154,254,181],{"class":160},[154,256,257],{"class":164},"{",[154,259,261],{"class":260},"swJcz"," message",[154,263,264],{"class":164},":",[154,266,267],{"class":168}," __",[154,269,181],{"class":160},[154,271,184],{"class":164},[154,273,274],{"class":187},"Prix inchangés",[154,276,184],{"class":164},[154,278,279],{"class":160},") ",[154,281,282],{"class":164},"}",[154,284,285],{"class":160},")  ",[154,287,288],{"class":231},"\u002F\u002F Non ou fermeture\n",[154,290,292,294],{"class":156,"line":291},5,[154,293,193],{"class":160},[154,295,296],{"class":164},";\n",[14,298,299,300,303,304,307,308,165],{},"Signature : ",[45,301,302],{},"frappe.confirm(message, confirm_action, reject_action, primary_label, secondary_label, opts)",". ",[45,305,306],{},"opts"," est passé à ",[45,309,310],{},"frappe.ui.Dialog",[68,312,314],{"id":313},"avertir-avant-une-action-destructive","Avertir avant une action destructive",[145,316,318],{"className":147,"code":317,"language":149,"meta":150,"style":150},"frappe.warn(\n    __(\"Confirmation\"),\n    __(\"Supprimer les {0} lignes sélectionnées ?\", [selected.length]),\n    () => supprimer_lignes(selected),\n    __(\"Supprimer\")\n);\n",[45,319,320,331,348,373,387,403],{"__ignoreMap":150},[154,321,322,324,326,329],{"class":156,"line":157},[154,323,161],{"class":160},[154,325,165],{"class":164},[154,327,328],{"class":168},"warn",[154,330,172],{"class":160},[154,332,333,335,337,339,342,344,346],{"class":156,"line":175},[154,334,178],{"class":168},[154,336,181],{"class":160},[154,338,184],{"class":164},[154,340,341],{"class":187},"Confirmation",[154,343,184],{"class":164},[154,345,193],{"class":160},[154,347,196],{"class":164},[154,349,350,352,354,356,359,361,363,366,368,371],{"class":156,"line":199},[154,351,178],{"class":168},[154,353,181],{"class":160},[154,355,184],{"class":164},[154,357,358],{"class":187},"Supprimer les {0} lignes sélectionnées ?",[154,360,184],{"class":164},[154,362,228],{"class":164},[154,364,365],{"class":160}," [selected",[154,367,165],{"class":164},[154,369,370],{"class":160},"length])",[154,372,196],{"class":164},[154,374,375,377,379,382,385],{"class":156,"line":235},[154,376,202],{"class":164},[154,378,206],{"class":205},[154,380,381],{"class":168}," supprimer_lignes",[154,383,384],{"class":160},"(selected)",[154,386,196],{"class":164},[154,388,389,391,393,395,398,400],{"class":156,"line":291},[154,390,178],{"class":168},[154,392,181],{"class":160},[154,394,184],{"class":164},[154,396,397],{"class":187},"Supprimer",[154,399,184],{"class":164},[154,401,402],{"class":160},")\n",[154,404,406,408],{"class":156,"line":405},6,[154,407,193],{"class":160},[154,409,296],{"class":164},[14,411,299,412,415,416,418],{},[45,413,414],{},"frappe.warn(title, message_html, proceed_action, primary_label, is_minimizable, secondary_label)",". Le bouton secondaire vaut « Annuler » par défaut. Les deux fonctions renvoient la modale (",[45,417,310],{},").",[14,420,421,422,424,425,428],{},"Exemple fictif : ",[45,423,221],{}," et ",[45,426,427],{},"supprimer_lignes"," sont des méthodes de votre application.",[430,431,434],"callout",{"color":432,"icon":433},"info","i-lucide-info",[14,435,436,439,440,443],{},[45,437,438],{},"message_html"," est inséré comme HTML. Échappez toute valeur saisie par un utilisateur avec ",[45,441,442],{},"frappe.utils.escape_html"," avant de l'insérer.",[445,446,447],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":150,"searchDepth":157,"depth":175,"links":449},[450,451,452],{"id":70,"depth":175,"text":71},{"id":142,"depth":175,"text":143},{"id":313,"depth":175,"text":314},"Choisir entre frappe.confirm et frappe.warn pour demander une confirmation, et comprendre le bouton rouge des actions destructives comme Supprimer et Annuler.","md",{"icon":456,"reviewed":457,"last_verified":458,"sources":459},"i-mdi-window-maximize",true,"2026-11-03",[460,461,462,463],"dodock@develop:frappe\u002Fpublic\u002Fjs\u002Ffrappe\u002Fui\u002Fmessages.js","dodock@develop:frappe\u002Fpublic\u002Fjs\u002Ffrappe\u002Fmodel\u002Fmodel.js","dodock@develop:frappe\u002Fpublic\u002Fjs\u002Ffrappe\u002Fform\u002Fform.js","dodock@develop:frappe\u002Flocale\u002Ffr.po","\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Fcomposants-ui\u002Fmodales-et-boutons",{"title":5,"description":453},"2.next\u002F3.dodock\u002F10.developpeurs\u002F03.composants-ui\u002Fmodales-et-boutons","DqZ0f61Im_5PfkR0D7ylVth1HN1iRy7kfV6CPqAQqYE",{},1793871740055]