1/* *************************************************** 2 3 utilise un ASHX pour gérer les échanges le but 4 étant de ne pas afficher les accès dans la page 5 6******************************************************* */ 7 8const conceptorToastrOptions = { 9 "closeButton": false, 10 "debug": false, 11 "newestOnTop": false, 12 "progressBar": false, 13 "positionClass": "toast-top-right", 14 "preventDuplicates": true, 15 "onclick": null, 16 "showDuration": "500", 17 "hideDuration": "500", 18 "timeOut": "3000", 19 "extendedTimeOut": "3000", 20 "showEasing": "swing", 21 "hideEasing": "linear", 22 "showMethod": "slideDown", 23 "hideMethod": "slideUp", 24}; 25 26/* **************************************************** 27 28 Ouvre le concepteur à partie de la pageNode 29 30******************************************************* */ 31function OpenConceptorFromPageNode(idparentnode, idnode, incrementVersion) { 32 33 34 try { 35 // On appelle l'ASHX du concepteur qui fera les appels API ! 36 // On veut une url de redirection SSO pour atteindre la popup du concepteur 37 // On veut que notre fiche CMS soit liée via un GUID à la fiche NEOS 38 // On veut que notre fiche soit lock ! 39 $.ajax({
40 url: conceptorHandlerPath, 41 type: 'POST', 42 async: true, 43 datatype: "json", 44 data: { 45 "method": "GetNeosRedirectUrl", 46 "idnode": idnode, 47 "incrementVersion": incrementVersion 48 }, 49 beforeSend: function () { 50 parent.$.LoadingOverlay("show"); 51 }, 52 success: function (data) { 53 54 if (data.errorMessage != null && data.errorMessage != '') 55 bootbox.alert(data.errorMessage); 56 else { 57 var popup = top.DetailPopupControl; 58 popup.SetContentHtml(''); 59 popup.SetHeaderText(conceptorHeaderText); 60 popup.SetContentUrl(data.redirectUrl + '&idnode=' + idnode); 61 popup.GetContentIFrame().allow = "clipboard-read *; clipboard-write *"; 62 63 top.conceptorToIdNode = idnode; 64 top.conceptorToIdParentNode = idparentnode; 65 popup.Show(); 66 } 67 68 }, 69 error: function (error) { 70 console.warn(error.responseText); 71 parent.$.LoadingOverlay("hide"); 72 }, 73 complete: function () { 74 parent.$.LoadingOverlay("hide"); 75 76 // Refresh derrière du treeView 77 if (incrementVersion) { 78 79 NeosRefresh(idparentnode, idnode); 80 81 } 82 } 83 }); 84 85 } 86 catch (e) { 87 parent.$.LoadingOverlay("hide"); 88 console.log(e.message); 89 bootbox.alert(e.message); 90 } 91} 92 93 94/* **************************************************** 95 96Lance l'ouverture du concepteur à partir de l'éditNode 97Si on est en train d'éditer une ancienne fiche alors on 98demande confirmation sinon on édite directement 99 100******************************************************* */ 101function OpenConceptorFromEditNode(mustConfirm, lang) { 102 103 if (mustConfirm) 104 { 105 bootbox.confirm( 106 { 107 message: conceptorEditValidation, 108 locale: lang, 109 callback: function (result) { 110 if (result) { 111 ApplyOpenConceptorFromEditNode(); 112 } 113 } 114 }); 115 } 116 else 117 ApplyOpenConceptorFromEditNode(); 118} 119 120/* **************************************************** 121 122Applique le scénario d'ouverture du concepteur à partir 123de la page EditNode. 124 125******************************************************* */ 126function ApplyOpenConceptorFromEditNode() { 127 128 var btWorking = $('.btworking'); 129 if (btWorking) 130 { 131 // Check du titre 132 if ($('[id$=title]').val().trim() == '') { 133 // Si on a pas saisi le titre de la fiche CMS on le demande ici 134 bootbox.prompt(conceptorTitleMandatory, function (result) { 135 // Si cette fois ci on a bien saisi un titre on ne reprend et on lance le concepteur 136 if (result != null && result.trim() != '') { 137 $('[id$=title]').val(result); 138 139 // Force le code de refresh de la page node à créer une variable top.idNodeToConceptor 140 // contenant l'id du noeud, sera utilisé dans la page Default.aspx pour vérifier le noeud 141 // à ouvrir 142 top.setIdNodeOnRefresh = 1; 143 144 // Clique sur "Enregistrer la version de travail" 145 btWorking.click(); 146 } 147 }) 148 149 } 150 else { 151 // Force le code de refresh de la page node à créer une variable top.idNodeToConceptor 152 // contenant l'id du noeud, sera utilisé dans la page Default.aspx pour vérifier le noeud 153 // à ouvrir 154 top.setIdNodeOnRefresh = 1; 155 156 // Clique sur "Enregistrer la version de travail" 157 btWorking.click(); 158 } 159 } 160} 161 162/* **************************************************** 163 164Retour du concepteur vers la page Node 165 166******************************************************* */ 167function BackFromConceptor(forceUnlock) { 168 try { 169 170 const idNode = top.conceptorToIdNode; 171 const idParentNode = top.conceptorToIdParentNode; 172 173 top.conceptorToIdNode = 0; 174 top.conceptorToIdParentNode = 0; 175 176 // Si on passe par là pour le Check alors on veut éviter un second check au refresh de la page node 177 // car la page node réalise un Check également à l'accès 178 top.conceptorSkipSecondCheck = 1; 179 180 CheckNeosContent(idParentNode, idNode, forceUnlock); 181 182 } 183 catch (e) { 184 console.warn(e); 185 } 186} 187 188 189/* **************************************************** 190 191Lance le contrôle de version d'une fiche type 4. 192Si on a pas le dernier contenu on l'écrit dans la fiche 193 194******************************************************* */ 195function CheckNeosContent(idParentNode, idnode, forceUnlock) { 196 197 // On regarde si le contenu Neos a changé et si on a besoin de mettre à jour notre noeud 198 // Et si on a besoin de refresh la page node du coup 199 $.ajax({
200 url: conceptorHandlerPath, 201 type: 'POST', 202 async: true, 203 datatype: "json", 204 data: { 205 "method": "CheckNeosContent", 206 "idnode": idnode, 207 "forceUnlock": forceUnlock 208 }, 209 success: function (data) 210 { 211 if (data.errorMessage != null && data.errorMessage != '') 212 { 213 bootbox.alert(data.errorMessage); 214 } 215 else if(data.MustUpdate) 216 { 217 // Le noeud a été MAJ on recharge la partie de droite 218 toastr.options = conceptorToastrOptions; 219 toastr.info(conceptorUpdateText, '', { iconClass: "toast-black" }); 220 NeosRefresh(idParentNode, idnode); 221 top.window.frames['mainFrame2'].location.reload(); 222 } 223 }, 224 error: function (error) { 225 console.warn(error.responseText); 226 } 227 }); 228} 229 230// Rafraichir la page Node 231function NeosRefresh(idParentNode, idNode) 232{ 233 wo = top.window['gauche']; 234 235 if (wo.refreshFromEditnode) { 236 var obj = eval('wo.level_' + idNode); 237 wo.delDoc(obj); 238 wo.refreshFromEditnode(idParentNode, idNode, false); 239 } 240 else { 241 var locationStr = window.document.location.href; 242 wo.document.location.href = locationStr.replace(/&actions\=/, '&oldactions='); 243 } 244} 245 246// Pour capter les messages venant de Nos 247window.addEventListener("message", receiveMessage, false); 248function receiveMessage(event) { 249 250 /* 251 console.log(event.origin, ' <=> ', conceptorNeosOrigin, ' : '); 252 console.log(event.data); 253 */ 254 255 if (event.origin !== conceptorNeosOrigin) return; 256 257 var popup = top.DetailPopupControl; 258 259 if (event.data == 'SaveAndClose') { 260 // Bouton enregistrer et fermé utilisé on veut fermer la popup et délocker la fiche 261 popup.Hide(); 262 BackFromConceptor(true); 263 } 264 else if (event.data == "ContinueLater") { 265 // Bouton continuer plus tard : on veut fermer la popup et laisser le lock 266 popup.Hide(); 267 BackFromConceptor(false); 268 } 269}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.