/** * Retourne la définition de la barre markitup désignée. * (cette déclaration est au format json) * * Deux pipelines 'porte_plume_pre_charger' et 'porte_plume_charger' * permettent de récuperer l'objet de classe Barre_outil * avant son export en json pour modifier des elements. * * @pipeline_appel porte_plume_barre_pre_charger * Charge des nouveaux boutons au besoin * @pipeline_appel porte_plume_barre_charger * Affiche ou cache certains boutons * * @return string Déclaration json */ function porte_plume_creer_json_markitup() { // on recupere l'ensemble des barres d'outils connues include_spip('porte_plume_fonctions'); if (!($sets = barre_outils_liste())) { return null; } // 1) On initialise tous les jeux de barres $barres = array(); foreach ($sets as $set) { if ($barre = barre_outils_initialiser($set) and is_object($barre)) { $barres[$set] = $barre; } } // 2) Préchargement /** * Charger des nouveaux boutons au besoin * * @example * $barre = &$flux['spip']; * $barre->ajouterApres('bold',array(params)); * $barre->ajouterAvant('bold',array(params)); * * $bold = $barre->get('bold'); * $bold['id'] = 'bold2'; * $barre->ajouterApres('italic',$bold); * @pipeline_appel porte_plume_barre_pre_charger */ $barres = pipeline('porte_plume_barre_pre_charger', $barres); // 3) Chargement /** * Cacher ou afficher certains boutons au besoin * * @example * $barre = &$flux['spip']; * $barre->afficher('bold'); * $barre->cacher('bold'); * * $barre->cacherTout(); * $barre->afficher(array('bold','italic','header1')); * @pipeline_appel porte_plume_barre_charger */ $barres = pipeline('porte_plume_barre_charger', $barres); // 4 On crée les jsons $json = ""; foreach ($barres as $set => $barre) { $json .= $barre->creer_json(); } return $json; }
/** * Retourne la definition de la barre markitup designee. * (cette declaration est au format json) * * Deux pipelines 'porte_plume_pre_charger' et 'porte_plume_charger' * permettent de recuperer l'objet de classe Barre_outil * avant son export en json pour modifier des elements. * * @return string : declaration json */ function porte_plume_creer_json_markitup(){ // on recupere l'ensemble des barres d'outils connues include_spip('inc/barre_outils'); if (!$sets = barre_outils_liste()) { return null; } // 1 on initialise tous les jeux de barres $barres = array(); foreach($sets as $set) { if (($barre = barre_outils_initialiser($set)) AND is_object($barre)) $barres[$set] = $barre; } // 2 prechargement // charge des nouveaux boutons au besoin // exemples : // $barre = &$flux['spip']; // $barre->ajouterApres('bold',array(params)); // $barre->ajouterAvant('bold',array(params)); // // $bold = $barre->get('bold'); // $bold['id'] = 'bold2'; // $barre->ajouterApres('italic',$bold); $barres = pipeline('porte_plume_barre_pre_charger', $barres); // 3 chargement // permet de cacher ou afficher certains boutons au besoin // exemples : // $barre = &$flux['spip']; // $barre->afficher('bold'); // $barre->cacher('bold'); // // $barre->cacherTout(); // $barre->afficher(array('bold','italic','header1')); $barres = pipeline('porte_plume_barre_charger', $barres); // 4 on cree les jsons $json = ""; foreach($barres as $set=>$barre) { $json .= $barre->creer_json(); } return $json; }
/** * Cette fonction cree la css pour les images * des icones des barres d'outils * en s'appuyant sur la description des jeux de barres disponibles. * * elle cherche une fonction barre_outils_($barre)_icones pour chaque * barre et l'appelle si existe. * * @return string : declaration css des icones */ function barre_outils_css_icones(){ // recuperer la liste, extraire les icones $css = ""; // liste des barres if (!$barres = barre_outils_liste()) return null; // liste des classes css et leur correspondance avec une icone $classe2icone = array(); foreach ($barres as $barre) { include_spip('barre_outils/' . $barre); if ($f = charger_fonction($barre . '_icones', 'barre_outils', true)) { if (is_array($icones = $f())) { $classe2icone = array_merge($classe2icone, $icones); } } } // passer le tout dans un pipeline pour ceux qui ajoute de simples icones a des barres existantes $classe2icone = pipeline('porte_plume_lien_classe_vers_icone',$classe2icone); // passage en css foreach ($classe2icone as $n=>$i) { $pos=""; if (is_array($i)){ $pos = "background-position:".end($i); $i = reset($i); } $css .= "\n.markItUp .$n a b {background-image:url(".url_absolue(find_in_path("icones_barre/$i")).");$pos}"; } return $css; }
/** * Crée le code CSS pour les images des icones des barres d'outils * * S'appuie sur la description des jeux de barres disponibles et cherche * une fonction barre_outils_($barre)_icones pour chaque barre et * l'exécute si existe, attendant alors en retour un tableau de couples : * nom de l'outil => nom de l'image * * @pipeline_appel porte_plume_lien_classe_vers_icone * * @return string Déclaration CSS des icones */ function barre_outils_css_icones() { // recuperer la liste, extraire les icones $css = ""; // liste des barres if (!($barres = barre_outils_liste())) { return null; } // liste des classes css et leur correspondance avec une icone $classe2icone = array(); foreach ($barres as $barre) { include_spip('barre_outils/' . $barre); if ($f = charger_fonction($barre . '_icones', 'barre_outils', true)) { if (is_array($icones = $f())) { $classe2icone = array_merge($classe2icone, $icones); } } } /** * Permettre aux plugins d'étendre les icones connues du porte plume * * On passe la liste des icones connues au pipeline pour ceux qui * ajoutent de simples icones à des barres existantes * * @pipeline_appel porte_plume_lien_classe_vers_icone * @var array $classe2icone * Couples identifiant de bouton => nom de l'image (ou tableau) * Dans le cas d'un tableau, cela indique une sprite : (nom de l'image , position haut, position bas) * Exemple : 'outil_header1' => array('spt-v1.png','-10px -226px') */ $classe2icone = pipeline('porte_plume_lien_classe_vers_icone', $classe2icone); // passage en css foreach ($classe2icone as $n => $i) { $pos = ""; if (is_array($i)) { $pos = "background-position:" . end($i); $i = reset($i); } if (file_exists($i)) { $file = $i; } else { $file = find_in_path("icones_barre/{$i}"); } if ($file) { $css .= "\n.markItUp .{$n}>a>em {background-image:url(" . protocole_implicite(url_absolue($file)) . ");{$pos}}"; } } return $css; }
function cs_pp_liste_barres($outil=false) { global $metas_vars; include_spip('inc/barre_outils'); if (!$sets = barre_outils_liste()) return array(); if($outil) foreach($sets as $f=>$b) { $v = 'pp_'.$b.'_'.$outil; // par defaut le bouton est present dans toutes les barres if(isset($metas_vars[$v]) && !$metas_vars[$v]) unset($sets[$f]); } return $sets; }