]> _ Git - bloomsburie.git/commitdiff
wait #7250 @1
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 17 Jan 2025 11:53:58 +0000 (12:53 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 17 Jan 2025 11:53:58 +0000 (12:53 +0100)
framework/application/configs/application.ini
framework/library/CubeIT/Util/Css/Compressor.php
less/recognition.less

index b4f7ccd04dfea56d5c70a5573be8dc88bba4aeeb..71645b0da3351d19f5f7d579f39ae05432f28aba 100644 (file)
@@ -64,5 +64,5 @@ locales.fr = fr.bloomsburie.dev2.cubedesigners.com
 
 seo.robots = false
 
-httpauth.username=bloomsburie
-httpauth.password=training2025
\ No newline at end of file
+httpauth.username = bloomsburie
+httpauth.password = training2025
\ No newline at end of file
index b54074d9a85dc42035e6004f2358cefed7e7965b..bec38e2d58c2cf9cd14382639f1a7a4f055642d4 100644 (file)
 <?php
 
-class CubeIT_Util_Css_Compressor {
-
-       /**
-        *
-        * @var Sabberworm\CSS\CSSList\Document
-        */
-       protected $_currentDoc;
-
-       /**
-        *
-        * @var Sabberworm\CSS\Rule\Rule
-        */
-       protected $_currentRule;
-
-       /**
-        *
-        * @var Sabberworm\CSS\Ruleset\DeclarationBlock
-        */
-       protected $_currentRuleset;
-
-       /**
-        *
-        * @var boolean
-        */
-       protected $_pie;
-
-       public function __construct() {
-               CubeIT_Util_PHP::neverStop();
-               CubeIT_Library::CSSParser();
-               $this->_pie = Bootstrap::getInstance()->getOpt('head.pie', false);
-       }
-
-       public function process($_files) {
-               $files = array();
-               $hash = '';
-               foreach ($_files as $c) {
-                       $f = PUBLIC_PATH . '/' . trim($c, "/");
-                       if (!file_exists($f)) {
-                               continue;
-                       }
-                       $files[] = $f;
-                       $hash .= $f;
-               }
-
-               if (!count($files)) {
-                       return;
-               }
-
-               $furl = '/css/min/' . substr(sha1($hash), 0, 8) . '.css';
-               $final = PUBLIC_PATH . $furl;
-
-               if (file_exists($final)) {
-                       $reload = false;
-                       $finalmtime = filemtime($final);
-                       foreach ($files as $f) {
-                               if (filemtime($f) > $finalmtime) {
-                                       $reload = true;
-                                       break;
-                               }
-                       }
-               } else {
-                       $reload = true;
-               }
-
-               if (!$reload && filemtime(__FILE__) > $finalmtime) {
-                       $reload = true;
-               }
-
-               if ($reload) {
-                       $css = '';
-                       $d = dirname($final);
-                       $fdir = realpath($d);
-                       if (!file_exists($d)) {
-                               mkdir($d, 0777, true);
-                       }
-                       foreach ($files as $f) {
-                               $css .= $this->_processCSS($f, $fdir) . "\n";
-                       }
-
-                       file_put_contents($final, $css);
-
-                       $finalmtime = time();
-               }
-
-               return $furl;
-       }
-
-       protected function _processCSS($file, $finalDir) {
-               $dir = realpath(dirname($file));
-
-               $content = file_get_contents($file);
-
-               $cacheId = 'css_compressor_' . sha1($content) . '_' . filemtime(__FILE__) . '_' . $this->_pie;
-               $cache = Bootstrap::getInstance()->getCoreCache();
-
-               if (($res = $cache->load($cacheId)) === false) {
-
-                       $parser = new Sabberworm\CSS\Parser($content);
-                       $this->_currentDoc = $parser->parse();
-
-                       $pie = array('border-radius', 'box-shadow');
-
-                       foreach ($this->_currentDoc->getAllDeclarationBlocks() as $ruleset) {
-                               /* @var $ruleset Sabberworm\CSS\Ruleset\DeclarationBlock */
-                               $this->_currentRuleset = $ruleset;
-                               $addpie = false;
-
-                               foreach ($ruleset->getRules() as $rule) {
-                                       /* @var $rule Sabberworm\CSS\Rule\Rule */
-                                       $this->_correctURL($rule, $dir, $finalDir);
-                                       $this->_html5Rule($rule, $ruleset);
-
-                                       if ($this->_pie) {
-                                               if (in_array($rule->getRule(), $pie)) {
-                                                       $addpie = true;
-                                               }
-                                       }
-                               }
-
-                               if ($addpie) {
-                                       $r = new Sabberworm\CSS\Rule\Rule('behavior');
-                                       $r->setValue(new Sabberworm\CSS\Value\URL(new Sabberworm\CSS\Value\CSSString('/CubeIT/js/pie/PIE.htc')));
-                                       $ruleset->addRule($r);
-                               }
-                       }
-                       $res = $this->_currentDoc;
-                       $cache->save($res->render(), $cacheId, array('css'));
-               }
-               return $res;
-       }
-
-       /**
-        *
-        * @param Sabberworm\CSS\Rule\Rule $rule
-        * @param Sabberworm\CSS\RuleSet\RuleSet $ruleset
-        */
-       protected function _html5Rule($rule, $ruleset) {
-               $html5 = array('outline-radius', 'border-radius', 'box-shadow', 'text-shadow', 'box-sizing', 'user-select', 'touch-callout', 'transform', 'transition', 'appearance', 'filter');
-
-               $prefixs = array('moz', 'webkit', 'o', 'ms', 'khtml');
-               $rulename = $rule->getRule();
-               if ($rulename == 'background-image') {
-                       return $this->_fixGradients($rule, $ruleset);
-               } else if ($rulename == 'background-size') {
-                       $r = new Sabberworm\CSS\Rule\Rule('behavior');
-                       $r->setValue(new Sabberworm\CSS\Value\URL(new Sabberworm\CSS\Value\CSSString('/CubeIT/js/ie/backgroundsize.htc')));
-                       if ($this->_pie) {
-                               $ruleset->addRule($r);
-                       }
-               }
-               if (in_array($rulename, $html5)) {
-                       $ruleset->removeRule($rule);
-                       foreach ($prefixs as $p) {
-                               $clone = $this->_cloneRule($rule);
-                               $clone->setRule('-' . $p . '-' . $rulename);
-                               $ruleset->addRule($clone);
-                       }
-                       $ruleset->addRule($rule);
-               }
-       }
-
-       /**
-        *
-        * @param Sabberworm\CSS\Rule\Rule $rule
-        * @param Sabberworm\CSS\RuleSet\RuleSet $ruleset
-        */
-       protected function _fixGradients($rule, $ruleset) {
-               $value = $rule->getValue();
-
-               /* @var $liste Sabberworm\CSS\Value\RuleValueList */
-               if (!($value instanceof Sabberworm\CSS\Value\RuleValueList)) {
-                       $liste = new Sabberworm\CSS\Value\RuleValueList();
-                       $liste->addListComponent($value);
-               } else {
-                       $liste = $value;
-               }
-
-               $rule->setValue($liste);
-
-               $count = count($liste->getListComponents());
-               $gradients = array();
-
-               foreach ($liste->getListComponents() as $i => $v) {
-                       if ($v instanceof Sabberworm\CSS\Value\CSSFunction) {
-                               /* @var $v Sabberworm\CSS\Value\CSSFunction */
-                               $fname = $v->getName();
-                               if ($fname == 'linear-gradient') {
-                                       $gradients[$i] = new CubeIT_Util_Css_Gradient_Linear($v);
-                               } else if ($fname == 'radial-gradient') {
-                                       //$gradients[$i] = new CubeIT_Util_Css_Gradient_Radial($v);
-                               }
-                       }
-               }
-
-
-               if (!count($gradients)) {
-                       return;
-               }
-
-               $clones = array(
-                       'ie8' => $this->_cloneRule($rule),
-                       'ie9' => $this->_cloneRule($rule),
-                       'mozilla' => $this->_cloneRule($rule),
-                       'webkit' => $this->_cloneRule($rule),
-                       'opera' => $this->_cloneRule($rule),
-                       'w3c' => $rule,
-               );
-
-               foreach ($clones as $nav => $c) {
-                       /* @var $v Sabberworm\CSS\Value\RuleValueList */
-                       $v = $c->getValue()->getListComponents();
-                       $l = new Sabberworm\CSS\Value\RuleValueList();
-                       $components = array();
-                       for ($i = 0; $i < $count; $i++) {
-                               if (isset($gradients[$i])) {
-                                       $func = 'get' . ucfirst($nav);
-                                       $components[$i] = $gradients[$i]->$func();
-                               } else {
-                                       $components[$i] = $v[$i];
-                               }
-                       }
-                       $l->setListComponents($components);
-
-                       $c->setValue($l);
-                       $ruleset->addRule($c);
-               }
-       }
-
-       /**
-        *
-        * @param Sabberworm\CSS\Rule\Rule $rule
-        * @return Sabberworm\CSS\Rule\Rule
-        */
-       protected function _cloneRule($rule) {
-               return CubeIT_Util_Object::cloneObject($rule);
-       }
-
-       /**
-        *
-        * @param Sabberworm\CSS\RuleSet\DeclarationBlock $ruleset
-        * @param Boolean $withRules
-        * @return Sabberworm\CSS\RuleSet\DeclarationBlock Description
-        */
-       protected function _cloneDeclarationBlock($ruleset, $withRules = true) {
-               $ruleset = unserialize(serialize($ruleset));
-               if (!$withRules) {
-                       foreach ($ruleset->getRulesAssoc() as $rule) {
-                               $ruleset->removeRule($rule);
-                       }
-               }
-               return $ruleset;
-       }
-
-       protected function _correctURL($e, $odir, $fdir) {
-
-               if ($e instanceof Sabberworm\CSS\Rule\Rule) {
-                       $this->_currentRule = $e;
-                       $this->_correctURL($e->getValue(), $odir, $fdir);
-               } else if ($e instanceof Sabberworm\CSS\Value\ValueList) {
-                       foreach ($e->getListComponents() as $c) {
-                               $this->_correctURL($c, $odir, $fdir);
-                       }
-               } else if ($e instanceof Sabberworm\CSS\Value\URL) {
-                       /* @var $e Sabberworm\CSS\Value\URL */
-                       $url = trim($e->getURL(), '"\'');
-                       $absolute = $this->_isAbsolute($url);
-                       $local = $this->_isLocal($url);
-
-                       if ($absolute && !$local) {
-                               return;
-                       }
-
-                       $o = explode(DIRECTORY_SEPARATOR, $odir);
-                       $f = explode(DIRECTORY_SEPARATOR, $fdir);
-                       $l = min(count($o), count($f));
-
-                       for ($i = 0; $i < $l; $i++) {
-                               if ($o[$i] != $f[$i]) {
-                                       break;
-                               }
-                       }
-
-                       $o = array_slice($o, $i);
-                       $f = array_slice($f, $i);
-                       $backs = count($f);
-
-                       if ($absolute && $local) {
-                               $url = str_repeat('../', $backs) . ltrim($url, '/');
-                       }
-
-                       $o = array_reverse($o);
-                       $u = explode('/', $url);
-
-                       foreach ($o as $p) {
-                               array_unshift($u, $p);
-                       }
-                       for ($i = 0; $i < $backs; $i++) {
-                               array_unshift($u, '..');
-                       }
-
-                       $url = implode('/', $u);
-
-                       $svg = $this->_checkSVG($url);
-
-                       if (!$svg && $absolute) {
-                               return;
-                       }
-                       $e->setURL(new Sabberworm\CSS\Value\CSSString($url));
-               }
-       }
-
-       protected function _checkSVG($url) {
-               if (!stristr($url, '.svg')) {
-                       return false;
-               }
-
-               $file = PUBLIC_PATH . '/css/min/' . $url;
-
-               $raster = CubeIT_Image_SVG::rasterize($file);
-
-               $url = '../..' . $raster['url'];
-
-               $rule = $this->_cloneRule($this->_currentRule);
-               $rule->setValue(new Sabberworm\CSS\Value\URL(new Sabberworm\CSS\Value\CSSString($url)));
-
-               $ruleset = $this->_cloneDeclarationBlock($this->_currentRuleset, false);
-               $ruleset->addRule($rule);
-
-               $selectors = $ruleset->getSelectors();
-               $newSelectors = array();
-               foreach ($selectors as $s) {
-                       $newSelectors[] = '.no-svg ' . $s;
-               }
-               $ruleset->setSelectors($newSelectors);
-
-               $this->_currentDoc->append($ruleset);
-               return true;
-       }
-
-       protected function _isAbsolute($url) {
-               $e = parse_url($url);
-               if (isset($e['scheme'])) {
-                       return true;
-               }
-               if (substr($e['path'], 0, 1) == '/') {
-                       return true;
-               }
-
-               return false;
-       }
-
-       protected function _isLocal($url) {
-               $e = parse_url($url);
-               if (isset($e['scheme'])) {
-                       return false;
-               }
-               return true;
-       }
+class CubeIT_Util_Css_Compressor
+{
+
+    /**
+     *
+     * @var Sabberworm\CSS\CSSList\Document
+     */
+    protected $_currentDoc;
+
+    /**
+     *
+     * @var Sabberworm\CSS\Rule\Rule
+     */
+    protected $_currentRule;
+
+    /**
+     *
+     * @var Sabberworm\CSS\Ruleset\DeclarationBlock
+     */
+    protected $_currentRuleset;
+
+    /**
+     *
+     * @var boolean
+     */
+    protected $_pie;
+
+    public function __construct()
+    {
+        CubeIT_Util_PHP::neverStop();
+        CubeIT_Library::CSSParser();
+        $this->_pie = Bootstrap::getInstance()->getOpt('head.pie', false);
+    }
+
+    public function process($_files)
+    {
+        $files = array();
+        $hash = '';
+        foreach ($_files as $c) {
+            $f = PUBLIC_PATH . '/' . trim($c, "/");
+            if (!file_exists($f)) {
+                continue;
+            }
+            $files[] = $f;
+            $hash .= $f;
+        }
+
+        if (!count($files)) {
+            return;
+        }
+
+        $furl = '/css/min/' . substr(sha1($hash), 0, 8) . '.css';
+        $final = PUBLIC_PATH . $furl;
+
+        if (file_exists($final)) {
+            $reload = false;
+            $finalmtime = filemtime($final);
+            foreach ($files as $f) {
+                if (filemtime($f) > $finalmtime) {
+                    $reload = true;
+                    break;
+                }
+            }
+        } else {
+            $reload = true;
+        }
+
+        if (!$reload && filemtime(__FILE__) > $finalmtime) {
+            $reload = true;
+        }
+
+        if ($reload) {
+            $css = '';
+            $d = dirname($final);
+            $fdir = realpath($d);
+            if (!file_exists($d)) {
+                mkdir($d, 0777, true);
+            }
+            foreach ($files as $f) {
+                $css .= $this->_processCSS($f, $fdir) . "\n";
+            }
+            $css = str_replace("/application/css", "/css", $css);
+            $css = str_replace("application/css", "/css", $css);
+            $css = str_replace("/css/images/", "/images/", $css);
+            file_put_contents($final, $css);
+
+
+            $finalmtime = time();
+        }
+
+        return $furl;
+    }
+
+    protected function _processCSS($file, $finalDir)
+    {
+        $dir = realpath(dirname($file));
+
+        $content = file_get_contents($file);
+
+        $cacheId = 'css_compressor_' . sha1($content) . '_' . filemtime(__FILE__) . '_' . $this->_pie;
+        $cache = Bootstrap::getInstance()->getCoreCache();
+
+        if (($res = $cache->load($cacheId)) === false) {
+
+            $parser = new Sabberworm\CSS\Parser($content);
+            $this->_currentDoc = $parser->parse();
+
+            $pie = array('border-radius', 'box-shadow');
+
+            foreach ($this->_currentDoc->getAllDeclarationBlocks() as $ruleset) {
+                /* @var $ruleset Sabberworm\CSS\Ruleset\DeclarationBlock */
+                $this->_currentRuleset = $ruleset;
+                $addpie = false;
+
+                foreach ($ruleset->getRules() as $rule) {
+                    /* @var $rule Sabberworm\CSS\Rule\Rule */
+                    $this->_correctURL($rule, $dir, $finalDir);
+                    $this->_html5Rule($rule, $ruleset);
+
+                    if ($this->_pie) {
+                        if (in_array($rule->getRule(), $pie)) {
+                            $addpie = true;
+                        }
+                    }
+                }
+
+                if ($addpie) {
+                    $r = new Sabberworm\CSS\Rule\Rule('behavior');
+                    $r->setValue(new Sabberworm\CSS\Value\URL(new Sabberworm\CSS\Value\CSSString('/CubeIT/js/pie/PIE.htc')));
+                    $ruleset->addRule($r);
+                }
+            }
+            $res = $this->_currentDoc;
+            $cache->save($res->render(), $cacheId, array('css'));
+        }
+        return $res;
+    }
+
+    /**
+     *
+     * @param Sabberworm\CSS\Rule\Rule $rule
+     * @param Sabberworm\CSS\RuleSet\RuleSet $ruleset
+     */
+    protected function _html5Rule($rule, $ruleset)
+    {
+        $html5 = array('outline-radius', 'border-radius', 'box-shadow', 'text-shadow', 'box-sizing', 'user-select', 'touch-callout', 'transform', 'transition', 'appearance', 'filter');
+
+        $prefixs = array('moz', 'webkit', 'o', 'ms', 'khtml');
+        $rulename = $rule->getRule();
+        if ($rulename == 'background-image') {
+            return $this->_fixGradients($rule, $ruleset);
+        } else if ($rulename == 'background-size') {
+            $r = new Sabberworm\CSS\Rule\Rule('behavior');
+            $r->setValue(new Sabberworm\CSS\Value\URL(new Sabberworm\CSS\Value\CSSString('/CubeIT/js/ie/backgroundsize.htc')));
+            if ($this->_pie) {
+                $ruleset->addRule($r);
+            }
+        }
+        if (in_array($rulename, $html5)) {
+            $ruleset->removeRule($rule);
+            foreach ($prefixs as $p) {
+                $clone = $this->_cloneRule($rule);
+                $clone->setRule('-' . $p . '-' . $rulename);
+                $ruleset->addRule($clone);
+            }
+            $ruleset->addRule($rule);
+        }
+    }
+
+    /**
+     *
+     * @param Sabberworm\CSS\Rule\Rule $rule
+     * @param Sabberworm\CSS\RuleSet\RuleSet $ruleset
+     */
+    protected function _fixGradients($rule, $ruleset)
+    {
+        $value = $rule->getValue();
+
+        /* @var $liste Sabberworm\CSS\Value\RuleValueList */
+        if (!($value instanceof Sabberworm\CSS\Value\RuleValueList)) {
+            $liste = new Sabberworm\CSS\Value\RuleValueList();
+            $liste->addListComponent($value);
+        } else {
+            $liste = $value;
+        }
+
+        $rule->setValue($liste);
+
+        $count = count($liste->getListComponents());
+        $gradients = array();
+
+        foreach ($liste->getListComponents() as $i => $v) {
+            if ($v instanceof Sabberworm\CSS\Value\CSSFunction) {
+                /* @var $v Sabberworm\CSS\Value\CSSFunction */
+                $fname = $v->getName();
+                if ($fname == 'linear-gradient') {
+                    $gradients[$i] = new CubeIT_Util_Css_Gradient_Linear($v);
+                } else if ($fname == 'radial-gradient') {
+                    //$gradients[$i] = new CubeIT_Util_Css_Gradient_Radial($v);
+                }
+            }
+        }
+
+
+        if (!count($gradients)) {
+            return;
+        }
+
+        $clones = array(
+            'ie8' => $this->_cloneRule($rule),
+            'ie9' => $this->_cloneRule($rule),
+            'mozilla' => $this->_cloneRule($rule),
+            'webkit' => $this->_cloneRule($rule),
+            'opera' => $this->_cloneRule($rule),
+            'w3c' => $rule,
+        );
+
+        foreach ($clones as $nav => $c) {
+            /* @var $v Sabberworm\CSS\Value\RuleValueList */
+            $v = $c->getValue()->getListComponents();
+            $l = new Sabberworm\CSS\Value\RuleValueList();
+            $components = array();
+            for ($i = 0; $i < $count; $i++) {
+                if (isset($gradients[$i])) {
+                    $func = 'get' . ucfirst($nav);
+                    $components[$i] = $gradients[$i]->$func();
+                } else {
+                    $components[$i] = $v[$i];
+                }
+            }
+            $l->setListComponents($components);
+
+            $c->setValue($l);
+            $ruleset->addRule($c);
+        }
+    }
+
+    /**
+     *
+     * @param Sabberworm\CSS\Rule\Rule $rule
+     * @return Sabberworm\CSS\Rule\Rule
+     */
+    protected function _cloneRule($rule)
+    {
+        return CubeIT_Util_Object::cloneObject($rule);
+    }
+
+    /**
+     *
+     * @param Sabberworm\CSS\RuleSet\DeclarationBlock $ruleset
+     * @param Boolean $withRules
+     * @return Sabberworm\CSS\RuleSet\DeclarationBlock Description
+     */
+    protected function _cloneDeclarationBlock($ruleset, $withRules = true)
+    {
+        $ruleset = unserialize(serialize($ruleset));
+        if (!$withRules) {
+            foreach ($ruleset->getRulesAssoc() as $rule) {
+                $ruleset->removeRule($rule);
+            }
+        }
+        return $ruleset;
+    }
+
+    protected function _correctURL($e, $odir, $fdir)
+    {
+
+        if ($e instanceof Sabberworm\CSS\Rule\Rule) {
+            $this->_currentRule = $e;
+            $this->_correctURL($e->getValue(), $odir, $fdir);
+        } else if ($e instanceof Sabberworm\CSS\Value\ValueList) {
+            foreach ($e->getListComponents() as $c) {
+                $this->_correctURL($c, $odir, $fdir);
+            }
+        } else if ($e instanceof Sabberworm\CSS\Value\URL) {
+            /* @var $e Sabberworm\CSS\Value\URL */
+            $url = trim($e->getURL(), '"\'');
+            $absolute = $this->_isAbsolute($url);
+            $local = $this->_isLocal($url);
+
+            if ($absolute && !$local) {
+                return;
+            }
+
+            $o = explode(DIRECTORY_SEPARATOR, $odir);
+            $f = explode(DIRECTORY_SEPARATOR, $fdir);
+            $l = min(count($o), count($f));
+
+            for ($i = 0; $i < $l; $i++) {
+                if ($o[$i] != $f[$i]) {
+                    break;
+                }
+            }
+
+            $o = array_slice($o, $i);
+            $f = array_slice($f, $i);
+            $backs = count($f);
+
+            if ($absolute && $local) {
+                $url = str_repeat('../', $backs) . ltrim($url, '/');
+            }
+
+            $o = array_reverse($o);
+            $u = explode('/', $url);
+
+            foreach ($o as $p) {
+                array_unshift($u, $p);
+            }
+            for ($i = 0; $i < $backs; $i++) {
+                array_unshift($u, '..');
+            }
+
+            $url = implode('/', $u);
+
+            $svg = $this->_checkSVG($url);
+
+            if (!$svg && $absolute) {
+                return;
+            }
+            $e->setURL(new Sabberworm\CSS\Value\CSSString($url));
+        }
+    }
+
+    protected function _checkSVG($url)
+    {
+        if (!stristr($url, '.svg')) {
+            return false;
+        }
+
+        $file = PUBLIC_PATH . '/css/min/' . $url;
+
+        $raster = CubeIT_Image_SVG::rasterize($file);
+
+        $url = '../..' . $raster['url'];
+
+        $rule = $this->_cloneRule($this->_currentRule);
+        $rule->setValue(new Sabberworm\CSS\Value\URL(new Sabberworm\CSS\Value\CSSString($url)));
+
+        $ruleset = $this->_cloneDeclarationBlock($this->_currentRuleset, false);
+        $ruleset->addRule($rule);
+
+        $selectors = $ruleset->getSelectors();
+        $newSelectors = array();
+        foreach ($selectors as $s) {
+            $newSelectors[] = '.no-svg ' . $s;
+        }
+        $ruleset->setSelectors($newSelectors);
+
+        $this->_currentDoc->append($ruleset);
+        return true;
+    }
+
+    protected function _isAbsolute($url)
+    {
+        $e = parse_url($url);
+        if (isset($e['scheme'])) {
+            return true;
+        }
+        if (substr($e['path'], 0, 1) == '/') {
+            return true;
+        }
+
+        return false;
+    }
+
+    protected function _isLocal($url)
+    {
+        $e = parse_url($url);
+        if (isset($e['scheme'])) {
+            return false;
+        }
+        return true;
+    }
 
 }
index 4fccbd7223680fde3df61e1450b7fa3683563e44..d6680b9bfca56b8f51b53d4b2ebd90a3016e4f1e 100644 (file)
@@ -21,7 +21,7 @@ h3 {
     padding-top: 2em;
     padding-bottom: 1em;
 
-    &:nth-child(even){
+    &:nth-child(even) {
       background-color: @grey;
     }
 
@@ -40,5 +40,16 @@ h3 {
     }
 
 
+  }
+}
+
+.title {
+  .dotclear {
+    .images {
+      img {
+        max-width: 100%;
+        height: auto;
+      }
+    }
   }
 }
\ No newline at end of file