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; }