Ejemplo n.º 1
0
function crayons_json_encode($v)
{
    if ($GLOBALS['meta']['charset'] == 'utf-8' and function_exists('json_encode')) {
        return json_encode($v);
    }
    $v = crayons_var2js($v);
    if ($GLOBALS['meta']['charset'] != 'utf-8') {
        include_spip('inc/charsets');
        $v = charset2unicode($v);
    }
    return $v;
}
/**
 * Ajoute les scripts css et js nécessaires aux crayons dans le code HTML
 *
 * @uses crayons_var2js()
 *
 * @param string $page
 *     Code HTML de la page complète ou du header seulement
 * @param string $droits
 *     - Liste de css définissant les champs crayonnables
 *       (séparés par virgule) dont l'édition est autorisée
 *     - "*" si tous sont autorisés
 * @param array $wdgcfg
 *     Description de la configuration des crayons (attribut => valeur)
 * @param string $mode
 *     - page : toute la page est présente dans `$page`
 *     - head : seul le header est présent dans `$page`
 * @return
**/
function &Crayons_preparer_page(&$page, $droits, $wdgcfg = array(), $mode = 'page')
{
    /**
     * Si pas forcer_lang, on charge le contrôleur dans la langue que l'utilisateur a dans le privé
     */
    if (!isset($GLOBALS['forcer_lang']) or !$GLOBALS['forcer_lang'] or $GLOBALS['forcer_lang'] === 'non') {
        lang_select($GLOBALS['auteur_session']['lang']);
    }
    $jsFile = generer_url_public('crayons.js');
    if (_DEBUG_CRAYONS) {
        $jsFile = parametre_url($jsFile, 'debug_crayons', 1, '&');
    }
    include_spip('inc/filtres');
    // rien que pour direction_css() :(
    $cssFile = direction_css(find_in_path('crayons.css'));
    $config = crayons_var2js(array('imgPath' => dirname(find_in_path('images/crayon.png')), 'droits' => $droits, 'dir_racine' => _DIR_RACINE, 'self' => self('&'), 'txt' => array('error' => _U('crayons:svp_copier_coller'), 'sauvegarder' => $wdgcfg['msgAbandon'] ? _U('crayons:sauvegarder') : ''), 'img' => array('searching' => array('txt' => _U('crayons:veuillez_patienter')), 'crayon' => array('txt' => _U('crayons:editer')), 'edit' => array('txt' => _U('crayons:editer_tout')), 'img-changed' => array('txt' => _U('crayons:deja_modifie'))), 'cfg' => $wdgcfg));
    // Est-ce que PortePlume est la ?
    $meta_crayon = isset($GLOBALS['meta']['crayons']) ? unserialize($GLOBALS['meta']['crayons']) : array();
    $pp = '';
    if (isset($meta_crayon['barretypo']) && $meta_crayon['barretypo']) {
        if (function_exists('chercher_filtre') and $f = chercher_filtre('info_plugin') and $f('PORTE_PLUME', 'est_actif')) {
            $pp = <<<EOF
cQuery(function() {
\tif (typeof onAjaxLoad == 'function') {
\t\tfunction barrebouilles_crayons() {
\t\t\t\$('.formulaire_crayon textarea.crayon-active')
\t\t\t.barre_outils('edition');
\t\t}
\t\tonAjaxLoad(barrebouilles_crayons);
\t}
});
EOF;
        }
    }
    $incCSS = "<link rel=\"stylesheet\" href=\"{$cssFile}\" type=\"text/css\" media=\"all\" />";
    $incJS = <<<EOH
<script type="text/javascript">/* <![CDATA[ */
var configCrayons;
function startCrayons() {
\tconfigCrayons = new cQuery.prototype.cfgCrayons({$config});
\tcQuery.fn.crayonsstart();
{$pp}
}
var cr = document.createElement('script');
cr.type = 'text/javascript'; cr.async = true;
cr.src = '{$jsFile}&callback=startCrayons';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(cr, s);
/* ]]> */</script>

EOH;
    if ($mode == 'head') {
        //js inline avant les css, sinon ca bloque le chargement
        $page = $page . $incJS . $incCSS;
        return $page;
    }
    $pos_head = strpos($page, '</head>');
    if ($pos_head === false) {
        return $page;
    }
    // js inline avant la premiere css, ou sinon avant la fin du head
    $pos_link = strpos($page, '<link ');
    if (!$pos_link) {
        $pos_link = $pos_head;
    }
    $page = substr_replace($page, $incJS, $pos_link, 0);
    // css avant la fin du head
    $pos_head = strpos($page, '</head>');
    $page = substr_replace($page, $incCSS, $pos_head, 0);
    return $page;
}