PageSourceSearch

https://ives-technicalreviews.eu/plugins/generic/docconvert2/js/article.js?v=3.3.0.15

js ives-technicalreviews.eu collected 2026-09-28 08:39:47 UTC 36,375 bytes, 724 lines download raw bytes

1/* 
2 * Ensemble d'actions sur l'écran ARTICLE
3 * 
4 * 1 - GESTION MENU
5 * 2 - GESTION SOMMAIRE
6 * 3 - GESTION IMAGES
7 * 4 - GESTION TABLEAUX
8 * 5 - GESTION REFERENCES
9 * 6 - GESTION AUTEURS
10 * 7 - GESTION NOTES DE BAS DE PAGE
11 */
12
13$(document).ready(function () {
14
15
16    /****************************** 1 - GESTION MENU **********************************/
17    /* Affiche le contenu lié à l'onglet sélectionné. Met en surbrillance cet onglet. */
18    /**********************************************************************************/
19
20    $(".js-nav-tab").each(function (i) {
21        // cache tous les onglets sauf le 1er
22        if (i !== 0) {
23            $(this).css({display: "none"});
24        }
25    });
26
27    $("#menu li").click(function () {
28
29        $("#menu li").removeClass("active");
30        $(this).addClass("active");
31
32        $(".js-nav-tab").css({display: "none"});
33
34        // On affiche l'onglet concerné
35        var id = $(this).attr("data-target");
36        $("#" + id).css({display: "block"});
37
38        // si le sommaire avait été préalablement fixé, on le déverrouille
39        $("#jump-to").removeClass("fixed-summary");
40    });
41
42    /******************************** 2 - GESTION SOMMAIRE **************************************************/
43    /* Construit dynamiquement les éléments du sommaire à partir des titres présents dans l'article.        */
44    /* Met en surbrillance le 1er élement du sommaire.                                                      */
45    /* Vient se placer au bon endroit dans l'article (animation de scroll) lorsqu'on clique sur un élément. */
46    /* Met en surbrillance l'élement de sommaire concerné.                                                  */
47    /* Fixe le sommaire et les onglets lors du scroll de la page                                            */
48    /********************************************************************************************************/
49
50    if ($("#articleHTML").length || $("article").length) {
51        $("#article h2")
52            .filter(function () {
53                if ($.trim($(this).text()) === "") {
54                    $(this).remove();
55                }
56                return $.trim($(this).text()) !== "";
57            })
58            .each(function (i) {
59
60                // Place la classe "active" seulement sur le 1er élément du sommaire
61                var selectMenu = "";
62                if (i === 0) {
63                    selectMenu = "active";
64                }
65
66                // regex permettant de récupérer tous les caractères spéciaux, cad tout ce qui n'est pas une lettre ou un chiffre
67                var regex = /[^a-zA-Z0-9]/g;
68
69
70                if ($("a[id], span[id]", this).length) {
71                    var a = $("a[id], span[id]", this).first();
72                    var anchorName = "";
73                    var urlText = "";
74                    if ($("a[id], span[id]", this).html().trim() !== "") {
75                        urlText = $("a[id], span[id]", this).first().text();
76                    } else {
77                        urlText = $(this).text();
78                    }
79
80                    if (a.attr("id") != null) {
81                        anchorName = a.attr("id").replace(regex, "");
82                        a.attr("id", anchorName);
83                    } else {
84                        anchorName = urlText.replace(regex, "");
85                    }
86
87                    // $(this).html(urlText);
88                    // $(this).before('<a id="' + urlText.replace(regex, "") + '"></a>');
89                    $("#jump-to").append("<a class=\"list-group-item " + selectMenu + "\" href=\"#" + anchorName + "\">" + urlText + "</a>");
90                } else {
91                    $(this).before("<span id=\"" + $(this).html().replace(regex, "") + "\"></span>");
92                    $("#jump-to").append("<a class=\"list-group-item " + selectMenu + "\" href=\"#" + $(this).html().replace(regex, "") + "\">" + $(this).html() + "</a>");
93                    //$("body").append('<a class="list-group-item ' + selectMenu + '" href="#' + $(this).html().replace(regex, "") + '">' + $(this).html() + '</a>');
94                }
95            });
96
97        // VARIABLES DE CACHE
98        var dernierId;
99        // Hauteur utilisée pour effectuer un décalage équivalent à la hauteur des onglets + la hauteur d'un titre (lorsque les onglets sont fixés)
100        var decalageOngletsFixes = $("#menu").outerHeight(true) + $("#article h2:first").outerHeight(true);
101        // Hauteur utilisée pour effectuer un décalage équivalent à la hauteur des onglets + la hauteur d'un titre + la hauteur des onglets (lorsque les onglets ne sont pas fixés)
102        var decalageOnglets = $("#menu").outerHeight(true) + $("#article h2:first").outerHeight(true) + $("#menu").outerHeight(true) - 1;
103        // Elements <a> du jump-to
104        var jumptoItems = $("#jump-to").find("a");
105        // Ancres rattachées au jump-to
106        var ancres = jumptoItems.map(function () {
107            var item = $(this).attr("href");
108            if (item.length) {
109                if (typeof item === "string" || item instanceof String) {
110                    if (!item.match(/[:\(\)\.;]+/g)) {
111                        if ($(item) && $(item) !== undefined) {
112                            return $(item);
113                        }
114                    }
115                } else {
116                    return item;
117                }
118            }
119        });
120        var premiereAncre = $(ancres[0]);
121        // Onglets
122        var containerNavbar = $("#container-menu");
123        var navbar = $("#menu");
124        // Sommaire
125        var sommaire = $("#jump-to");
126        // Article
127        var article = $("#article");
128
129        // Animation de scroll lorsqu'on clique sur un élément du sommaire
130        jumptoItems.click(function (e) {
131            var anchor = $("a" + $(this).attr("href") + ", span" + $(this).attr("href")).first();
132            var positionItem;
133            if (sommaire.hasClass("fixed-summary")) {
134                positionItem = anchor.offset().top - decalageOngletsFixes;
135            } else {
136                positionItem = anchor.offset().top - decalageOngletsFixes;
137                // lorsque les onglets ne sont pas fixés, offset() prend en compte la hauteur de ces onglets en plus, du coup il faut le prendre en compte dans le décalage
138                positionItem = anchor.offset().top - decalageOnglets;
139            }
140            $("html, body").stop().animate({
141                scrollTop: positionItem
142            }, 300);
143            e.preventDefault();
144        });
145
146        // Lors du scroll de l'écran
147        $(window).scroll(function () {
148            var scrollbarPosition = $(this).scrollTop();
149            // Récupère un tableau contenant tous les éléments qui ont été scrollés
150            var cur = ancres.map(function () {
151                if ($(this).offset() !== undefined && $(this).offset().top < scrollbarPosition + decalageOngletsFixes + 1) {
152                    return this;
153                }
154            });
155
156            // Récupère l'id de l'élément courant (dernier élément scrollé). Si il n'y a pas de résultats, récupère l'id de la 1ère ancre
157            cur = cur[cur.length - 1];
158            var id = cur && cur.length && cur[0] !== undefined ? cur[0].id : premiereAncre.id;
159
160            if (dernierId !== id) {
161                dernierId = id;
162                // Ajoute/Supprime la classe "active"
163                jumptoItems.removeClass("active")
164                    .filter("[href=\"#" + id + "\"]").addClass("active");
165            }
166
167            // Fixe le sommaire quand on scroll la page, et recalcule sa taille
168            if (article.css("display") === "block") {
169                if (premiereAncre.offset() !== undefined && premiereAncre.offset().top < scrollbarPosition + decalageOngletsFixes) {
170                    sommaire.addClass("fixed-summary");
171
172                    var new_width = sommaire.parent().width();
173                    sommaire.width(new_width);
174
175                } else {
176                    sommaire.removeClass("fixed-summary");
177                    sommaire.width("");
178                }
179            }
180
181            // Fixe les onglets quand on scroll la page
182            var fixed = false;
183            if (containerNavbar.offset() !== undefined && containerNavbar.offset().top < scrollbarPosition) {
184                if (!fixed) {
185                    navbar.addClass("navbar-fixed-top");
186                    fixed = true;
187                }
188            } else {
189                navbar.removeClass("navbar-fixed-top");
190                fixed = false;
191            }
192        });
193    }
194
195    /******************************** 3 - GESTION IMAGES ********************************/
196    /* Gestion des boutons Expand et Collapse.                                          */
197    /* N'affiche le bouton Save que sur les navigateurs qui gèrent l'attribut download. */
198    /************************************************************************************/
199
200    $("figure").not('.articleFramedText figure').each(function () {
201        if ($("> img.embedded-picture, > b img.embedded-picture, > p img.embedded-picture, > u img.embedded-picture ", this).length) {
202
203            $(this).wrap("<div class='row div-figures'><div class='col-sm-12 col-md-12 btn-figures'></div></div>").before("<a class=\"btn btn-primary btn-xs pull-right img-expand\" style=\"display: inline-block;\" alt=\""+  getTranslation("expand") + "\">" +
204                "<span class=\"glyphicon glyphicon-resize-full\" aria-hidden=\"true\">" +
205                "</span></a>");
206            $("img.embedded-picture", $(this)).addClass("col-sm-6 col-md-6");
207
208            $("a.btn", $(this).parent()).click(function () {
209                if ($(this).hasClass("img-expand")) {
210                    $(this).removeClass("img-expand").addClass("img-collapse");
211                    $("span.glyphicon", $(this)).removeClass("glyphicon-resize-full").addClass("glyphicon-resize-small");
212                    $(this).closest(".div-figures").find("img.col-md-6").removeClass("col-sm-6 col-md-6").addClass("col-sm-12 col-md-12");
213                } else if ($(this).hasClass("img-collapse")) {
214                    $(this).removeClass("img-collapse").addClass("img-expand");
215                    $("span.glyphicon", $(this)).removeClass("glyphicon-resize-small").addClass("glyphicon-resize-full");
216                    $(this).closest(".div-figures").find("img.col-md-12").removeClass("col-sm-12 col-md-12").addClass("col-sm-6 col-md-6");
217                }
218            });
219
220            var imgSrc = $("img", this).attr("src");
221            $(this).before(
222                "<a href=\"" + imgSrc + "\" download=\"image1.jpeg\" class=\"btn btn-primary btn-xs pull-right img-save\" alt=\""+  getTranslation("save") + "\">" +
223                "<span class=\"glyphicon glyphicon-floppy-disk\" aria-hidden=\"true\">" +
224                "</span></a>"
225            );
226        }
227    });
228    $("div.js-bloc-image").each(function () {
229        if ($(".img-expand", this).length === 0) {
230
231            $("div.affichage-image img", this).wrap("<div class='col-sm-6 col-md-6'></div>");
232            var h6 = $(this).parent().closest("h6");
233            h6.detach().prependTo($(this));
234
235
236            $("div.affichage-image", this).prepend("<a class=\"btn btn-primary btn-xs pull-right img-expand\" style=\"display: inline-block;\" alt=\""+  getTranslation("expand") + "\">" +
237                "<span class=\"glyphicon glyphicon-resize-full\" aria-hidden=\"true\">" +
238                "</span></a>");
239
240            $("div.affichage-image a.btn", this).click(function () {
241                if ($(this).hasClass("img-expand")) {
242                    $(this).removeClass("img-expand").addClass("img-collapse");
243                    $("span.glyphicon", $(this)).removeClass("glyphicon-resize-full").addClass("glyphicon-resize-small");
244                    $(this).closest(".js-bloc-image").find(".affichage-image").find(".col-md-6").removeClass("col-sm-6 col-md-6").addClass("col-sm-12 col-md-12");
245                } else if ($(this).hasClass("img-collapse")) {
246                    $(this).removeClass("img-collapse").addClass("img-expand");
247                    $("span.glyphicon", $(this)).removeClass("glyphicon-resize-small").addClass("glyphicon-resize-full");
248                    $(this).closest(".js-bloc-image").find(".affichage-image").find(".col-md-12").removeClass("col-sm-12 col-md-12").addClass("col-sm-6 col-md-6");
249
250                }
251
252            });
253
254
255            var imgSrc = $("img", this).attr("src");
256            $("div.affichage-image", this).prepend(
257                "<a href=\"" + imgSrc + "\" download=\"image1.jpeg\" class=\"btn btn-primary btn-xs pull-right img-save\" alt=\""+  getTranslation("save") + "\">" +
258                "<span class=\"glyphicon glyphicon-floppy-disk\" aria-hidden=\"true\">" +
259                "</span></a>"
260            );
261        } else {
262
263            $(".img-expand").click(function () {
264                $(this).css({display: "none"});
265                $(this).next().css({display: "inline-block"});
266                var divImage = $(this).closest(".js-bloc-image").find(".affichage-image");
267                divImage.find(".col-md-6").removeClass("col-sm-6 col-md-6").addClass("col-sm-12 col-md-12");
268            });
269
270            $(".img-collapse").click(function () {
271                $(this).css({display: "none"});
272                $(this).prev().css({display: "inline-block"});
273                var divImage = $(this).closest(".js-bloc-image").find(".affichage-image");
274                divImage.find(".col-md-12").removeClass("col-sm-12 col-md-12").addClass("col-sm-6 col-md-6");
275            });
276        }
277    });
278
279    // Masque les boutons Save des images si l'attribut download n'est pas géré par le navigateur
280    var a = document.createElement("a");
281    if (typeof a.download === "undefined") {
282        $(".img-save").css({display: "none"});
283    }
284
285    /**************************************** 4 - GESTION TABLEAUX **********************************************/
286    /* Masque une partie du tableau. Gestion des boutons Expand et Collapse et du flou appliqué sur le tableau. */
287    /* Gestion du bouton view popup qui ouvre un nouvel onglet contenant uniquement le tableau.                 */
288    /************************************************************************************************************/
289
290    var CONST_NB_LIGNES_AFFICHEES_PAR_DEFAUT = 2;
291
292    $(".js-bloc-tableau").each(function () {
293        var currentBloc = $(this);
294        $(".affichage-tableau tbody", this).each(function () {
295            $(this).find("tr").slice(CONST_NB_LIGNES_AFFICHEES_PAR_DEFAUT).hide();
296        });
297        if ($(".tab-expand", this).length === 0  && $(".articleFramedText", this).length === 0) {
298            $("div.table-responsive", this).wrap("<div class='row'></div>").prepend("<div class='js-tableau-flou flou'></div>").wrap("<div class='col-sm-12 col-md-12'></div>");
299            $(this).prepend("<div class=\"row\">" +
300                "<div class=\"col-sm-12 col-md-12 btn-figures\">" +
301                "<a class=\"btn btn-primary btn-xs pull-right tab-popup\" alt=\""+  getTranslation("popup") + "\">" +
302                "<span class=\"glyphicon glyphicon-new-window\" aria-hidden=\"true\">" +
303                "</span></a>" +
304                "<a class=\"btn btn-primary btn-xs pull-right tab-expand\" alt=\""+  getTranslation("expand") + "\">" +
305                "<span class=\"glyphicon glyphicon-resize-full\" aria-hidden=\"true\">" +
306                "</span></a>" +
307                "</div>" +
308                "</div>");
309
310
311            $("div.btn-figures a.btn", this).click(function () {
312                if ($(this).hasClass("tab-expand")) {
313                    $(this).removeClass("tab-expand").addClass("tab-collapse").show();
314                    $("span.glyphicon", $(this)).removeClass("glyphicon-resize-full").addClass("glyphicon-resize-small");
315                    $(".affichage-tableau tbody", $(currentBloc)).find("tr").slice(CONST_NB_LIGNES_AFFICHEES_PAR_DEFAUT).show();
316                    $(".js-tableau-flou", $(currentBloc)).removeClass("flou");
317
318                } else if ($(this).hasClass("tab-collapse")) {
319                    $(this).removeClass("tab-collapse").addClass("tab-expand");
320                    $("span.glyphicon", $(this)).removeClass("glyphicon-resize-small").addClass("glyphicon-resize-full");
321                    $(".affichage-tableau tbody", $(currentBloc)).find("tr").slice(CONST_NB_LIGNES_AFFICHEES_PAR_DEFAUT).hide();
322                    $(".js-tableau-flou", $(currentBloc)).addClass("flou");
323                } else if ($(this).hasClass("tab-popup")) {
324                    var data = "<html><title>" + $("head title").html() + "</title><meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\">";
325
326                    // Récupération des fichiers CSS de la page, pour les réappliquer sur le nouvel onglet
327                    $("head link[type=\"text/css\"]").each(function () {
328                        data += $(this).prop("outerHTML");
329                    });
330                    data += "<body style='overflow:auto; height:100%;'>";
331                    data += "</body>";
332                    data += "</html>";
333                    var newTab = window.open("about:blank", "table_popup", "toolbar=yes,resizable=yes,scrollbars=yes,width=800,height=600,left=0,top=0");
334                    newTab.document.write(data);
335                    newTab.focus();
336
337                    // On duplique l'objet pour que les opérations faites desssus n'affectent pas le DOM en même temps
338                    var DOMTableau = $(this).closest(".js-bloc-tableau").clone();
339                    DOMTableau.find(".js-tableau-flou").remove();
340                    DOMTableau.find(".btn-figures").remove();
341                    DOMTableau.find(".affichage-tableau tr").show();
342
343                    var content = DOMTableau.prop("outerHTML");
344                    content += "<div style=\"text-align: center;\"><a class=\"btn btn-primary btn-lg\" href=\"javascript:top.close();\"><span class=\"glyphicon glyphicon-remove\" aria-hidden=\"true\"></a></a></div>";
345
346                    newTab.document.body.innerHTML = content;
347
348                }
349            });
350
351
352        } else if($(".tab-expand", this).length > 0  && $(".articleFramedText", this).length === 0){
353
354            $(".tab-expand", this).click(function () {
355                $(this).css({display: "none"});
356                $(this).next().css({display: "inline-block"});
357                var divTableau = $(this).closest(".js-bloc-tableau").find(".affichage-tableau");
358                divTableau.find("tbody tr").slice(CONST_NB_LIGNES_AFFICHEES_PAR_DEFAUT).show();
359                $(".js-tableau-flou").removeClass("flou");
360            });
361
362            $(".tab-collapse", this).click(function () {
363                $(this).css({display: "none"});
364                $(this).prev().css({display: "inline-block"});
365                var divTableau = $(this).closest(".js-bloc-tableau").find(".affichage-tableau");
366                divTableau.find("tbody tr").slice(CONST_NB_LIGNES_AFFICHEES_PAR_DEFAUT).hide();
367                $(".js-tableau-flou").addClass("flou");
368            });
369
370            $(".tab-popup", this).click(function () {
371                var data = "<html><title>" + $("head title").html() + "</title><meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\">";
372
373                // Récupération des fichiers CSS de la page, pour les réappliquer sur le nouvel onglet
374                $("head link[type=\"text/css\"]").each(function () {
375                    data += $(this).prop("outerHTML");
376                });
377                data += "<body style='overflow:auto; height:100%;'>";
378                data += "</body>";
379                data += "</html>";
380
381                var newTab = window.open("about:blank", "table_popup", "toolbar=yes,resizable=yes,scrollbars=yes,width=800,height=600,left=0,top=0");
382                newTab.document.write(data);
383                newTab.focus();
384
385                // On duplique l'objet pour que les opérations faites desssus n'affectent pas le DOM en même temps
386                var DOMTableau = $($(this).closest(".js-bloc-tableau")).clone();
387                DOMTableau.find(".js-tableau-flou").remove();
388                DOMTableau.find(".btn-figures").remove();
389                DOMTableau.find(".affichage-tableau tr").show();
390
391                var content = DOMTableau.prop("outerHTML");
392                content += "<div style=\"text-align: center;\"><a class=\"btn btn-primary btn-lg\" href=\"javascript:top.close();\"><span class=\"glyphicon glyphicon-remove\" aria-hidden=\"true\"></a></div>";
393
394                newTab.document.body.innerHTML = content;
395            });
396
397        }
398    });
399
400
401    /******************************************* 5 - GESTION REFERENCES ***********************************************/
402    /* Fait le lien entre les références et les éléments présents dans l'article. Construit le lien DOI si il existe, */
403    /* et à condition qu'un autre lien n'est pas déjà présent dans la référence.                                      */
404    /* Mise en place d'une tooltip affichant dans l'article la référence sur laquelle on pointe.                      */
405    /******************************************************************************************************************/
406
407    var CONST_DOI = "doi:";
408    var CONST_DOI_HTTPS = "https://doi.org";
409    var CONST_SLASH = "/";	
410    var CONST_URL_DOI_HTTPS = CONST_DOI_HTTPS+CONST_SLASH;		
411    var CONST_SPACE = " ";		
412    var CONST_2POINTS = ":";		
413    var CONST_HTTPS = "https://";
414    var CONST_HTTP = "http://";
415    var cptReference = 1;
416    $(".js-reference").each(function () {
417        $(this).prepend("<span class=\"js-num-reference\">" + cptReference + ". </span>")
418            .wrapInner("<div id=\"ref_" + cptReference + "\"></div>");
419        // Ajoute une div spécifique faisant le lien avec les références dans le full text
420        cptReference++;
421
422
423        // Récupère le contenu de la référence
424        var contenuReference = $("div", this).html();
425        var positionDOI = contenuReference.indexOf(CONST_DOI);
426        var positionDOIHTTPS = contenuReference.indexOf(CONST_DOI_HTTPS);
427        var positionHTTPS = contenuReference.indexOf(CONST_HTTPS);
428        var positionHTTP = contenuReference.indexOf(CONST_HTTP);
429
430		// Reference + URL de type "doi:"			
431        if (positionDOI !== -1) {
432            // récupère la position après le mot clé "doi :" ou "doi:"
433            var positionLienDOI = contenuReference.indexOf(CONST_2POINTS, positionDOI) + 1;
434            // on regarde si il y a un espace juste après
435            if (contenuReference.charAt(positionLienDOI) === CONST_SPACE) {
436                positionLienDOI++;
437            }
438            // on regarde si il y a un slash "/" juste après le mot clé "doi:"
439            if (contenuReference.charAt(positionLienDOI) === CONST_SLASH) {
440                positionLienDOI++;
441            }
442            // Récupère le contenu du doi
443            var contenuDOI = contenuReference.substr(positionLienDOI);
444			contenuDOI = contenuDOI.trim();	
445            // Si la partie http ou https n'est pas déjà présente dans le doi, on la rajoute
446            if ((contenuReference.slice(positionLienDOI, CONST_HTTP.length) !== CONST_HTTP) || (contenuReference.slice(positionLienDOI, CONST_HTTPS.length) !== CONST_HTTPS)) {
447                lienURLDOIHTTPS = CONST_URL_DOI_HTTPS + contenuDOI;
448            }
449            var contenuRef = contenuReference.substring(0, positionDOI);
450            var lienDOIHREFHTTPS = "<div><a href=\"" + lienURLDOIHTTPS + "\" target=\"_blank\">" + lienURLDOIHTTPS + "</a></div>";
451            $("div", this).html(contenuRef + lienDOIHREFHTTPS);
452        }
453		// Reference + URL de type "https://doi.org"
454        if (positionDOIHTTPS !== -1) {
455            // Récupère la position après le mot clé "https://doi.org"
456            var positionlienDOIHTTPS = contenuReference.indexOf(CONST_SLASH, positionDOIHTTPS) + 10;
457            // Récupère le contenu du doi
458            var contenuDOI = contenuReference.substr(positionlienDOIHTTPS);
459			contenuDOI = contenuDOI.trim();	
460            lienDOIURLHTTPS = CONST_URL_DOI_HTTPS + contenuDOI;
461            var contenuRef = contenuReference.substring(0, positionDOIHTTPS);
462            var lienDOIHREFHTTPS = "<div><a href=\"" + lienDOIURLHTTPS + "\" target=\"_blank\">" + lienDOIURLHTTPS + "</a></div>";
463            $("div", this).html(contenuRef + lienDOIHREFHTTPS);
464		// Reference + URL de type "https"
465        } else if (positionHTTPS !== -1) {
466            // Récupère la position après le mot clé "https"
467            var positionlienURLHTTPS = contenuReference.indexOf(CONST_HTTPS, positionHTTPS);
468            // Récupère le contenu du lien
469            var lienURLHTTPS = contenuReference.substr(positionlienURLHTTPS);
470			lienURLHTTPS = lienURLHTTPS.trim();	
471			//console.log("lienURLHTTPS:"+lienURLHTTPS);
472            var contenuRef = contenuReference.substring(0, positionHTTPS);
473            var lienHREFHTTPS = "<div><a href=\"" + lienURLHTTPS + "\" target=\"_blank\">" + lienURLHTTPS + "</a></div>";
474            $("div", this).html(contenuRef + lienHREFHTTPS);
475		// Reference + URL de type "http"			
476        } else if (positionHTTP !== -1) {
477            // Récupère la position après le mot clé "http"
478            var positionlienURLHTTP = contenuReference.indexOf(CONST_HTTP, positionHTTP);
479            // Récupère le contenu du lien
480            var lienURLHTTP = contenuReference.substr(positionlienURLHTTP);
481			lienURLHTTP = lienURLHTTP.trim();	
482            var contenuRef = contenuReference.substring(0, positionHTTP);
483            var lienHREFHTTP = "<div><a href=\"" + lienURLHTTP + "\" target=\"_blank\">" + lienURLHTTP + "</a></div>";
484            $("div", this).html(contenuRef + lienHREFHTTP);
485        }
486
487    });
488
489
490    $("body").append("<div id=\"tooltip_ref\"></div>");
491
492    var selectedReference;
493
494    $("ref, cite[data-reference]").mouseenter(function () {
495
496        // On enlève le timeout de l'ancienne référence où on était pour ne pas que la tooltip soit masquée lorsqu'on se positionne rapidement sur une autre référence
497        if (typeof selectedReference !== "undefined") {
498            clearTimeout(selectedReference.data("timeoutId"));
499        }
500        selectedReference = $(this);
501
502        var id = $(this).attr("data-reference") ? $(this).attr("data-reference") : $(this).attr("id");
503        // On duplique l'objet pour que les opérations faites desssus n'affectent pas le DOM en même temps
504        var reference = $("#references").find("#ref_" + id).clone();
505        // La tooltip ne doit pas contenir le numéro de référence
506        reference.find(".js-num-reference").remove();
507
508        $("#tooltip_ref").html(reference.html());
509        $(this).find("#tooltip_ref").fadeIn(400);
510
511    }).mousemove(function (kmouse) {
512        // Décale la tooltip vers le haut en prenant en compte le padding, et en rajoutant 15px
513        var decalageHeightTooltip = 15;
514        var heightTooltip = $("#tooltip_ref").outerHeight(true) + decalageHeightTooltip;
515
516        // Moitié de la largeur de la tooltip
517        var halfWidthTooltip = $("#tooltip_ref").outerWidth(true) / 2;
518
519        // Si la position (abscisse) de la souris est inférieure à la moitié de la largeur de la tooltip (c'est à dire qu'un bout de la tooltip dépasse de l'écran)
520        if (kmouse.pageX < halfWidthTooltip) {
521            // On place la tooltip à une position fixe
522            var positionFixe = $("#article").position().left;
523            $("#tooltip_ref").css({left: positionFixe, top: kmouse.pageY - heightTooltip}).fadeIn(400);
524        } else {
525            // Sinon on peut la laisser s'afficher normalement
526            $("#tooltip_ref").css({
527                left: kmouse.pageX - halfWidthTooltip,
528                top: kmouse.pageY - heightTooltip
529            }).fadeIn(400);
530        }
531
532    }).mouseleave(function () {
533        var timeoutId = setTimeout(function () {
534            $("#tooltip_ref").fadeOut(400);
535        }, 300);
536
537        //set the timeoutId, allowing us to clear this trigger if the mouse 
537comes back over
538        $(this).data("timeoutId", timeoutId);
539    });
540
541    $("#tooltip_ref").mouseenter(function () {
542        clearTimeout(selectedReference.data("timeoutId"));
543    }).mouseleave(function () {
544        var timeoutId = setTimeout(function () {
545            $("#tooltip_ref").fadeOut(400);
546        }, 400);
547        selectedReference.data("timeoutId", timeoutId);
548    });
549
550    /************************* 6 - GESTION AUTEURS *************************/
551    /* Mise en place d'une tooltip affichant les informations de l'auteur. */
552    /***********************************************************************/
553
554    $("body").append("<div id='tooltip_author'></div>");
555
556    var selectedAuthor;
557    var tailleMaxBiography = 150;
558    var endText = "...";
559
560    $(".js-article-author").mouseenter(function () {
561
562        // On enlève le timeout de l'ancien auteur où on était pour ne pas que la tooltip soit masquée lorsqu'on se positionne rapidement sur un autre auteur
563        if (typeof selectedAuthor !== "undefined") {
564            clearTimeout(selectedAuthor.data("timeoutId"));
565        }
566        selectedAuthor = $(this);
567
568        var id = $(this).attr("data-target");
569        var content = $("#author").find("#author_" + id).clone();
570
571        // Si le contenu de la biographie existe et est trop grand, on en affiche qu'une partie pour être sûr que la tooltip ne dépasse pas de l'écran
572        if ($(".js-author-biography").length) {
573            var biography = $(".js-author-biography").html().trim();
574            if (biography.length > tailleMaxBiography) {
575                biography = biography.substring(0, tailleMaxBiography);
576                biography += endText;
577                content.find(".js-author-biography").html(biography);
578            }
579        }
580
581        $("#tooltip_author").html(content.html());
582        $(this).find("#tooltip_author").fadeIn(400);
583
584    }).mousemove(function (kmouse) {
585        // Décale la tooltip vers le haut en prenant en compte le padding, et en rajoutant 15px
586        var decalageHeightTooltip = 15;
587        var heightTooltip = $("#tooltip_author").outerHeight(true) + decalageHeightTooltip;
588
589        // Moitié de la largeur de la tooltip
590        var halfWidthTooltip = $("#tooltip_author").outerWidth(true) / 2;
591
592        // Si la position (abscisse) de la souris est inférieure à la moitié de la largeur de la tooltip (c'est à dire qu'un bout de la tooltip dépasse de l'écran)
593        if (kmouse.pageX < halfWidthTooltip) {
594            // On place la tooltip à une position fixe
595            var positionFixe = $("#article").position().left;
596            $("#tooltip_author").css({left: positionFixe, top: kmouse.pageY - heightTooltip}).fadeIn(400);
597        } else {
598            // Sinon on peut la laisser s'afficher normalement
599            $("#tooltip_author").css({
600                left: kmouse.pageX - halfWidthTooltip,
601                top: kmouse.pageY - heightTooltip
602            }).fadeIn(400);
603        }
604
605    }).mouseleave(function () {
606        var timeoutId = setTimeout(function () {
607            $("#tooltip_author").fadeOut(400);
608        }, 300);
609
610        //set the timeoutId, allowing us to clear this trigger if the mouse comes back over
611        $(this).data("timeoutId", timeoutId);
612    });
613
614    $("#tooltip_author").mouseenter(function () {
615        clearTimeout(selectedAuthor.data("timeoutId"));
616    }).mouseleave(function () {
617        var timeoutId = setTimeout(function () {
618            $("#tooltip_author").fadeOut(400);
619        }, 400);
620        selectedAuthor.data("timeoutId", timeoutId);
621    });
622
623    /******************************************* 7 - GESTION DES NOTES DE BAS DE PAGE ************************/
624    /* Fait le lien entre les notes de bas de page et les éléments présents dans l'article.                 */
625    /* Mise en place d'une tooltip affichant dans l'article la note de bas de page sur laquelle on pointe.  */
626    /********************************************************************************************************/
627
628    var cptRefootnote = 1;
629    $(".js-refootnote").each(function () {
630        if($(this).find(".refootnote-id").length){
631            $(this).find(".refootnote-id").addClass("js-num-refootnote");
632            $(this).wrapInner("<div id=\"refootnote_" + cptRefootnote + "\"></div>");
633        } else {
634            $(this).prepend("<span class=\"js-num-refootnote\">" + cptRefootnote + ". </span>")
635                .wrapInner("<div id=\"refootnote_" + cptRefootnote + "\"></div>");
636            // Ajoute une div spécifique faisant le lien avec les notes de bas de pages dans le full text
637            cptRefootnote++;
638        }
639    });
640
641    $("body").append("<div id='tooltip_refootnote'></div>");
642
643    var selectedRefootnote;
644
645    $("refootnote").mouseenter(function () {
646
647        // On enlève le timeout de l'ancienne note de bas de page où on était pour ne pas que la tooltip soit masquée lorsqu'on se positionne rapidement sur une autre note de bas de page
648        if (typeof selectedRefootnote !== "undefined") {
649            clearTimeout(selectedRefootnote.data("timeoutId"));
650        }
651        selectedRefootnote = $(this);
652
653        var id = $(this).attr("id");
654        // On duplique l'objet pour que les opérations faites desssus n'affectent pas le DOM en même temps
655        var refootnote = $("#refootnotes").find("#refootnote_" + id).clone();
656        // La tooltip ne doit pas contenir le numéro de note de bas de page
657        refootnote.find(".js-num-refootnote").remove();
658        $("#tooltip_refootnote").html(refootnote.html());
659        $(this).find("#tooltip_refootnote").fadeIn(400);
660
661    }).mousemove(function (kmouse) {
662        // Décale la tooltip vers le haut en prenant en compte le padding, et en rajoutant 15px
663        var decalageHeightTooltip = 15;
664        var heightTooltip = $("#tooltip_refootnote").outerHeight(true) + decalageHeightTooltip;
665
666        // Moitié de la largeur de la tooltip
667        var halfWidthTooltip = $("#tooltip_refootnote").outerWidth(true) / 2;
668
669        // Si la position (abscisse) de la souris est inférieure à la moitié de la largeur de la tooltip (c'est à dire qu'un bout de la tooltip dépasse de l'écran)
670        if (kmouse.pageX < halfWidthTooltip) {
671            // On place la tooltip à une position fixe
672            var positionFixe = $("#article").position().left;
673            $("#tooltip_refootnote").css({left: positionFixe, top: kmouse.pageY - heightTooltip}).fadeIn(400);
674        } else {
675            // Sinon on peut la laisser s'afficher normalement
676            $("#tooltip_refootnote").css({
677                left: kmouse.pageX - halfWidthTooltip,
678                top: kmouse.pageY - heightTooltip
679            }).fadeIn(400);
680        }
681
682    }).mouseleave(function () {
683        var timeoutId = setTimeout(function () {
684            $("#tooltip_refootnote").fadeOut(400);
685        }, 300);
686
687        //set the timeoutId, allowing us to clear this trigger if the mouse comes back over
688        $(this).data("timeoutId", timeoutId);
689    });
690
691    $("#tooltip_refootnote").mouseenter(function () {
692        clearTimeout(selectedRefootnote.data("timeoutId"));
693    }).mouseleave(function () {
694        var timeoutId = setTimeout(function () {
695            $("#tooltip_refootnote").fadeOut(400);
696        }, 400);
697        selectedRefootnote.data("timeoutId", timeoutId);
698    });
699});
700
701
702var docLanguage = document.documentElement.lang;
703var langDefault = "en-US";
704var dictionary = {
705    "fr-FR" : {
706        "expand": "Étendre",
707        "popup": "Ouvrir",
708        "save" : "Télécharger"
709    },
710    "en-US" : {
711        "expand": "Expland inline",
712        "popup": "View popup",
713        "save" : "Save"
714    }
715};
716
717function getTranslation(key) {
718    // Vérifie si la langue du document est dans le dictionnaire
719    if (dictionary[docLanguage] && dictionary[docLanguage][key]) {
720        return dictionary[docLanguage][key];
721    }
722    // Sinon, utilise la langue par défaut
723    return dictionary[langDefault][key];
724}

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.