More work on Javascript and CSS dispatchers

darcs-hash:20051029185222-7ad00-c184ab3496539f3027407c7d17e8770a1849546a.gz
This commit is contained in:
Andreas Gohr 2005-10-29 20:52:22 +02:00
parent bad31ae944
commit 78a6aeb15a
14 changed files with 290 additions and 193 deletions

View File

@ -1,9 +1,9 @@
<?php
require_once DOKU_INC.'lib/exe/jscss.php';
require_once DOKU_INC.'lib/exe/js.php';
class jscss_js_compress_test extends UnitTestCase {
class js_js_compress_test extends UnitTestCase {
function test_mlcom1(){
$text = '/**

View File

@ -78,6 +78,7 @@ $conf['im_convert'] = ''; //path to ImageMagicks convert (will be
$conf['spellchecker']= 0; //enable Spellchecker (needs PHP >= 4.3.0 and aspell installed)
$conf['subscribers'] = 0; //enable change notice subscription support
$conf['pluginmanager'] = 0; //enable automated plugin management (requires plugin)
$conf['compress'] = 1; //Strip whitespaces and comments from Styles and JavaScript? 1|0
$conf['rss_type'] = 'rss1'; //type of RSS feed to provide, by default:
// 'rss' - RSS 0.91
// 'rss1' - RSS 1.0

View File

@ -42,6 +42,10 @@
if(!defined('DOKU_TPL')) define('DOKU_TPL',
DOKU_BASE.'lib/tpl/'.$conf['template'].'/');
// define real Template directory
if(!defined('DOKU_TPLINC')) define('DOKU_TPLINC',
DOKU_INC.'lib/tpl/'.$conf['template'].'/');
// make session rewrites XHTML compliant
@ini_set('arg_separator.output', '&amp;');

View File

@ -8,6 +8,8 @@
/**
* prints needed HTML to include plugin CSS and JS files
*
* @deprecated - now handled by the style and script loader in lib/exe
*/
function plugin_printCSSJS(){
global $conf;

View File

@ -176,7 +176,6 @@ function tpl_metaheaders(){
ptln('<link rel="alternate" type="application/rss+xml" title="Current Namespace" href="'.DOKU_BASE.'feed.php?mode=list&amp;ns='.$INFO['namespace'].'" />',$it);
ptln('<link rel="alternate" type="text/html" title="Plain HTML" href="'.wl($ID,'do=export_html').'" />',$it);
ptln('<link rel="alternate" type="text/plain" title="Wiki Markup" href="'.wl($ID, 'do=export_raw').'" />',$it);
ptln('<link rel="stylesheet" media="screen" type="text/css" href="'.DOKU_BASE.'lib/styles/style.css" />',$it);
// setup robot tags apropriate for different modes
if( ($ACT=='show' || $ACT=='export_html') && !$REV){
@ -195,97 +194,16 @@ function tpl_metaheaders(){
ptln('<meta name="robots" content="noindex,nofollow" />',$it);
}
/*
// include some JavaScript language strings #FIXME still needed?
ptln('<script language="javascript" type="text/javascript" charset="utf-8">',$it);
ptln(" var alertText = '".str_replace('\\\\n','\\n',addslashes($lang['qb_alert']))."'",$it);
ptln(" var notSavedYet = '".str_replace('\\\\n','\\n',addslashes($lang['notsavedyet']))."'",$it);
ptln(" var DOKU_BASE = '".DOKU_BASE."'",$it);
ptln('</script>',$it);
// load the default JavaScript files
ptln('<script language="javascript" type="text/javascript" charset="utf-8" src="'.
DOKU_BASE.'lib/scripts/events.js"></script>',$it);
ptln('<script language="javascript" type="text/javascript" charset="utf-8" src="'.
DOKU_BASE.'lib/scripts/script.js"></script>',$it);
ptln('<script language="javascript" type="text/javascript" charset="utf-8" src="'.
DOKU_BASE.'lib/scripts/tw-sack.js"></script>',$it);
ptln('<script language="javascript" type="text/javascript" charset="utf-8" src="'.
DOKU_BASE.'lib/scripts/ajax.js"></script>',$it);
// dom tool tip library, for insitu footnotes
ptln('<script language="javascript" type="text/javascript" charset="utf-8" src="'.
DOKU_BASE.'lib/scripts/domLib.js"></script>',$it);
ptln('<script language="javascript" type="text/javascript" charset="utf-8" src="'.
DOKU_BASE.'lib/scripts/domTT.js"></script>',$it);
ptln('<script language="javascript" type="text/javascript" charset="utf-8">',$it);
ptln("addEvent(window,'load',function(){ajax_qsearch.init('qsearch_in','qsearch_out');});",$it);
ptln("addEvent(window,'load',function(){addEvent(document,'click',closePopups);});",$it);
ptln('</script>',$it);
// editing functions
if($ACT=='edit' || $ACT=='preview'){
// add size control
ptln('<script language="javascript" type="text/javascript" charset="utf-8">',$it);
ptln("addEvent(window,'load',function(){initSizeCtl('sizectl','wikitext')});",$it+2);
ptln('</script>',$it);
if($INFO['writable']){
// load toolbar functions
ptln('<script language="javascript" type="text/javascript" charset="utf-8" src="'.
DOKU_BASE.'lib/scripts/edit.js"></script>',$it);
// load spellchecker functions if wanted
if($conf['spellchecker']){
ptln('<script language="javascript" type="text/javascript" charset="utf-8" src="'.
DOKU_BASE.'lib/scripts/spellcheck.js"></script>',$it+2);
}
ptln('<script language="javascript" type="text/javascript" charset="utf-8">',$it);
// add toolbar
require_once(DOKU_INC.'inc/toolbar.php');
toolbar_JSdefines('toolbar');
ptln("addEvent(window,'load',function(){initToolbar('toolbar','wikitext',toolbar);});",$it+2);
// add pageleave check
ptln("addEvent(window,'load',function(){initChangeCheck('".
str_replace('\\\\n','\\n',addslashes($lang['notsavedyet']))."');});",$it);
// add lock timer
ptln("addEvent(window,'load',function(){init_locktimer(".
($conf['locktime']-60).",'".
str_replace('\\\\n','\\n',addslashes($lang['willexpire']))."');});",$it);
// add spellchecker
if($conf['spellchecker']){
//init here
ptln("addEvent(window,'load',function(){ ajax_spell.init('".
$lang['spell_start']."','".
$lang['spell_stop']."','".
$lang['spell_wait']."','".
$lang['spell_noerr']."','".
$lang['spell_nosug']."','".
$lang['spell_change']."'); });");
}
ptln('</script>',$it);
}
}
*/
// load stylesheets
ptln('<link rel="stylesheet" media="screen" type="text/css" href="'.DOKU_BASE.'lib/exe/css.php" />',$it);
ptln('<link rel="stylesheet" media="print" type="text/css" href="'.DOKU_BASE.'lib/exe/css.php?print=1" />',$it);
// load javascript
$js_edit = ($ACT=='edit' || $ACT=='preview') ? 1 : 0;
$js_write = ($INFO['writable']) ? 1 : 0;
$js_sig = ($conf['useacl'] && $_SERVER['REMOTE_USER']) ? 1 : 0;
ptln('<script language="javascript" type="text/javascript" charset="utf-8" src="'.
DOKU_BASE.'lib/exe/jscss.php?type=js&amp;edit='.$js_edit.'&amp;write='.$js_write.'"></script>',$it);
// plugin stylesheets and Scripts
plugin_printCSSJS();
DOKU_BASE.'lib/exe/js.php?edit='.$js_edit.'&amp;write='.$js_write.'&amp;sig='.$js_sig.'"></script>',$it);
}
/**

View File

@ -164,17 +164,6 @@ function toolbar_JSdefines($varname){
),
);
// if logged in add sig button
if($conf['useacl'] && $_SERVER['REMOTE_USER']){
$menu[] = array(
'type' => 'insert',
'title' => $lang['qb_sig'],
'icon' => 'sig.png',
'key' => 'y',
'insert' => toolbar_signature(),
);
}
// use JSON to build the JavaScript array
$json = new JSON();
print "var $varname = ".$json->encode($menu).";\n";
@ -187,16 +176,36 @@ function toolbar_JSdefines($varname){
*/
function toolbar_signature(){
global $conf;
global $INFO;
$sig = $conf['signature'];
$sig = strftime($sig);
$sig = str_replace('@USER@',$_SERVER['REMOTE_USER'],$sig);
$sig = str_replace('@NAME@',$INFO['userinfo']['name'],$sig);
$sig = str_replace('@MAIL@',$INFO['userinfo']['mail'],$sig);
$sig = str_replace('@NAME@',$_SESSION[$conf[title]]['auth']['info']['name'],$sig);
$sig = str_replace('@MAIL@',$_SESSION[$conf[title]]['auth']['info']['mail'],$sig);
$sig = str_replace('@DATE@',date($conf['dformat']),$sig);
return $sig;
}
/**
* Adds the signature button to the already prepared Javascript array
* @param string $varname Name of the JS variable to fill
* @author Andreas Gohr <andi@splitbrain.org>
*/
function toolbar_addsigbutton($varname){
global $lang;
$menu = array(
'type' => 'insert',
'title' => $lang['qb_sig'],
'icon' => 'sig.png',
'key' => 'y',
'insert' => toolbar_signature(),
);
// use JSON to build the JavaScript array
$json = new JSON();
print $varname.'['.$varname.'.length] = '.$json->encode($menu).";\n";
}
//Setup VIM: ex: et ts=4 enc=utf-8 :

165
lib/exe/css.php Normal file
View File

@ -0,0 +1,165 @@
<?php
/**
* DokuWiki StyleSheet creator
*
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Andreas Gohr <andi@splitbrain.org>
*/
if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
define('NOSESSION',true); // we do not use a session or authentication here (better caching)
require_once(DOKU_INC.'inc/init.php');
require_once(DOKU_INC.'inc/pageutils.php');
require_once(DOKU_INC.'inc/io.php');
// Main (don't run when UNIT test)
if(!defined('SIMPLE_TEST')){
header('Content-Type: text/css; charset=utf-8');
css_out();
}
// ---------------------- functions ------------------------------
/**
* Output all needed Styles
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
function css_out(){
global $conf;
global $lang;
$print = (bool) $_REQUEST['print']; //print mode?
// The generated script depends on some dynamic options
$cache = getCacheName('styles'.$print,'.css');
// Array of needed files and their web locations, the latter ones
// are needed to fix relative paths in the stylesheets
$files = array();
if($print){
$files[DOKU_TPLINC.'print.css'] = DOKU_TPL;
// load plugin styles
$files = array_merge($files, css_pluginstyles('print'));
$files[DOKU_CONF.'userprint.css'] = '';
}else{
$files[DOKU_INC.'lib/styles/style.css'] = DOKU_BASE.'lib/styles/';
//fixme spellchecker style
$files[DOKU_TPLINC.'layout.css'] = DOKU_TPL;
$files[DOKU_TPLINC.'design.css'] = DOKU_TPL;
if($lang['direction'] == 'rtl'){
$files[DOKU_TPLINC.'rtl.css'] = DOKU_TPL;
}
// load plugin styles
$files = array_merge($files, css_pluginstyles('screen'));
$files[DOKU_CONF.'userstyle.css'] = '';
}
// check cache age
if(css_cacheok($cache,array_keys($files))){
readfile($cache);
return;
}
// start output buffering and build the stylesheet
ob_start();
// load files
foreach($files as $file => $location){
print css_loadfile($file, $location);
}
// end output buffering and get contents
$css = ob_get_contents();
ob_end_clean();
// compress whitespace and comments
if($conf['compress']){
$css = css_compress($css);
}
// save cache file
io_saveFile($cache,$css);
// finally send output
print $css;
}
/**
* Checks if a CSS Cache file still is valid
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
function css_cacheok($cache,$files){
$ctime = @filemtime($cache);
if(!$ctime) return false; //There is no cache
// some additional files to check
$files[] = DOKU_CONF.'dokuwiki.conf';
$files[] = DOKU_CONF.'local.conf';
$files[] = __FILE__;
// now walk the files
foreach($files as $file){
if(@filemtime($file) > $ctime){
return false;
}
}
return true;
}
/**
* Loads a given file and fixes relative URLs with the
* given location prefix
*/
function css_loadfile($file,$location=''){
if(!@file_exists($file)) return '';
$css = io_readFile($file);
if(!$location) return $css;
$css = preg_replace('!(url\( *)([^/])!','\\1'.$location.'\\2',$css);
return $css;
}
/**
* Returns a list of possible Plugin Styles (no existance check here)
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
function css_pluginstyles($mode='screen'){
$list = array();
$plugins = plugin_list();
foreach ($plugins as $p){
if($mode == 'print'){
$list[DOKU_PLUGIN."$p/print.css"] = DOKU_BASE."lib/plugins/$p/";
}else{
$list[DOKU_PLUGIN."$p/style.css"] = DOKU_BASE."lib/plugins/$p/";
$list[DOKU_PLUGIN."$p/screen.css"] = DOKU_BASE."lib/plugins/$p/";
}
}
return $list;
}
/**
* Very simple CSS optimizer
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
function css_compress($css){
// strip whitespaces
$css = preg_replace('![\r\n\t ]+!',' ',$css);
$css = preg_replace('/ ?([:;,{}]) ?/','\\1',$css);
// strip comments (ungreedy)
// We keep very small comments to maintain typical browser hacks
$css = preg_replace('!(/\*)(.{4,})(\*/)!U','',$css);
// shorten colors
$css = preg_replace("/#([0-9a-fA-F]{1})\\1([0-9a-fA-F]{1})\\2([0-9a-fA-F]{1})\\3/", "#\\1\\2\\3",$css);
return $css;
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
?>

View File

@ -1,6 +1,6 @@
<?php
/**
* DokuWiki JavaScript and CSS creator
* DokuWiki JavaScript creator
*
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Andreas Gohr <andi@splitbrain.org>
@ -14,12 +14,9 @@ require_once(DOKU_INC.'inc/io.php');
// Main (don't run when UNIT test)
if(!defined('SIMPLE_TEST')){
if($_REQUEST['type'] == 'css'){
css_out();
}else{
header('Content-Type: text/javascript; charset=utf-8');
js_out();
}
header('Content-Type: text/javascript; charset=utf-8');
js_out();
js_dynamicout();
}
@ -28,7 +25,6 @@ if(!defined('SIMPLE_TEST')){
/**
* Output all needed JavaScript
*
* @todo Add Whitespace and Comment Compression
* @author Andreas Gohr <andi@splitbrain.org>
*/
function js_out(){
@ -38,7 +34,7 @@ function js_out(){
$write = (bool) $_REQUEST['write']; // writable?
// The generated script depends on some dynamic options
$cache = getCacheName($conf['lang'].$edit.$write,$ext='.js');
$cache = getCacheName('scripts'.$edit.$write,'.js');
// Array of needed files
$files = array(
@ -56,10 +52,11 @@ function js_out(){
}
}
// FIXME load plugin scripts
// get possible plugin scripts
$plugins = js_pluginscripts();
// check cache age here
if(js_cacheok($cache,$files)){
if(js_cacheok($cache,array_merge($files,$plugins))){
readfile($cache);
return;
}
@ -109,18 +106,22 @@ function js_out(){
}
}
// load plugin scripts (suppress warnings for missing ones)
foreach($plugins as $plugin){
@readfile($plugin);
}
// load user script
if(@file_exists(DOKU_INC.'conf/userscript.js')){
readfile(DOKU_INC.'conf/userscript.js');
}
@readfile(DOKU_CONF.'userscript.js');
// end output buffering and get contents
$js = ob_get_contents();
ob_end_clean();
// compress whitespace and comments
$js = js_compress($js);
if($conf['compress']){
$js = js_compress($js);
}
// save cache file
io_saveFile($cache,$js);
@ -129,6 +130,21 @@ function js_out(){
print $js;
}
/**
* Adds some dynamic JavaScript using the readonly Session
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
function js_dynamicout(){
$edit = (bool) $_REQUEST['edit']; // edit or preview mode?
$write = (bool) $_REQUEST['write']; // writable?
$sig = (bool) $_REQUEST['sig']; // show sig button?
if($edit && $write && $sig){
require_once(DOKU_INC.'inc/toolbar.php');
toolbar_addsigbutton('toolbar');
}
}
/**
* Checks if a JavaScript Cache file still is valid
*
@ -139,9 +155,10 @@ function js_cacheok($cache,$files){
if(!$ctime) return false; //There is no cache
// some additional files to check
$files[] = DOKU_INC.'conf/dokuwiki.conf';
$files[] = DOKU_INC.'conf/local.conf';
$files[] = DOKU_INC.'conf/userscript.js';
$files[] = DOKU_CONF.'dokuwiki.conf';
$files[] = DOKU_CONF.'local.conf';
$files[] = DOKU_CONF.'userscript.js';
$files[] = __FILE__;
// now walk the files
foreach($files as $file){
@ -152,6 +169,20 @@ function js_cacheok($cache,$files){
return true;
}
/**
* Returns a list of possible Plugin Scripts (no existance check here)
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
function js_pluginscripts(){
$list = array();
$plugins = plugin_list();
foreach ($plugins as $p){
$list[] = DOKU_PLUGIN."$p/script.js";
}
return $list;
}
/**
* Escapes a String to be embedded in a JavaScript call, keeps \n
* as newline
@ -171,7 +202,16 @@ function js_runonstart($func){
print "addEvent(window,'load',function(){ $func; });";
}
//http://modp.com/release/jsstrip/jsstrip.py
/**
* Strip comments and whitespaces from given JavaScript Code
*
* This is a rewrite of Nick Galbreaths python tool jsstrip.py which is
* released under BSD license. See link for original code.
*
* @author Nick Galbreath <nickg@modp.com>
* @author Andreas Gohr <andi@splitbrain.org>
* @link http://modp.com/release/jsstrip/
*/
function js_compress($s){
$i = 0;
$line = 0;
@ -287,7 +327,5 @@ function js_compress($s){
return $out;
}
//http://csstidy.sourceforge.net/download.php
//Setup VIM: ex: et ts=4 enc=utf-8 :
?>

View File

@ -6,8 +6,8 @@
* Some browser detection
*/
var clientPC = navigator.userAgent.toLowerCase(); // Get client info
var is_gecko = ((clientPC.indexOf('gecko')!=-1) && (clientPC.indexOf('spoofer')==-1)
&& (clientPC.indexOf('khtml') == -1) && (clientPC.indexOf('netscape/7.0')==-1));
var is_gecko = ((clientPC.indexOf('gecko')!=-1) && (clientPC.indexOf('spoofer')==-1) &&
(clientPC.indexOf('khtml') == -1) && (clientPC.indexOf('netscape/7.0')==-1));
var is_safari = ((clientPC.indexOf('AppleWebKit')!=-1) && (clientPC.indexOf('spoofer')==-1));
var is_khtml = (navigator.vendor == 'KDE' || ( document.childNodes && !document.all && !navigator.taintEnabled ));
if (clientPC.indexOf('opera')!=-1) {
@ -23,10 +23,11 @@ if (clientPC.indexOf('opera')!=-1) {
*/
function findPosX(object){
var curleft = 0;
var obj;
if(typeof(object) == 'object'){
var obj = object;
obj = object;
}else{
var obj = document.getElementById(object);
obj = document.getElementById(object);
}
if (obj.offsetParent){
while (obj.offsetParent){
@ -47,10 +48,11 @@ function findPosX(object){
*/
function findPosY(object){
var curtop = 0;
var obj;
if(typeof(object) == 'object'){
var obj = object;
obj = object;
}else{
var obj = document.getElementById(object);
obj = document.getElementById(object);
}
if (obj.offsetParent){
while (obj.offsetParent){
@ -72,7 +74,7 @@ function findPosY(object){
function jsEscape(text){
var re=new RegExp("\\\\","g");
text=text.replace(re,"\\\\");
var re=new RegExp("'","g");
re=new RegExp("'","g");
text=text.replace(re,"\\'");
re=new RegExp('"',"g");
text=text.replace(re,'&quot;');
@ -150,8 +152,8 @@ function showTocToggle(showtxt,hidetxt) {
document.writeln('<div class=\'toctoggle\'><a href="javascript:toggleToc()" class="toc">' +
'<span id="showlink" style="display:none;">' + show + '</span>' +
'<span id="hidelink">' + hide + '</span>'
+ '</a></div>');
'<span id="hidelink">' + hide + '</span>' +
'</a></div>');
}
}
@ -200,12 +202,14 @@ function getCookie(name) {
var begin = dc.indexOf("; " + prefix);
if (begin == -1) {
begin = dc.indexOf(prefix);
if (begin != 0) return null;
} else
if (begin !== 0){ return null; }
} else {
begin += 2;
}
var end = document.cookie.indexOf(";", begin);
if (end == -1)
if (end == -1){
end = dc.length;
}
return unescape(dc.substring(begin + prefix.length, end));
}
@ -217,8 +221,9 @@ function getCookie(name) {
function fixDate(date) {
var base = new Date(0);
var skew = base.getTime();
if (skew > 0)
if (skew > 0){
date.setTime(date.getTime() - skew);
}
}
/*
@ -258,16 +263,17 @@ function fnt(id, e, evt) {
}
// does the footnote tooltip already exist?
var fnt = document.getElementById('insitu-fn'+id);
if (!fnt) {
var fnote = document.getElementById('insitu-fn'+id);
var footnote;
if (!fnote) {
// if not create it...
// locate the footnote anchor element
var a = document.getElementById( "fn"+id );
if (!a) return;
if (!a){ return; }
// anchor parent is the footnote container, get its innerHTML
var footnote = new String (a.parentNode.innerHTML);
footnote = new String (a.parentNode.innerHTML);
// strip the leading footnote anchors and their comma separators
footnote = footnote.replace(/<a\s.*?href=\".*\#fnt\d+\".*?<\/a>/gi, '');
@ -276,7 +282,7 @@ function fnt(id, e, evt) {
// prefix ids on any elements with "insitu-" to ensure they remain unique
footnote = footnote.replace(/\bid=\"(.*?)\"/gi,'id="insitu-$1');
} else {
var footnote = new String(fnt.innerHTML);
footnote = new String(fnt.innerHTML);
}
// activate the tooltip
@ -289,13 +295,13 @@ function fnt(id, e, evt) {
* Add the edit window size controls
*/
function initSizeCtl(ctlid,edid){
if(!document.getElementById) return;
if(!document.getElementById){ return; }
var ctl = document.getElementById(ctlid);
var textarea = document.getElementById(edid);
var hgt = getCookie('DokuWikisizeCtl');
if(hgt == null){
if(hgt === null || hgt === ''){
textarea.style.height = '300px';
}else{
textarea.style.height = hgt;
@ -319,7 +325,7 @@ function sizeCtl(edid,val){
var height = parseInt(textarea.style.height.substr(0,textarea.style.height.length-2));
height += val;
textarea.style.height = height+'px';
var now = new Date();
fixDate(now);
now.setTime(now.getTime() + 365 * 24 * 60 * 60 * 1000); //expire in a year
@ -330,7 +336,7 @@ function sizeCtl(edid,val){
* Handler to close all open Popups
*/
function closePopups(){
if(!document.getElementById) return;
if(!document.getElementById){ return; }
var divs = document.getElementsByTagName('div');
for(var i=0; i < divs.length; i++){

View File

@ -24,16 +24,6 @@
<?php tpl_metaheaders()?>
<link rel="shortcut icon" href="<?php echo DOKU_BASE?>lib/images/favicon.ico" />
<link rel="stylesheet" media="screen" type="text/css" href="<?php echo DOKU_TPL?>layout.css" />
<link rel="stylesheet" media="screen" type="text/css" href="<?php echo DOKU_TPL?>design.css" />
<!--[if gte IE 5]>
<style type="text/css">
/* that IE 5+ conditional comment makes this only visible in IE 5+ */
/* IE bugfix for transparent PNGs */
//DISABLED img { behavior: url("<?php echo DOKU_BASE?>lib/scripts/pngbehavior.htc"); }
</style>
<![endif]-->
</head>
<body>

View File

@ -23,22 +23,6 @@
<?php tpl_metaheaders()?>
<link rel="shortcut icon" href="<?php echo DOKU_BASE?>lib/images/favicon.ico" />
<link rel="stylesheet" media="screen" type="text/css" href="<?php echo DOKU_TPL?>layout.css" />
<link rel="stylesheet" media="screen" type="text/css" href="<?php echo DOKU_TPL?>design.css" />
<?php if($lang['direction'] == 'rtl') {?>
<link rel="stylesheet" media="screen" type="text/css" href="<?php echo DOKU_TPL?>rtl.css" />
<?php } ?>
<link rel="stylesheet" media="print" type="text/css" href="<?php echo DOKU_TPL?>print.css" />
<!--[if gte IE 5]>
<style type="text/css">
/* that IE 5+ conditional comment makes this only visible in IE 5+ */
/* IE bugfix for transparent PNGs */
//DISABLED img { behavior: url("<?php echo DOKU_BASE?>lib/scripts/pngbehavior.htc"); }
</style>
<![endif]-->
<?php /*old includehook*/ @include(dirname(__FILE__).'/meta.html')?>
</head>

View File

@ -21,16 +21,7 @@
<?php tpl_metaheaders()?>
<link rel="shortcut icon" href="<?php echo DOKU_BASE?>lib/images/favicon.ico" />
<link rel="stylesheet" media="screen" type="text/css" href="<?php echo DOKU_TPL?>layout.css" />
<link rel="stylesheet" media="screen" type="text/css" href="<?php echo DOKU_TPL?>design.css" />
<!--[if gte IE 5]>
<style type="text/css">
/* that IE 5+ conditional comment makes this only visible in IE 5+ */
/* IE bugfix for transparent PNGs */
//DISABLED img { behavior: url("<?php echo DOKU_BASE?>lib/scripts/pngbehavior.htc"); }
</style>
<![endif]-->
</head>
<body>

View File

@ -22,8 +22,6 @@
<?php tpl_metaheaders()?>
<link rel="shortcut icon" href="<?php echo DOKU_BASE?>images/favicon.ico" />
<link rel="stylesheet" media="screen" type="text/css" href="<?php echo DOKU_TPL?>layout.css" />
<link rel="stylesheet" media="screen" type="text/css" href="<?php echo DOKU_TPL?>design.css" />
</head>
<body>

View File

@ -22,16 +22,7 @@
<?php tpl_metaheaders()?>
<link rel="shortcut icon" href="<?php echo DOKU_BASE?>images/favicon.ico" />
<link rel="stylesheet" media="screen" type="text/css" href="<?php echo DOKU_TPL?>layout.css" />
<link rel="stylesheet" media="screen" type="text/css" href="<?php echo DOKU_TPL?>design.css" />
<!--[if gte IE 5]>
<style type="text/css">
/* that IE 5+ conditional comment makes this only visible in IE 5+ */
/* IE bugfix for transparent PNGs */
//img { behavior: url("<?php echo DOKU_BASE?>/pngbehavior.htc"); }
</style>
<![endif]-->
</head>
<body>