[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins / multilang / javascript / multilang_init.js_fonctions.php
1 <?php
2
3 if (!defined('_ECRIRE_INC_VERSION')) {
4 return;
5 }
6
7 function generer_multilang_init() {
8 $data = '';
9 if (count($langues = explode(',', $GLOBALS['meta']['langues_multilingue'])) > 1) {
10 include_spip('inc/config');
11 $config = lire_config('multilang', array());
12 $root = array();
13 if (isset($config['multilang_public'])) {
14 unset($config['multilang_public']);
15 }
16 if (isset($config['multilang_crayons'])) {
17 unset($config['multilang_crayons']);
18 }
19 if (isset($config['siteconfig']) && $config['siteconfig']) {
20 $root[] = 'div#configurer-accueil,div.formulaire_configurer_identite' ; // Config Site
21 unset($config['siteconfig']);
22 }
23
24 foreach ($config as $conf => $val) {
25 if ($val == 'on') {
26 if ($conf == 'document') {
27 $root[] = 'div#portfolio_portfolio,div#portfolio_documents,div#liste_documents,div.formulaire_editer_document';
28 } else {
29 if ($conf == 'groupe_mots') {
30 $conf = 'groupe_mot'; // le nom du formulaire n’est pas le type !
31 }
32 $root[] .= 'div.formulaire_editer_'.$conf;
33 }
34 unset($config[$conf]);
35 }
36 }
37 // Appel de multilang_init_lang si
38 // - document.ready
39 // - onAjaxLoad (cas des docs et de la configuration du site)
40 if (is_array($langues_config = lire_config('multilang/langues_utilisees', 'aucune')) && count($langues_config) > 0) {
41 $langues = array_intersect($langues, $langues_config);
42 }
43 $langues_ltr = array();
44 foreach ($langues as $langue) {
45 $langues_ltr[$langue] = lang_dir($langue);
46 }
47 $data = '
48 var multilang_avail_langs = "'.implode(',', $langues).'".split(\',\'),
49 multilang_dir_langs = '.json_encode($langues_ltr).',
50 multilang_def_lang = "'.$GLOBALS['meta']['langue_site'].'",
51 multilang_lang_courante = "'.$GLOBALS['spip_lang'].'",
52 multilang_dir_plugin = "'._DIR_PLUGIN_MULTILANG.'";
53
54 // On trie les langues. Langue de l environnement en premier,
55 // puis langue principale du site puis les autres en ordre alphabetique
56 // Un utilisateur de langue anglaise souhaite logiquement traduire en anglais
57 multilang_avail_langs = jQuery.grep(multilang_avail_langs, function(value) {
58 return (value != multilang_def_lang && value != multilang_lang_courante);
59 });
60 multilang_avail_langs.sort();
61 multilang_avail_langs.unshift(multilang_lang_courante);
62 if(multilang_lang_courante!=multilang_def_lang) multilang_avail_langs.unshift(multilang_def_lang);
63
64 jQuery(function($){
65 function multilang_init(){
66 var root = "'.implode(',', $root).'";
67 var fields_selector = "textarea:not(textarea#adresses_secondaires,textarea#repetitions),input:text:not(input#new_login,input#email,#titreparent,input.date,input.heure,input#largeur,input#hauteur,.ac_input,#url_syndic,#url_auto,.rechercher_adresse input,#champ_geocoder,#champ_lat,#champ_lon,#champ_zoom,#places,*.nomulti),.multilang";
68 // on exclue aussi les form d upload (Pour les vignettes de docs, logos...)
69 var forms_selector = "form[class!=\'form_upload\'][class!=\'form_upload_icon\']";
70 // Les div qui ont un formulaire de classe multilang (pour accélérer la recherche dans le DOM,
71 // on passe le form et le parent sera trouvé dans lors de l\'init)
72 var root_opt = "form:has(.multilang)";
73 var fields_selector_opt = ".multilang";
74 multilang_init_lang({fields:fields_selector,fields_opt:fields_selector_opt,root:root,root_opt:root_opt,forms:forms_selector});
75
76 if($(".menu_multilang").length > 0){
77 $(".menu_multilang").each(function(){
78 var menu_lang = $(this);
79 $(window).scroll(function() {
80 var offset = menu_lang.parents("form").offset(),
81 limite_multilang = offset.top;
82 limite_bas = limite_multilang+menu_lang.parents("form").height()-menu_lang.parents("form").find(".boutons").height(),
83 pos_bas = menu_lang.offset().top+menu_lang.height();
84 if(($(window).scrollTop() >= limite_multilang) && (pos_bas <= limite_bas) && ($(window).scrollTop() < limite_bas)){
85 if(!menu_lang.hasClass("menu_lang_flottant")) {
86 menu_lang.addClass("menu_lang_flottant");
87 }
88 var menu_lang_width = menu_lang.width();
89 menu_lang.css({"position": "fixed", "top": 0, "width": menu_lang_width+"px","z-index":"1001"});
90 }
91 if(($(window).scrollTop() < limite_multilang)||(pos_bas > limite_bas) )
92 menu_lang.removeClass("menu_lang_flottant").css({"position": "static", "width": "auto"});
93 });
94 });
95 }
96 }
97 multilang_init();
98 if(typeof onAjaxLoad == "function") onAjaxLoad(multilang_init);
99 });
100 ';
101 }
102 return $data;
103 }