[PLUGINS] ~maj globale
[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 $root[] .= 'div.formulaire_editer_'.$conf;
30 }
31 unset($config[$conf]);
32 }
33 }
34 // Appel de multilang_init_lang si
35 // - document.ready
36 // - onAjaxLoad (cas des docs et de la configuration du site)
37 if (is_array($langues_config = lire_config('multilang/langues_utilisees', 'aucune')) && count($langues_config) > 0) {
38 $langues = array_intersect($langues, $langues_config);
39 }
40 $langues_ltr = array();
41 foreach ($langues as $langue) {
42 $langues_ltr[$langue] = lang_dir($langue);
43 }
44 $data = '
45 var multilang_avail_langs = "'.implode(',', $langues).'".split(\',\'),
46 multilang_dir_langs = '.json_encode($langues_ltr).',
47 multilang_def_lang = "'.$GLOBALS['meta']['langue_site'].'",
48 multilang_lang_courante = "'.$GLOBALS['spip_lang'].'",
49 multilang_dir_plugin = "'._DIR_PLUGIN_MULTILANG.'";
50
51 // On trie les langues. Langue de l environnement en premier,
52 // puis langue principale du site puis les autres en ordre alphabetique
53 // Un utilisateur de langue anglaise souhaite logiquement traduire en anglais
54 multilang_avail_langs = jQuery.grep(multilang_avail_langs, function(value) {
55 return (value != multilang_def_lang && value != multilang_lang_courante);
56 });
57 multilang_avail_langs.sort();
58 multilang_avail_langs.unshift(multilang_lang_courante);
59 if(multilang_lang_courante!=multilang_def_lang) multilang_avail_langs.unshift(multilang_def_lang);
60
61 jQuery(document).ready(function(){
62 function multilang_init(){
63 var root = "'.implode(',', $root).'";
64 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";
65 // on exclue aussi les form d upload (Pour les vignettes de docs, logos...)
66 var forms_selector = "form[class!=\'form_upload\'][class!=\'form_upload_icon\']";
67 // Les div qui ont un formulaire de classe multilang (pour accélérer la recherche dans le DOM,
68 // on passe le form et le parent sera trouvé dans lors de l\'init)
69 var root_opt = "form:has(.multilang)";
70 var fields_selector_opt = ".multilang";
71 multilang_init_lang({fields:fields_selector,fields_opt:fields_selector_opt,root:root,root_opt:root_opt,forms:forms_selector});
72
73 if($(".menu_multilang").length > 0){
74 $(".menu_multilang").each(function(){
75 var menu_lang = $(this);
76 $(window).scroll(function() {
77 var offset = menu_lang.parents("form").offset(),
78 limite_multilang = offset.top;
79 limite_bas = limite_multilang+menu_lang.parents("form").height()-menu_lang.parents("form").find(".boutons").height(),
80 pos_bas = menu_lang.offset().top+menu_lang.height();
81 if(($(window).scrollTop() >= limite_multilang) && (pos_bas <= limite_bas) && ($(window).scrollTop() < limite_bas)){
82 if(!menu_lang.hasClass("menu_lang_flottant")) {
83 menu_lang.addClass("menu_lang_flottant");
84 }
85 var menu_lang_width = menu_lang.width();
86 menu_lang.css({"position": "fixed", "top": 0, "width": menu_lang_width+"px","z-index":"1001"});
87 }
88 if(($(window).scrollTop() < limite_multilang)||(pos_bas > limite_bas) )
89 menu_lang.removeClass("menu_lang_flottant").css({"position": "static", "width": "auto"});
90 });
91 });
92 }
93 }
94 multilang_init();
95 if(typeof onAjaxLoad == "function") onAjaxLoad(multilang_init);
96 });
97 ';
98 }
99 return $data;
100 }