Explorar el Código

Feature #1282 - Agressive cleaning on the default css text that is inserted in the templates. Only needed for authors styles are left.

Ivan Tcholakov hace 14 años
padre
commit
b68c24df1f
Se han modificado 1 ficheros con 38 adiciones y 4 borrados
  1. 38 4
      main/inc/lib/fckeditor/fcktemplates.xml.php

+ 38 - 4
main/inc/lib/fckeditor/fcktemplates.xml.php

@@ -87,16 +87,50 @@ function loadCSS($css_name) {
     $template_css .= "\n".'body { background: #fff; } /* Resetting the background. */'."\n";
 
     // Removing system-specific styles and cleaning, see task #1282.
-    $regex = array(
+    $regex1 = array(
         '/\/\*(.+?)\*\//sm' => '',          // Removing comments.
         '/\r\n/m' => "\n",                  // New lines in Unix style.
-        '/\r/m' => "\n",                    // New lines in Unix style.
+        '/\r/m' => "\n"                     // New lines in Unix style.
+    );
+    $template_css = preg_replace(array_keys($regex1), $regex1, $template_css);
+    $template_css = preg_replace('/behavior[^;\{\}]*;/ism', '', $template_css);   // Removing behavior-definition, it is IE-specific.
+    $template_css_array = explode('}', $template_css);
+    if (!empty($template_css_array)) {
+        $deleters = array(
+            '/.*\#.*\{[^\}]*\}/sm',         // Removing css definitions bound to system secific elements (identified by id).
+            '/.*\..*\{[^\}]*\}/sm',         // Removing css definitions bound to classes, we assume them as system secific.
+            // Removing css definitions bound to intractive types of element that teachers most probably don't need.
+            '/.*input.*\{[^\}]*\}/ism',
+            '/.*textarea.*\{[^\}]*\}/ism',
+            '/.*select.*\{[^\}]*\}/ism',
+            '/.*form.*\{[^\}]*\}/ism',
+            '/.*button.*\{[^\}]*\}/ism'
+        );
+        foreach ($template_css_array as $key => & $css_definition) {
+            if (trim($css_definition) == '') {
+                unset($template_css_array[$key]);
+                continue;
+            }
+            $css_definition = trim($css_definition.'}');
+            foreach ($deleters as & $deleter) {
+                if (preg_match($deleter, $css_definition)) {
+                    unset($template_css_array[$key]);
+                }
+            }
+        }
+        $template_css = implode("\n\n", $template_css_array);
+    }
+    $regex2 = array(
         '/[ \t]*\n/m' => "\n",              // Removing trailing whitespace.
         '/\n{3,}/m' => "\n\n"               // Removing extra empty lines.
     );
-    $template_css = preg_replace(array_keys($regex), $regex, $template_css);
+    $template_css = preg_replace(array_keys($regex2), $regex2, $template_css);
+
+    if (trim($template_css) == '') {
+        return '';
+    }
 
-    return "\n".'<style type="text/css">'.$template_css.'</style>'."\n";
+    return "\n".'<style type="text/css">'."\n".$template_css."\n".'</style>'."\n";
 }
 
 /**