Changeset 10066 in spip-zone


Ignore:
Timestamp:
Mar 2, 2007, 3:58:22 PM (14 years ago)
Author:
patfr@…
Message:
  • version 0.2
  • ne sont desormais chargés *que* les .css ou .js correspondant aux jeux détectés (en partie publique uniquement)
  • meilleure détection des listes de mots, permettant notamment les chiffres sous la forme "7,2" (Xavier Ducros)
  • allègement, donc, de la config
  • pendu : meilleure gestion du javascript (privé/public)
  • devinettes : images/réponses à droite
  • qcm : ortho
Location:
_plugins_/_stable_/jeux
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/_stable_/jeux/inc/devinettes.php

    r9674 r10066  
    6666 $image = filtrer('image_flip_vertical', filtrer('image_flip_horizontal', $image));
    6767 if (function_exists('image_graver')) $image = filtrer('image_graver', $image);
     68 $image = inserer_attribut($image, 'align', 'right', false, true);
    6869 $image = aligner_droite(inserer_attribut($image, 'class', 'no_image_filtrer', false, true));
    6970 $texte = jeux_block_invisible($id, _T('jeux:reponse'), $image);
  • _plugins_/_stable_/jeux/inc/pendu.php

    r9571 r10066  
    4848        var T_fini=\""._T('pendu:fini').'";
    4949        var T_bravo="'._T('jeux:bravo').'";';
    50  $proposition = '<input class="pendu_deviner" type="button" readonly=\"readonly" value="" name="cache">';
     50 $proposition = '<input class="pendu_deviner" type="button" readonly=\"readonly" value="ABCDEF" name="cache">';
    5151 $reset = '<input class="pendu_reset" type="button" value="'._T('jeux:rejouer').'" onclick="pendu_init('.$indexJeux.')">';
    5252 $images = '';
     53 $path = _DIR_PLUGIN_JEUX.'img/pendu'.jeux_config('pendu').'/';
     54 $images_init = preg_split('/\s*,\s*/', jeux_config(1));
    5355 for($i=0; $i<=$nb_images-1; $i++)
    54         $images .= "<img class=\"no_image_filtrer image_pendu\" name=\"pict{$indexJeux}_$i\" src=\"\" />";
     56        $images .= "<img class=\"no_image_filtrer image_pendu\" name=\"pict{$indexJeux}_$i\" src=\"$path".$images_init[$i]."\" />";
    5557 $regles = jeux_config('regle')?'<p class="jeux_regle">'.definir_puce()._T('pendu:regle').'</p>' : '';
     58 $js = echappe_html("$js
     59        pendu_init($indexJeux);
     60// --></script>", 'JEUX');
     61 // scripts autorises ?
     62 if ((!_DIR_RESTREINT && $GLOBALS["filtrer_javascript"]!=1) || ($GLOBALS["filtrer_javascript"]==-1)) $js = _T('jeux:erreur_scripts');
     63 // les scripts etaient totalement interdits avant 1.92
     64 if ($GLOBALS['spip_version_code']<1.92) $js = _T('jeux:erreur_spip');
    5665 return '<table class="pendu" border=0><tr><td>'
    5766        . "<p align=\"center\">$images<br/>\n$proposition</p></td><td width=\"20\">&nbsp;</td><td valign=\"bottom\">\n" . affiche_un_clavier($indexJeux) . "<br/></td></tr><tr><td colspan=\"3\" align=\"right\">$reset</td></tr></table>\n"
    58         . $regles
    59         . echappe_html("$js
    60         pendu_init($indexJeux);
    61 // --></script>", 'JEUX');
     67        . $regles . $js;
    6268}
    6369
  • _plugins_/_stable_/jeux/inc/qcm.php

    r9621 r10066  
    141141}
    142142
    143 function qcm_affiche_la_question($indexJeux, $indexQCM, $corrigee, $gestionPoints) {
     143function qcm_affiche_la_question($indexJeux, $indexQCM, $corriger, $gestionPoints) {
    144144  global $qcms, $qcm_score;
    145145  if (!$qcms[$indexQCM]['nbpropositions'] || !$qcms[$indexQCM]['maxscore'])
     
    158158
    159159  $codeHTML = "<div class=\"jeux_question\">".definir_puce().$question.'</div>';
    160   if (!$corrigee){
     160  if (!$corriger){
    161161    // affichage sans correction :
    162162     $codeHTML.="\n<div class=\"qcm_proposition\">";
  • _plugins_/_stable_/jeux/jeux_config.php

    r8937 r10066  
    1616define('_JEUX_FIN', '</jeux>');
    1717define('_JEUX_POST', '@@JEUX_POST@@');
     18define('_JEUX_HEAD1', "\n<!-- CSS & JS JEUX -->\n");
     19define('_JEUX_HEAD2', "<!-- CSS & JS JEUX (AUTO) -->\n");
     20
    1821
    1922// separateurs utilisables a l'interieur des balises ci-dessus
     
    7780);
    7881
    79 // liste des css a placer dans le header public
    80 // dossier jeux/style/
    81 global $jeux_header_public;
    82 $jeux_header_public = array('jeux', 'qcm', 'mots_croises', 'sudoku', 'pendu');
    83 
    84 
    85 // liste des css a placer dans le header prive
    86 // dossier jeux/style/
    87 global $jeux_header_prive;
     82// liste manuelle des css ou js a placer dans le header prive
     83// ca peut toujours servir pour les controles...
     84// dossiers : jeux/style/ et jeux/javascript/
     85global $jeux_header_prive, $jeux_javascript_prive;
    8886$jeux_header_prive = array('jeux','qcm', 'mots_croises', 'sudoku', 'pendu');
    89 
    90 // liste des js a placer dans le header prive
    91 // dossier jeux/javascript/
    92 global $jeux_javascript;
    93 $jeux_javascript = array('layer', 'pendu', 'mots_croises');
     87$jeux_javascript_prive = array('layer', 'pendu', 'mots_croises');
    9488
    9589// Codes RGB des couleurs prédéfinies a utiliser pour certains parametres apres la balise [config]
  • _plugins_/_stable_/jeux/jeux_fonctions.php

    r7674 r10066  
    99// filtre qui evite d'afficher le resultat obtenu par certains plugins
    1010// grace aux espions : <!-- PLUGIN-DEBUT --> et <!-- PLUGIN-FIN -->
    11 // ou : <!-- PLUGIN-DEBUT-xx --> et <!-- PLUGIN-FIN-xx --> ou xx est un numero.
     11// ou : <!-- PLUGIN-DEBUT-#xxxx --> et <!-- PLUGIN-FIN-#xxxx --> ou xxxx est le numero d'identification du plugin.
    1212
    1313if (!function_exists("pas_de_plugin")) {       
    1414 function pas_de_plugin($texte){
    15                 return preg_replace(",<!--\s*PLUGIN-DEBUT(-[0-9]*)?\s*-->.*<!--\s*PLUGIN-FIN(-[0-9]*)?\s*-->,UimsS", '', $texte);
     15                return preg_replace(",<!--\s*PLUGIN-DEBUT(-#[0-9]*)?.*<!--\s*PLUGIN-FIN\\1?\s*-->,UimsS", '', $texte);
    1616 }
    1717}
  • _plugins_/_stable_/jeux/jeux_pipelines.php

    r9571 r10066  
    1212
    1313// tableau de parametres exploitables par les plugins
    14 global $jeux_config;
     14global $jeux_config, $jeux_liste;
    1515
    1616// fonction pre-traitement
    1717function jeux_pre($chaine, $indexJeux){
     18        global $jeux_liste;
    1819        if (strpos($chaine, _JEUX_DEBUT)===false || strpos($chaine, _JEUX_FIN)===false) return $chaine;
    1920       
     
    2324       
    2425        // ...et decoder le texte obtenu en fonction des signatures
    25         jeux_inclure_et_decoder($chaine, $indexJeux);
     26        $liste = jeux_inclure_et_decoder($chaine, $indexJeux);
     27        $jeux_liste = array_merge($jeux_liste, $liste);
    2628
    27         return $texteAvant.jeux_rem('PLUGIN-DEBUT', $indexJeux).$chaine
     29        return $texteAvant.jeux_rem('PLUGIN-DEBUT', $indexJeux, join('/', $liste)).$chaine
    2830                .jeux_rem('PLUGIN-FIN', $indexJeux).jeux_pre($texteApres, ++$indexJeux);
    2931}
     
    3133// fonction post-traitement
    3234function jeux_post($chaine){
    33 $chaine=echappe_retour($chaine, 'JEUX');
     35        $chaine=echappe_retour($chaine, 'JEUX');
    3436
    3537        $sep1 = '['._JEUX_POST.'|'; $sep2 = '@@]';
     
    4345        if (function_exists($fonc)) $chaine = $fonc($params[1], $params[2]);
    4446
    45 //      $chaine = "OK : {$params[0]} - {$params[1]} - {$regs[2]}";
    46        
    4747        return $texteAvant.$chaine.jeux_post($texteApres);
    4848}
     
    6262// pipeline pre_propre
    6363function jeux_pre_propre($texte) {
     64        // liste des jeux trouves
     65        global $jeux_liste;
     66        $jeux_liste = array();
    6467        // s'il n'est pas present dans un formulaire envoye,
    65         // l'identifiant du jeu est choisi au hasard... ca peut servir dans le cas des signatures.
     68        // l'identifiant du jeu est choisi au hasard...
     69        // ca peut servir en cas d'affichage de plusieurs articles par page.
    6670        // en passant tous les jeux en ajax, ce ne sera plus la peine.
    6771        $GLOBALS['debut_index_jeux'] = isset($_POST['debut_index_jeux'])?$_POST['debut_index_jeux']:rand(1, 65000);
    68         return jeux_pre($texte, $GLOBALS['debut_index_jeux']);
     72        $texte = jeux_pre($texte, $GLOBALS['debut_index_jeux']);
     73        $jeux_liste = array_unique($jeux_liste);
     74        $header='';
     75        foreach($jeux_liste as $jeu) $header .= jeux_stylesheet($jeu) . "\n";
     76        foreach($jeux_liste as $jeu) $header .= jeux_javascript($jeu) . "\n";
     77        $header = htmlentities(preg_replace(",\n+,", "||", trim($header)));
     78        return (count($jeux_liste)?jeux_rem('JEUX-HEAD', count($jeux_liste), $header):'') . $texte;
    6979}
    7080
     
    7686// pipeline header_prive
    7787function jeux_header_prive($flux){
    78         global $jeux_header_prive, $jeux_javascript;
    79         foreach($jeux_header_prive as $s) $flux .= jeux_stylesheet_public($s);
    80         foreach($jeux_javascript as $s) $flux .= jeux_javascript($s);
     88        global $jeux_header_prive, $jeux_javascript_prive;
     89        $flux .= _JEUX_HEAD1;
     90        foreach($jeux_header_prive as $s) $flux .= jeux_stylesheet($s);
     91        foreach($jeux_javascript_prive as $s) $flux .= jeux_javascript($s);
    8192        return $flux;
    8293}
     
    8495// pipeline insert_head
    8596function jeux_insert_head($flux){
    86         global $jeux_header_public, $jeux_javascript;
    87         $flux .= "<!-- CSS & JS JEUX -->\n";
    88         foreach($jeux_header_public as $s) $flux .= jeux_stylesheet_public($s);
    89         foreach($jeux_javascript as $s) $flux .= jeux_javascript($s);
    90         return $flux;
     97        return $flux . _JEUX_HEAD1 . jeux_stylesheet('jeux') . jeux_javascript('layer') . _JEUX_HEAD2;
    9198}
    9299
    93100// pipeline affiche_gauche
    94101function jeux_affiche_gauche($flux) {
     102// correction d'un bug d'affichage
    95103if ($GLOBALS['spip_version_code']<1.92) $flux['data'] .="<script type=\"text/javascript\"><!--
    96104document.getElementById('haut-page').childNodes[2].align='center';
     
    99107}
    100108
     109// Le pipeline affichage_final, execute a chaque hit sur toute la page
     110function jeux_affichage_final($flux) {
     111        preg_match_all(",<!-- JEUX-HEAD-#[0-9]+ '([^>]*)' -->,", $flux, $matches, PREG_SET_ORDER);
     112        $liste = array();
     113        foreach ($matches as $val) $liste = array_merge($liste, explode('||', $val[1]));
     114        $liste = array_unique($liste);
     115        $header = html_entity_decode(join("\n",$liste));
     116        $flux = str_replace(_JEUX_HEAD2, _JEUX_HEAD2 . $header, $flux);
     117        return $flux;
     118}
     119
     120
    101121?>
  • _plugins_/_stable_/jeux/jeux_utils.php

    r9571 r10066  
    8080function jeux_liste_mots($texte) {
    8181        $texte = filtrer_entites(trim($texte));
    82         $texte = preg_replace("/[,;\.\|\s\t\n\r]+/", " ", $texte);
    83         $split = split('"', $texte);
     82        $split = explode('"', $texte);
    8483        $c = count($split);
    85         for($i=0; $i<$c; $i++) if ($i & 1) $split[$i] = str_replace(' ','+', $split[$i]);
    86         $texte = join('', $split);
    87         $texte = str_replace(" ","\t", $texte);
    88         $texte = str_replace("+"," ", $texte);
    89         return array_unique(split("\t", trim($texte)));
     84        $split2 = array();
     85        for($i=0; $i<$c; $i++) if (($s = trim($split[$i])) != ""){
     86                if (($i & 1) && ($i != $c-1)) {
     87                        // on touche pas au texte entre deux ""
     88                        $split2[] = $s;
     89                } else {
     90                        // on rassemble tous les separateurs : ,;.|\s\t\n
     91                        $temp = preg_replace("/[,;\.\|\s\t\n\r]+/", "\t", $s);
     92                        $temp = str_replace("+"," ", $temp);
     93                        $split2 = array_merge($split2, explode("\t", $temp));
     94                }
     95        }
     96                return array_unique($split2);
    9097}
    9198function jeux_liste_mots_maj($texte) {
     
    114121
    115122// ajoute un module jeu a la bibliotheque
    116 function include_jeux($jeu, &$texte, $indexJeux) {
     123function jeux_include_jeu($jeu, &$texte, $indexJeux) {
    117124        $fonc = 'jeux_'.$jeu;
    118125        if (!function_exists($fonc)) include_spip('inc/'.$jeu);
     
    122129
    123130// inclut et decode les jeux, si le module inc/lejeu.php est present
     131// retourne la liste des jeux trouves
    124132function jeux_inclure_et_decoder(&$texte, $indexJeux) {
    125133        global $jeux_signatures;
     134        $liste = array();
    126135        foreach($jeux_signatures as $jeu=>$signatures) {
    127136                $ok = false;
    128137                foreach($signatures as $s) $ok |= (strpos($texte, "[$s]")!==false);
    129                 if ($ok) include_jeux($jeu, $texte, $indexJeux);
     138                if ($ok) {
     139                 jeux_include_jeu($jeu, $texte, $indexJeux);
     140                 $liste[]=$jeu;
     141                }
    130142        }
     143        return $liste;
    131144}
    132145
    133146// pour placer des commentaires
    134 function jeux_rem($rem, $index=false) {
    135  return code_echappement("\n<!-- ".$rem.($index!==false?'-#'.$index:'')." -->\n");
     147function jeux_rem($rem, $index=false, $jeu='') {
     148 return code_echappement("\n<!-- ".$rem.($index!==false?'-#'.$index:'').(strlen($jeu)?" '".$jeu."'":'')." -->\n");
    136149}
    137150
    138 // pour inserer un css en public
    139 function jeux_stylesheet_public($b) {
     151// pour inserer un css
     152function jeux_stylesheet($b) {
    140153 $f = find_in_path("styles/$b.css");
    141154 return $f?'<link rel="stylesheet" href="'.direction_css($f).'" type="text/css" media="projection, screen" />'."\n":'';
    142 }
    143 
    144 // pour inserer un css en prive
    145 function jeux_stylesheet_prive($b) {
    146  $f = find_in_path("styles/$b.css");
    147  return $f?'<link rel="stylesheet" href="'.$f.'" type="text/css" media="projection, screen" />'."\n":'';
    148 // return '<link rel="stylesheet" href="'._DIR_PLUGIN_JEUX."styles/$b.css\" type=\"text/css\" media=\"projection, screen\" />\n";
    149155}
    150156
  • _plugins_/_stable_/jeux/lang/jeux_en.php

    r8870 r10066  
    4545'erreur_taille_grille'  => "Error: invalid size",
    4646'erreur_syntaxe'        => "Syntax error",
     47'erreur_spip'   => "This Spip version is too old to play this game!",
     48'erreur_scripts'        => "Scripts not allowed: you can not play this game here!",
     49
    4750);
    4851
  • _plugins_/_stable_/jeux/lang/jeux_fr.php

    r8870 r10066  
    4545'erreur_taille_grille'  => "Erreur : taille invalide",
    4646'erreur_syntaxe'        => "Erreur de syntaxe",
     47'erreur_spip'   => "Cette version de Spip ne vous permet pas de jouer &agrave; ce jeu !",
     48'erreur_scripts'        => "Scripts d&eacute;sactiv&eacute;s : vous ne pouvez pas jouer &agrave; ce jeu ici !",
    4749
    4850);
  • _plugins_/_stable_/jeux/lang/jeux_it.php

    r8870 r10066  
    4444
    4545'erreur_taille_grille'  => "Errore: dimensioni errate",
    46 'erreur_syntaxe'        => "Errore di sintassi ",
     46'erreur_syntaxe'        => "Errore di sintassi",
     47'erreur_spip'   => "This Spip version is too old to play this game!",
     48'erreur_scripts'        => "Scripts not allowed: you can not play this game here!",
    4749
    4850);
  • _plugins_/_stable_/jeux/plugin.xml

    r9311 r10066  
    22        <nom>Des jeux dans vos articles</nom>
    33        <etat>test</etat>
    4         <version>0.1 pour Spip 1.9 minimum.</version>
     4        <version>0.2 pour Spip 1.9 minimum.</version>
    55        <icon>img/jeux-48.png</icon>
    66        <auteur>
     
    3131Ce plugin fonctionne de fa&ccedil;on optimale sur les squelettes disposant de la balise {{#INSERT_HEAD}} et peut &#233;galement &#234;tre test&#233; dans l'espace priv&#233;.
    3232
    33 _ Pour certains jeux, il n&#233;cessite l'activation du plugin {{jQuery}} pour les versions de spip {{1.9.1}} ou inf&#233;rieures.
     33_ Si vous avez une version de Spip inf&#233;rieure ou &#233;gale &#224; {{1.9.1}}, certains jeux n&#233;cessiteront l'activation du plugin [jQuery->http://files.spip.org/spip-zone/jqueryplugin.zip].
    3434_ Pour les jeux graphiques, il faut avoir les librairies {{GD}} install&#233;es sur votre server.
    35 _ Ce plugin est en &#233;volution, proc&#233;dez r&#233;guli&#232;rement &#224; vos mises &#224; jours.
     35_ Ce plugin est encore en &#233;volution, proc&#233;dez r&#233;guli&#232;rement &#224; vos mises &#224; jours.
    3636 
    37 {{Attention}} : afin d'&#233;viter les mauvaises surprises de pr&#233;sentation (sommaires, rubriques, backends, ...), pensez bien :
     37{{Important}} : afin d'&#233;viter les mauvaises surprises de pr&#233;sentation (sommaires, rubriques, backends, ...), pensez bien :
    3838
    39 -* soit &#224; placer une introduction dans votre article entre les balises &lt;intro&gt; et &lt;/intro&gt;
    40 -* soit &#224; remplir le descriptif de l'article.
     39-* soit &#224; placer une {{introduction}} dans votre article entre les balises &lt;intro&gt; et &lt;/intro&gt;
     40-* soit &#224; remplir le {{descriptif}} de l'article.
     41
     42Aide : [->http://www.spip-contrib.net/Des-jeux-dans-vos-articles]
    4143        </description>
    4244        <lien>[->http://www.spip-contrib.net/Des-jeux-dans-vos-articles]</lien> <!-- URI de documentation -->
     
    6971                <action>affiche_gauche</action>
    7072        </pipeline>
     73        <pipeline>
     74                <nom>affichage_final</nom>
     75                <inclure>jeux_pipelines.php</inclure>
     76                <action>affichage_final</action>
     77        </pipeline>     
    7178</plugin>
Note: See TracChangeset for help on using the changeset viewer.