Changeset 110694 in spip-zone


Ignore:
Timestamp:
Jun 16, 2018, 3:51:59 PM (3 years ago)
Author:
eric@…
Message:

Mise au point de la demo.
Ca permet de se rendre compte que certains YAML existant sont un peu permissifs (saisies input et email).

Location:
_plugins_/yaml/trunk/demo
Files:
3 added
3 edited
1 moved

Legend:

Unmodified
Added
Removed
  • _plugins_/yaml/trunk/demo/test_libyaml.yaml

    r110497 r110694  
    2020BadHex: f0xf3
    2121Hex: 0xf3
    22 True: true
    23 False: false
     22#True: true
     23#False: false
    2424Zero: 0
    25 Null: NULL
     25#Null: NULL
    2626NotNull: 'null'
    2727NotTrue: 'y'
  • _plugins_/yaml/trunk/demo/yaml.html

    r110519 r110694  
    11#CACHE{0}
    2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="#LANG" lang="#LANG" dir="#LANG_DIR">
     2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">
     3<html xml:lang="#LANG" lang="#LANG" xmlns="http://www.w3.org/1999/xhtml">
     4<head>
     5        <meta http-equiv='Content-Type' content='text/html; charset=#CHARSET' />
     6        <title>YAML - Demo</title>
     7        [<link rel="stylesheet" href="(#CSS{demo/demo.css})" type="text/css" />]
     8        #INSERT_HEAD
     9</head>
    410
    511<body dir="#LANG_DIR">
    612<div id="container">
    7         #SET{librairies, #LISTE{sfyaml, symfony, spyc}}
    8         #SET{librairies, #GET{librairies}|ajouter_libyaml}
     13        <div id="header">
     14                <h1>
     15                        <img height="48" width="48" title="Plugin YAML" alt="Plugin YAML" src="#CHEMIN{yaml.png}"/>
     16                        PLUGIN YAML[&nbsp;((#PLUGIN{YAML, version}))]
     17                </h1>
     18        </div>
     19        #SET{menu_tests,
     20                #ARRAY{
     21                        demo, Fichier démo,
     22                        inclusion, Fichier avec inclusions,
     23                        noisette, Fichier de noisette,
     24                        saisie, Fichier de saisie,
     25                        formulaire, Fichier de formulaire
     26                }
     27        }
     28        #SET{menu_scans,
     29                #ARRAY{
     30                        noisettes, Toutes les noisettes disponibles,
     31                        saisies, Toutes les saisies disponibles
     32                }
     33        }
     34        #SET{menu_librairies,
     35                #ARRAY{
     36                        sfyaml, Symfony YAML v1,
     37                        symfony, Symfony YAML v4,
     38                        spyc, Spyc
     39                }
     40        }
     41        #SET{menu_librairies, #GET{menu_librairies}|ajouter_libyaml}
    942
    10         <h1>YAML DECODE : DEMO</h1>
    11         <BOUCLE_parse_demo(DATA) {source table, #GET{librairies}}>
    12                 #SET{fichier, demo/test_#VALEUR.yaml}
    13                 <h2>LIBRAIRIE : [(#VALEUR) - ][FICHIER : (#GET{fichier})]</h2>
    14                 [<p>(#CHEMIN{#GET{fichier}}|decoder_fichier_yaml{#ARRAY{library, #VALEUR, include, #EVAL{true}, show_error, #EVAL{true}}}|bel_env)</p>]
    15         </BOUCLE_parse_demo>
     43        [(#ENV{scan}|oui)
     44                #SET{test, ''}
     45                #SET{librairie, toutes}
     46        ]
     47        [(#ENV{scan}|non)
     48                #SET{test, #ENV{test, demo}}
     49                #SET{librairie, #ENV{librairie, toutes}}
     50        ]
     51        [(#GET{librairie}|=={toutes}|?{
     52                #SET{librairies, #GET{menu_librairies}|array_keys},
     53                #SET{librairies, #LISTE{#GET{librairie}}}
     54        })]
    1655
    17         <h1>YAML DECODE : INCLUSION</h1>
    18         #SET{fichier, demo/test_inclure.yaml}
    19         <BOUCLE_parse_inclure(DATA) {source table, #GET{librairies}}>
    20                 <h2>LIBRAIRIE : [(#VALEUR) - ][FICHIER : (#GET{fichier})]</h2>
    21                 [<p>(#CHEMIN{#GET{fichier}}|decoder_fichier_yaml{#ARRAY{library, #VALEUR, include, #EVAL{true}, show_error, #EVAL{true}}}|bel_env)</p>]
    22         </BOUCLE_parse_inclure>
    2356
    24         <h1>YAML DECODE : NOISETTE</h1>
    25         #SET{fichier, demo/test_noisette.yaml}
    26         <BOUCLE_parse_noisette(DATA) {source table, #GET{librairies}}>
    27                 <h2>LIBRAIRIE : [(#VALEUR) - ][FICHIER : (#GET{fichier})]</h2>
    28                 [<p>(#CHEMIN{#GET{fichier}}|decoder_fichier_yaml{#ARRAY{library, #VALEUR, include, #EVAL{true}, show_error, #EVAL{true}}}|bel_env)</p>]
    29         </BOUCLE_parse_noisette>
     57        <div id="wrapper">
     58                <div id="content">
     59                <BOUCLE_test_simple(CONDITION){si #GET{test}|array_key_exists{#GET{menu_tests}}|ou{#ENV{fichier}}}>
     60                        #SET{fichier, ''}
     61                        [(#GET{test}|=={demo}|non)
     62                                #SET{fichier, demo/test_#GET{test}.yaml}
     63                        ]
     64                        <INCLURE{fond=demo/inc-decode_test,
     65                                fichier=#ENV{fichier, #GET{fichier}},
     66                                librairies=#GET{librairies},
     67                                env} />
     68                </BOUCLE_test_simple>
    3069
    31         <h1>YAML DECODE : SAISIE</h1>
    32         #SET{fichier, demo/test_saisie.yaml}
    33         <BOUCLE_parse_saisie(DATA) {source table, #GET{librairies}}>
    34                 <h2>LIBRAIRIE : [(#VALEUR) - ][FICHIER : (#GET{fichier})]</h2>
    35                 [<p>(#CHEMIN{#GET{fichier}}|decoder_fichier_yaml{#ARRAY{library, #VALEUR, include, #EVAL{true}, show_error, #EVAL{true}}}|bel_env)</p>]
    36         </BOUCLE_parse_saisie>
     70                <BOUCLE_test_saisies(CONDITION){si (#ENV{scan}|=={saisies})}>
     71                        <h2 class="h2">YAML DECODE : TOUTES LES SAISIES DISPONIBLES</h2>
     72                        #SET{dossier, saisies/}
     73                        <INCLURE{fond=demo/inc-decode_scan,
     74                                dossier=#GET{dossier},
     75                                label=Saisies,
     76                                menu_librairies=#GET{menu_librairies},
     77                                env} />
     78                </BOUCLE_test_saisies>
    3779
    38         <h1>YAML DECODE : FORMULAIRE</h1>
    39         #SET{fichier, demo/test_formulaire.yaml}
    40         <BOUCLE_parse_formulaire(DATA) {source table, #GET{librairies}}>
    41                 <h2>LIBRAIRIE : [(#VALEUR) - ][FICHIER : (#GET{fichier})]</h2>
    42                 [<p>(#CHEMIN{#GET{fichier}}|decoder_fichier_yaml{#ARRAY{library, #VALEUR, include, #EVAL{true}, show_error, #EVAL{true}}}|bel_env)</p>]
    43         </BOUCLE_parse_formulaire>
     80                <BOUCLE_test_noisettes(CONDITION){si (#ENV{scan}|=={noisettes})}>
     81                        <h2 class="h2">YAML DECODE : TOUTES LES NOISETTES DISPONIBLES</h2>
     82                        #SET{dossier, noisettes/}
     83                        <INCLURE{fond=demo/inc-decode_scan,
     84                                dossier=#GET{dossier},
     85                                label=Noisettes,
     86                                menu_librairies=#GET{menu_librairies},
     87                                env} />
     88                </BOUCLE_test_noisettes>
     89                </div>
     90        </div>
    4491
     92        <div id="navigation">
     93                <div class="menu" id="tests">
     94                        <h2 class="h2">Décodage - Choisir un test simple</h2>
     95                        <p>Choisissez un test de lecture et décodage d'un fichier YAML unique représentatif</p>
     96                        <ul class="menu-items">
     97                        <BOUCLE_menu_tests(DATA) {source table, #GET{menu_tests}}>
     98                                [<li class="item">
     99                                (#SELF
     100                                        |parametre_url{test, #CLE}
     101                                        |parametre_url{scan, ''}
     102                                        |lien_ou_expose{
     103                                                [(#VALEUR)],
     104                                                [(#GET{test}|=={#CLE})]})
     105                                </li>]
     106                        </BOUCLE_menu_tests>
     107                        </ul>
     108                </div>
     109
     110                <div class="menu" id="scans">
     111                        <h2 class="h2">Décodage - Choisir un scan complet</h2>
     112                        <p>Choisissez un scan des fichiers YAML d'un type donné et une comparaison des tableaux obtenus pour chaque librairie</p>
     113                        <ul class="menu-items">
     114                        <BOUCLE_menu_scans(DATA) {source table, #GET{menu_scans}}>
     115                                [<li class="item">
     116                                (#SELF
     117                                        |parametre_url{scan, #CLE}
     118                                        |parametre_url{librairie, toutes}
     119                                        |parametre_url{test, ''}
     120                                        |lien_ou_expose{
     121                                                [(#VALEUR)],
     122                                                [(#ENV{scan}|=={#CLE})]})
     123                                </li>]
     124                        </BOUCLE_menu_scans>
     125                        </ul>
     126                </div>
     127
     128                <div class="menu" id="librairies">
     129                        <h2 class="h2">Librairies disponibles</h2>
     130                        <p>Choisissez une librairie pour appliquer le test uniquement à cette librairie ou choisissez "Toutes les librairies" pour boucler sur les librairies disponibles</p>
     131                        <ul class="menu-items">
     132                                [<li class="item">
     133                                (#SELF|parametre_url{librairie, ''}
     134                                        |lien_ou_expose{
     135                                                Toutes les librairies,
     136                                                [(#GET{librairie}|=={toutes})]})
     137                                </li>]
     138                        <BOUCLE_menu_libs(DATA) {source table, #GET{menu_librairies}}>
     139                                [<li class="item">
     140                                (#SELF|parametre_url{librairie, #CLE}
     141                                        |lien_ou_expose{
     142                                                [(#VALEUR)],
     143                                                [(#GET{librairie}|=={#CLE})]})
     144                                </li>]
     145                        </BOUCLE_menu_libs>
     146                        </ul>
     147                </div>
     148        </div>
     149
     150        <div id="extra">
     151        </div>
     152
     153        <div id="footer">
     154                <p>Pour aller plus loin:</p>
     155                <ul>
     156                        <li>
     157                                <a href="https://contrib.spip.net/Le-plugin-YAML-v2">
     158                                        <strong>SPIP-Contrib : Le plugin YAML v2</strong>
     159                                </a>
     160                        </li>
     161                        <li>
     162                                <a href="https://plugins.spip.net/yaml.html">
     163                                        <strong>Plugins SPIP : YAML</strong>
     164                                </a>
     165                        </li>
     166                </ul>
     167        </div>
    45168</div>
    46169</body>
  • _plugins_/yaml/trunk/demo/yaml_fonctions.php

    r110496 r110694  
    77
    88        if (function_exists('yaml_parse')) {
    9                 $librairies[] = 'libyaml';
     9                $librairies['libyaml'] = 'libYAML';
    1010        }
    1111
     
    2626}
    2727
    28 function decoder_fichier_yaml_avec_inclusions($filename, $options = array()) {
    29         $timestamp_debut = microtime(true);
     28function comparer_decodage($fichier, $libraries) {
    3029
    3130        include_spip('inc/yaml');
    32         $file = find_in_path($filename);
    33         $parsed = yaml_charger_inclusions(yaml_decode_file($file, $options));
    3431
    35         $timestamp_fin = microtime(true);
    36         $duree = $timestamp_fin - $timestamp_debut;
     32        $compared = array();
     33        $first = array();
    3734
    38         return array('lib' => sinon($options['library'], 'sfyaml'), 'duree' => $duree*1000, 'yaml' => $parsed);
     35        foreach ($libraries as $_library) {
     36                $parsed = yaml_decode_file($fichier, array('library' => $_library));
     37                if (!$compared) {
     38                        $first = $parsed;
     39                        $compared[$_library] = 'référence';
     40                } else {
     41                        $difference = array_diff_assoc_recursive($first, $parsed, $fichier);
     42                        $compared[$_library] = $difference ? bel_env($difference, true) : 'idem';
     43                }
     44        }
     45
     46        return $compared;
    3947}
     48
     49function array_diff_assoc_recursive($array1, $array2, $fichier) {
     50
     51    $difference = array();
     52
     53    foreach ($array1 as $_key => $_value) {
     54        if (is_array($_value)) {
     55            if (!isset($array2[$_key]) || !is_array($array2[$_key])) {
     56                $difference[$_key] = $_value;
     57            } else {
     58                $new_diff = array_diff_assoc_recursive($_value, $array2[$_key], $fichier);
     59                if (!empty($new_diff))
     60                    $difference[$_key] = $new_diff;
     61            }
     62        } elseif (!is_array($array2)) {
     63                echo $fichier, ' - ', $_key, ' - ', $_value, '<br />';
     64        } elseif (!array_key_exists($_key, $array2) || ($array2[$_key] !== $_value)) {
     65            $difference[$_key] = $_value;
     66        }
     67    }
     68
     69    return $difference;
     70}
Note: See TracChangeset for help on using the changeset viewer.