diff options
author | Andreas Gohr <andi@splitbrain.org> | 2013-08-02 21:59:16 +0200 |
---|---|---|
committer | Andreas Gohr <andi@splitbrain.org> | 2013-08-02 21:59:16 +0200 |
commit | 9b81fefec2f6a24c9585f505b42350849a5a045e (patch) | |
tree | 387442db7be9ebb48fb1aa51708dd4b0d45f80ec /lib/exe | |
parent | 395e7d8e1e303ae87be5d88abc67947b89e1a5a4 (diff) | |
parent | 72a66eb76026e69cd4554035a010693d6ae017ad (diff) | |
download | rpg-9b81fefec2f6a24c9585f505b42350849a5a045e.tar.gz rpg-9b81fefec2f6a24c9585f505b42350849a5a045e.tar.bz2 |
Merge branch 'less'
* less:
check less compilation for errors
removed possibility to have rtl.less files in plugins
switched to LESS variables in rest of template's css files
unlessified and lessified a few more css
fixed broken structure
removed debug statement. sorry
convert ini replacements to less vars first
make sure calculations are correct
lessified more files
lessyfied another one
lessyfied the first of template's CSS files
fixed ini replacement to less variables stuff
added missing lessc library
add LESS support
Conflicts:
inc/load.php
lib/tpl/dokuwiki/css/basic.less
Diffstat (limited to 'lib/exe')
-rw-r--r-- | lib/exe/css.php | 82 |
1 files changed, 80 insertions, 2 deletions
diff --git a/lib/exe/css.php b/lib/exe/css.php index 768c8eda4..83972d407 100644 --- a/lib/exe/css.php +++ b/lib/exe/css.php @@ -131,6 +131,8 @@ function css_out(){ // load files $css_content = ''; foreach($files[$mediatype] as $file => $location){ + $display = str_replace(fullpath(DOKU_INC), '', fullpath($file)); + $css_content .= "\n/* XXXXXXXXX $display XXXXXXXXX */\n"; $css_content .= css_loadfile($file, $location); } switch ($mediatype) { @@ -154,7 +156,10 @@ function css_out(){ // apply style replacements $css = css_applystyle($css,$tplinc); - // place all @import statements at the top of the file + // parse less + $css = css_parseless($css); + + // place all remaining @import statements at the top of the file $css = css_moveimports($css); // compress whitespace and comments @@ -172,16 +177,87 @@ function css_out(){ } /** + * Uses phpless to parse LESS in our CSS + * + * most of this function is error handling to show a nice useful error when + * LESS compilation fails + * + * @param $css + * @return string + */ +function css_parseless($css) { + $less = new lessc(); + try { + return $less->compile($css); + } catch(Exception $e) { + // get exception message + $msg = str_replace(array("\n", "\r", "'"), array(), $e->getMessage()); + + // try to use line number to find affected file + if(preg_match('/line: (\d+)$/', $msg, $m)){ + $msg = substr($msg, 0, -1* strlen($m[0])); //remove useless linenumber + $lno = $m[1]; + + // walk upwards to last include + $lines = explode("\n", $css); + $count = count($lines); + for($i=$lno-1; $i>=0; $i--){ + if(preg_match('/\/(\* XXXXXXXXX )(.*?)( XXXXXXXXX \*)\//', $lines[$i], $m)){ + // we found it, add info to message + $msg .= ' in '.$m[2].' at line '.($lno-$i); + break; + } + } + } + + // something went wrong + $error = 'A fatal error occured during compilation of the CSS files. '. + 'If you recently installed a new plugin or template it '. + 'might be broken and you should try disabling it again. ['.$msg.']'; + + echo ".dokuwiki:before { + content: '$error'; + background-color: red; + display: block; + background-color: #fcc; + border-color: #ebb; + color: #000; + padding: 0.5em; + }"; + + exit; + } +} + +/** * Does placeholder replacements in the style according to * the ones defined in a templates style.ini file * + * This also adds the ini defined placeholders as less variables + * (sans the surrounding __ and with a ini_ prefix) + * * @author Andreas Gohr <andi@splitbrain.org> */ function css_applystyle($css,$tplinc){ $styleini = css_styleini($tplinc); if($styleini){ - $css = strtr($css,$styleini['replacements']); + // we convert ini replacements to LESS variable names + // and build a list of variable: value; pairs + $less = ''; + foreach($styleini['replacements'] as $key => $value){ + $lkey = trim($key, '_'); + $lkey = '@ini_'.$lkey; + $less .= "$lkey: $value;\n"; + + $styleini['replacements'][$key] = $lkey; + } + + // we now replace all old ini replacements with LESS variables + $css = strtr($css, $styleini['replacements']); + + // now prepend the list of LESS variables as the very first thing + $css = $less.$css; } return $css; } @@ -333,9 +409,11 @@ function css_pluginstyles($mediatype='screen'){ $plugins = plugin_list(); foreach ($plugins as $p){ $list[DOKU_PLUGIN."$p/$mediatype.css"] = DOKU_BASE."lib/plugins/$p/"; + $list[DOKU_PLUGIN."$p/$mediatype.less"] = DOKU_BASE."lib/plugins/$p/"; // alternative for screen.css if ($mediatype=='screen') { $list[DOKU_PLUGIN."$p/style.css"] = DOKU_BASE."lib/plugins/$p/"; + $list[DOKU_PLUGIN."$p/style.less"] = DOKU_BASE."lib/plugins/$p/"; } // @deprecated 2012-04-09: rtl will cease to be a mode of its own, // please use "[dir=rtl]" in any css file in all, screen or print mode instead |