diff --git a/includes/DeltaConverter.php b/includes/DeltaConverter.php index 2300d8d..296023a 100644 --- a/includes/DeltaConverter.php +++ b/includes/DeltaConverter.php @@ -2,13 +2,40 @@ class DeltaConverter { private static $blockAttrs = ['align', 'header', 'blockquote', 'code-block', 'list']; - private static $inlineAttrs = ['bold', 'italic', 'underline', 'color', 'background', 'link', 'font', 'script']; + private static $inlineAttrs = ['bold', 'italic', 'underline', 'strike', 'color', 'background', 'link', 'font', 'script']; public static function toHtml($content) { if (empty($content)) return ''; // Si le contenu est déjà en HTML if (is_string($content) && !self::isJson($content)) { + // Convertir les classes ql-align-* en styles d'alignement + $content = preg_replace_callback( + '/class="ql-align-(justify|center|right)"/', + function($matches) { + return 'style="text-align: ' . $matches[1] . ' !important"'; + }, + $content + ); + + // Convertir les classes ql-font-* en classes de police + $content = preg_replace_callback( + '/class="ql-font-(serif|monospace|sans-serif)"/', + function($matches) { + switch($matches[1]) { + case 'serif': + return 'class="font-serif"'; + case 'monospace': + return 'class="font-mono"'; + case 'sans-serif': + return 'class="font-sans"'; + default: + return ''; + } + }, + $content + ); + return self::cleanImageUrls($content); } @@ -37,10 +64,17 @@ class DeltaConverter { // Si c'est un saut de ligne, on finalise le bloc if ($text === "\n") { // Vérifier les attributs de bloc pour ce saut de ligne - foreach ($attrs as $key => $value) { - if (in_array($key, self::$blockAttrs)) { - $currentBlock['attrs'][$key] = $value; - } + if (!empty($attrs['align'])) { + $currentBlock['attrs']['text-align'] = $attrs['align']; + } + if (!empty($attrs['header'])) { + $currentBlock['attrs']['header'] = $attrs['header']; + } + if (!empty($attrs['blockquote'])) { + $currentBlock['attrs']['blockquote'] = true; + } + if (!empty($attrs['code-block'])) { + $currentBlock['attrs']['code-block'] = true; } // Finaliser le bloc courant @@ -111,16 +145,12 @@ class DeltaConverter { $tag = 'blockquote'; } elseif (!empty($block['attrs']['code-block'])) { $tag = 'pre'; + $classes[] = 'code-block'; } // Appliquer l'alignement au niveau du bloc - if (!empty($block['attrs']['align'])) { - $styles[] = "text-align: " . $block['attrs']['align'] . " !important"; - } - - // Appliquer la police au niveau du bloc si présente - if (!empty($block['attrs']['font'])) { - $classes[] = 'font-' . strtolower($block['attrs']['font']); + if (!empty($block['attrs']['text-align'])) { + $styles[] = "text-align: " . $block['attrs']['text-align'] . " !important"; } // Construire le contenu avec les attributs inline @@ -153,10 +183,10 @@ class DeltaConverter { // Construire les attributs HTML finaux $attributes = ''; if (!empty($styles)) { - $attributes .= ' style="' . implode('; ', $styles) . '"'; + $attributes .= ' style="' . implode('; ', array_unique($styles)) . '"'; } if (!empty($classes)) { - $attributes .= ' class="' . implode(' ', $classes) . '"'; + $attributes .= ' class="' . implode(' ', array_unique($classes)) . '"'; } return "<$tag$attributes>$content"; @@ -174,17 +204,30 @@ class DeltaConverter { if (!empty($attrs['underline'])) { $text = "$text"; } + if (!empty($attrs['strike'])) { + $text = "$text"; + } if (!empty($attrs['color'])) { - $text = "$text"; + $text = "$text"; } if (!empty($attrs['background'])) { - $text = "$text"; + $text = "$text"; } if (!empty($attrs['link'])) { $text = "$text"; } if (!empty($attrs['font'])) { - $text = "$text"; + switch($attrs['font']) { + case 'serif': + $text = "$text"; + break; + case 'monospace': + $text = "$text"; + break; + case 'sans-serif': + $text = "$text"; + break; + } } if (!empty($attrs['script'])) { if ($attrs['script'] === 'super') $text = "$text";