PageSourceSearch

https://cirhyo.fr/BibliRessources/js/ConceptorControl/ConceptorControl.js

js cirhyo.fr collected 2026-10-07 17:39:22 UTC 8,766 bytes, 269 lines download raw bytes

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.