source: spip-zone/_plugins_/multilang/trunk/javascript/multilang_init.js.html @ 118606

Last change on this file since 118606 was 118606, checked in by Charles Razack, 13 months ago

Version 1.4.0.

  • Nouveauté la plus visible : petite refacto du menu de langues → Noms des langues en entier au lieu des codes (fr, en...), liens affichés sous formes de boutons plus grands et centrés pour être bien visibles, ajout d'un label. Petite amélioration pour éviter qu'il y ait un saut lorsque le menu passe en sticky.
  • Configuration : les formulaires sur lesquels activer le script sont tous regroupés dans une même clé formulaires.
  • Configuration : ajout d'une option pour ajouter des sélecteurs dans le paramètre root (exemple complètement au hasard : .formulaire_editer_noisette).
  • Ajout d'un pipeline multilang_parametres pour permettre aux plugins de changer les paramètres passés au script d'init. Cas le plus courant : ajouter des formulaires à prendre en compte par le script.
  • Refactorisation du script d'init afin qu'il soit plus lisible et maintenable : séparation du javascript et du php. Au passage, correction d'un bug rigolo qui faisait que quand on décochait tous les items dans la config, le script devenait actif sur *tous* les formulaires : recherche, login, etc.
File size: 3.0 KB
Line 
1#CACHE{7*24*3600}
2#HTTP_HEADER{Content-Type: text/javascript; charset=#CHARSET}
3#SET{params,     #REM|multilang_init_parametres}
4#SET{globales,   #REM|multilang_init_globales}
5#SET{nb_langues, #CONFIG{langues_multilingue}|explode{","}|count}
6#SET{has_params, #GET{params}|count|>{0}}
7#SET{activer,    #GET{nb_langues}|>{1}|et{#GET{has_params}}}
8<BOUCLE_activer(CONDITION) {si #GET{activer}}>
9[(#REM)<script>]
10
11// Variables globales
12var
13        multilang_avail_langs   = "[(#GET{globales/avail_langs}|implode{','})]",
14        multilang_avail_langs   = multilang_avail_langs.split(','),
15        multilang_dir_langs     = [(#GET{globales/dir_langs}|json_encode)],
16        multilang_def_lang      = "#GET{globales/def_lang}",
17        multilang_lang_courante = "#GET{globales/lang_courante}",
18        multilang_dir_plugin    = "#GET{globales/dir_plugin}";
19
20// On trie les langues : langue de l'environnement en premier,
21// puis langue principale du site, puis les autres en ordre alphabétique.
22// Un utilisateur de langue anglaise souhaite logiquement traduire en anglais.
23multilang_avail_langs = jQuery.grep(multilang_avail_langs, function(value) {
24        return (value != multilang_def_lang && value != multilang_lang_courante);
25});
26multilang_avail_langs.sort();
27multilang_avail_langs.unshift(multilang_lang_courante);
28if (multilang_lang_courante!=multilang_def_lang) {
29        multilang_avail_langs.unshift(multilang_def_lang);
30}
31
32// Appel de multilang_init_lang si
33// - document.ready
34// - onAjaxLoad (cas des docs et de la configuration du site)
35jQuery(function ($) {
36
37        // Lance le script principal et passe le menu en sticky
38        function multilang_init() {
39
40                // Appel du script principal
41                multilang_init_lang([(#GET{params}|json_encode)]);
42
43                // Passe le menu en sticky
44                if ($(".menu_multilang").length > 0) {
45                        $(".menu_multilang").each(function () {
46                                var $menu_lang = $(this),
47                                        $form = $menu_lang.parents("form"),
48                                        hauteur_menu = $menu_lang.outerHeight();
49
50                                $(window).scroll(function () {
51                                        var offset = $form.offset(),
52                                                limite_multilang = offset.top,
53                                                limite_bas = limite_multilang + $form.height() - $form.find(".boutons").height(),
54                                                pos_bas = $menu_lang.offset().top + hauteur_menu;
55
56                                        if (($(window).scrollTop() >= limite_multilang) && (pos_bas <= limite_bas) && ($(window).scrollTop() < limite_bas)) {
57                                                if (!$menu_lang.hasClass("menu_multilang_flottant")) {
58                                                        $menu_lang.addClass("menu_multilang_flottant");
59                                                }
60                                                var menu_lang_width = $menu_lang.outerWidth();
61                                                $menu_lang.css({
62                                                        "position": "fixed",
63                                                        "top": 0,
64                                                        "width": menu_lang_width + "px",
65                                                        "z-index": "1001"
66                                                });
67                                                // Un padding sur la parent
68                                                $form.css({'padding-top': hauteur_menu + 'px'});
69                                        }
70                                        if (($(window).scrollTop() < limite_multilang) || (pos_bas > limite_bas)) {
71                                                $menu_lang.removeClass("menu_multilang_flottant").css({
72                                                        "position": "static",
73                                                        "width": "auto"
74                                                });
75                                                $form.css({'padding-top': ''});
76                                        }
77                                });
78                        });
79                }
80        }
81
82        multilang_init();
83        if (typeof onAjaxLoad == "function") {
84                onAjaxLoad(multilang_init);
85        }
86});
87
88</BOUCLE_activer>
89#FILTRE{trim}
Note: See TracBrowser for help on using the repository browser.