[spip-dev] Special Hacker JavaScript

Bonsoir à tous,

Ayant besoin d'appliquer les mini-boutons des iframe pour des tables SQL auxiliaires,
j'ai réécrit les fonctions JavaScript de inc_presentation.
En particulier, les fonctions selec_statut_breve et selec_statut_art ont été fondues
en une seule, selec_statut, prenant en argument le nom de la table.
D'autres fonctions JS ont aussi changé de signatures pour n'avoir plus besoin d'interpoler du PHP,
ce qui a permis de les mettre dans un fichier à part, presentation.js, mettable en cache par les navigateurs
(le gros inc_presentation a maigri de 5% c'est toujours ça).

Tout ça est transparent, sauf pour ceux qui avaient les mêmes besoins que moi sur ce point.

A+

      Emmanuel

Hello,
Ca c'est nickel !

Dans le meme esprit, j'en profite pour revenir sur les mots clés, qui
pourraient profiter aussi d'un appel à formulaire_mots un peu plus generique
et se passer du gros if au debut (et rapidement de l'autre un peu plus bas
pour créer le mot clé associé mais ca necessite une modif dans mot_edit).
En attendant que la structure soit arrétée, je suppose qu'il vaut mieux
eviter de s'appuyer sur $table_primary pour savoir quelle clé utilisée, mais
à terme, on devrait pouvoir s'appuyer sur la structure déclarée pour
recuperer la table et sa clé primaire à partir du type d'objet.
Je te propose donc d'ajouter simplement $url_base dans passage des
parametres (qui, à mon sens, doit etre vraiment un parametre indépendant) et
de s'appuyer sur la convention de nommage en attendant de pouvoir travailler
avec des strucutres plus souples(ce qui laisse quand meme un if pour traiter
l'exception "syndic" ) :

formulaire_mots($objet, $id_objet, $nouv_mot, $supp_mot, $cherche_mot,
$flag_editable, $url_base) {
global $flag_mots_ressemblants;
global $connect_statut, $options;
global $spip_lang_rtl, $spip_lang_right;

$select_groupe = $GLOBALS['select_groupe'];

if ($objet == 'syndic') {
  $table = $objet ;
}
else {
  $table = $objet.'s';
}
  $id_table = 'id_'.$objet;
$query = "SELECT mots.* FROM spip_mots AS mots, spip_mots_$table AS lien
WHERE lien.$id_table=$id_objet AND mots.id_mot=lien.id_mot";
...

L'appel dans articles.php3 devrient donc :
if ($options == 'avancees' AND $articles_mots != 'non') {
formulaire_mots('article', $id_article, $nouv_mot, $supp_mot, $cherche_mot,
$flag_editable,'articles.php3?id_article=$id_article');
}

Voila, c'est pas totalement generique, mais l'appel de la fonction ne
devrait alors plus bouger par la suite puisque nous avons tous les elements
sous la main.
Si ca vous interesse, je peux faire le reste de modifs necessaire

bah non, ca fait du boulot en plus: le bout du code dont tu parles devra être fait à terme par un squelette,
tandis que ma petite modif consistait à isoler du JavaScript, qui à terme sera référencé dans un squelette.

      Emmanuel