source: spip-zone/_plugins_/multilang/trunk/alire.txt @ 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.6 KB
Line 
1
2Tous les champs input:text et textarea sauf ceux des forms .form_upload et .form_upload_icon sont traites dans :
3- articles
4- rubriques
5- configuration du site
6- auteurs (interessant uniquement pour le champs BIO)
7- documents dans les colonnes de gauche des pages d'edition d'articles et de rubriques
8- documents dans les parties basses des pages de presentation des articles et rubriques
9- groupe de mots cles
10- mots cles
11- sites
12- Breves
13
14
15A faire :
16- F&T : pb de doublon avec forms_lang.js
17- Integration avec Porte-Plume : quand on change de langue, la previsu "Voir" ne bascule pas
18
19- Suggestion de RastaPopoulos : J'avais une idée supplémentaire pour que ce soit extensible : activer également ce système sur tous les champs ayant une classe "multilang". Fait, a tester avec class "multilang"
20
21Trucs a regler :
221.-------------
23Avec Mediatheque, l'init est rappelee grace au onAjaxLoad. Et affiche bien le menu lang dans la modale. Mais un 2e menu est aussi rajoute dans le doc principal sous la modale de mediatheque... De meme quand on ferme la modale, on repasse par l'init... Et on se retrouve avec un 3e menu. J'ai donc interdit la creation d'un menu s'il en existe deja un dans la div :
24fct forms_init_multi :
25                if(!container.find('.menu_lang').size())
26                        container.prepend("<div class='menu_lang'>");
27et supprime le test de la fonction d'init (qui est un peu bourrin de toute facon):
28        //if(multilang_root.find('.menu_lang').length > 0) return;
29
30Premier bug : Dans une page d'edition article ou rubrique, si on modifie le doc + enregistrer le doc, PUIS enregistrer l'article (ou la rubrique) on passe 2 fois dans le submit et les champs ont la structure multi en double
31
32Solution :
33function forms_attach_submit() {
34        if($(this).parents('.ajax').size() && $(this).find('input[name=var_ajax]')){
35                $(this).on('form-pre-serialize',forms_multi_submit);
36        }else{
37                var oldsubmit = this.onsubmit;
38                this.onsubmit = "";
39                if(oldsubmit && oldsubmit != "")
40                        $(this).submit(function(){forms_multi_submit.apply(this);return oldsubmit.apply(this);})
41                else
42                        if(oldsubmit != "")$(this).submit(forms_multi_submit);
43        }
44}
45Ca marche mais je ne pige pas bien...  En fait quand on charge la page d'edition, le this.onsubmit est undefined et on rajoute une action sur le submit : forms_multi_submit . Lors du 2e passage (onAjaxLoad), le this.onsubmit vaut "" et on rajoutait une 2e fois le forms_multi_submit... Mais pourquoi une chaine vide ?
46
47Avec ou sans mediatheque, donc maintenant ca fonctionne
48
492.---------------
50Dans le pipeline, j'ai rajoute un 2e passage par l'init pour la suggestion de Rasta :
51forms_selector = $(".multilang").parents("form")
52multilang_init_lang({fields:".multilang",forms:forms_selector});
53du coup, y'a pas de root de defini, donc le multilang agit sur tout le document
54
55Effet, le le menu lang s'affiche bien, mais ne fonctionne plus
56
57En fait faut pas passer 2 fois dans la fonction d'init. Ce n'est pas prevu pour. Donc faut tout integrer en un appel :
58
59        jQuery(document).ready(function(){
60                function multilang_init(){
61                        root = "'.$root.'" ;
62                        fields_selector = "textarea,input:text:not(input#id_parent,input.password,input#new_login,#titreparent,*.nomulti),.multilang" ;
63                        forms_selector = ".multilang:parent,form[class!=\'form_upload\'][class!=\'form_upload_icon\']" ;
64                        multilang_init_lang({fields:fields_selector,root:root,forms:forms_selector});
65                }
66                multilang_init();
67                if(typeof onAjaxLoad == "function") onAjaxLoad(multilang_init);
68        });
69
70Bon donc ca marche toujours avec ou sans mediatheque... Reste plus qu'a tester avec un plugin qui veut du multilang
Note: See TracBrowser for help on using the repository browser.