summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--conf/dokuwiki.php1
-rw-r--r--doku.php148
-rw-r--r--inc/actions.php192
-rw-r--r--inc/common.php2
-rw-r--r--inc/html.php17
-rw-r--r--inc/init.php6
-rw-r--r--inc/template.php314
-rw-r--r--media.php2
-rw-r--r--style.css656
-rw-r--r--tpl/default/design.css562
-rw-r--r--tpl/default/images/bullet.gif (renamed from images/bullet.gif)bin50 -> 50 bytes
-rw-r--r--tpl/default/images/button-cc.gif (renamed from images/button-cc.gif)bin1231 -> 1231 bytes
-rw-r--r--tpl/default/images/button-css.png (renamed from images/button-css.png)bin299 -> 299 bytes
-rw-r--r--tpl/default/images/button-donate.gif (renamed from images/button-donate.gif)bin200 -> 200 bytes
-rw-r--r--tpl/default/images/button-dw.png (renamed from images/button-dw.png)bin271 -> 271 bytes
-rw-r--r--tpl/default/images/button-php.gif (renamed from images/button-php.gif)bin269 -> 269 bytes
-rw-r--r--tpl/default/images/button-rss.png (renamed from images/button-rss.png)bin280 -> 280 bytes
-rw-r--r--tpl/default/images/button-xhtml.png (renamed from images/button-xhtml.png)bin321 -> 321 bytes
-rw-r--r--tpl/default/images/closed.gif (renamed from images/closed.gif)bin54 -> 54 bytes
-rw-r--r--tpl/default/images/link_icon.gif (renamed from images/link_icon.gif)bin942 -> 942 bytes
-rw-r--r--tpl/default/images/mail_icon.gif (renamed from images/mail_icon.gif)bin918 -> 918 bytes
-rw-r--r--tpl/default/images/open.gif (renamed from images/open.gif)bin54 -> 54 bytes
-rw-r--r--tpl/default/images/tocdot2.gif (renamed from images/tocdot2.gif)bin810 -> 810 bytes
-rw-r--r--tpl/default/images/windows.gif (renamed from images/windows.gif)bin223 -> 223 bytes
-rw-r--r--tpl/default/layout.css113
-rw-r--r--tpl/default/main.php110
-rw-r--r--tpl/default/print.css (renamed from print.css)0
27 files changed, 1318 insertions, 805 deletions
diff --git a/conf/dokuwiki.php b/conf/dokuwiki.php
index 2204e7c05..bd9c4d4eb 100644
--- a/conf/dokuwiki.php
+++ b/conf/dokuwiki.php
@@ -23,6 +23,7 @@ $conf['uploadtypes'] = 'gif|jpe?g|png|zip|pdf|tar(\.gz)?|tgz'; //regexp of allow
$conf['start'] = 'start'; //name of start page
$conf['title'] = 'DokuWiki'; //what to show in the title
+$conf['template'] = 'default'; //see tpl directory
$conf['fullpath'] = 0; //show full path of the document or relative to datadir only? 0|1
$conf['recent'] = 20; //how many entries to show in recent
$conf['breadcrumbs'] = 10; //how many recent visited pages to show
diff --git a/doku.php b/doku.php
index 5d706ab2e..24eeb94d5 100644
--- a/doku.php
+++ b/doku.php
@@ -14,6 +14,7 @@
require_once(DOKU_INC.'lang/en/lang.php');
require_once(DOKU_INC.'lang/'.$conf['lang'].'/lang.php');
require_once(DOKU_INC.'inc/auth.php');
+ require_once(DOKU_INC.'inc/actions.php');
//import variables
$QUERY = trim($_REQUEST['id']);
@@ -58,152 +59,7 @@
//make infos about the selected page available
$INFO = pageinfo();
- //already logged in?
- if($_SERVER['REMOTE_USER'] && $ACT=='login') $ACT='show';
- //handle logout
- if($ACT=='logout'){
- auth_logoff();
- $ACT='login';
- }
-
- //handle register
- if($ACT=='register' && register()){
- $ACT='login';
- }
-
-/*
- //handle acl_admin stuff, add acl entry
- if( ($ACT=='acl_admin_add') && (auth_quickaclcheck($ID) == AUTH_GRANT)){
- acl_admin_change($ACL_SCOPE, $ACL_USER, "", $ACL_CHECKBOX);
- # reload ACL into a global array
- //$AUTH_ACL = file('conf/acl.auth');
- $AUTH_ACL = load_acl_config();
- $ACT='acl_admin';
- }
-
- //handle acl_admin stuff, change acl entry
- if( ($ACT=='acl_admin_change') && (auth_quickaclcheck($ID) == AUTH_GRANT)){
- acl_admin_change($ACL_SCOPE, $ACL_USER, $ACL_LEVEL, $ACL_CHECKBOX);
- # reload ACL into a global array
- $AUTH_ACL = load_acl_config();
- $ACT='acl_admin';
- }
-
- //handle acl_admin_del stuff, remove acl entry
- if( ($ACT=='acl_admin_del') && (auth_quickaclcheck($ID) == AUTH_GRANT)) {
- acl_admin_del($ACL_SCOPE, $ACL_USER, $ACL_LEVEL);
- # reload ACL into a global array
- $AUTH_ACL = load_acl_config();
- $ACT='acl_admin';
- }
-*/
-
- //do saving after spam- and conflictcheck
- if($ACT == $lang['btn_save'] && auth_quickaclcheck($ID)){
- if(checkwordblock()){
- //spam detected
- $ACT = 'wordblock';
- }elseif($DATE != 0 && @filemtime(wikiFN($ID)) > $DATE ){
- //newer version available -> ask what to do
- $ACT = 'conflict';
- }else{
- //save it
- saveWikiText($ID,con($PRE,$TEXT,$SUF,1),$SUM); //use pretty mode for con
- //unlock it
- unlock($id);
- //show it
- header("Location: ".wl($ID,'',true));
- exit();
- }
- }
-
- //Editing: check if locked by anyone - if not lock for my self
- if(($ACT == 'edit' || $ACT == $lang['btn_preview']) && $INFO['editable']){
- $lockedby = checklock($ID);
- if($lockedby){
- $ACT = 'locked';
- }else{
- lock($ID);
- }
- }else{
- //try to unlock
- unlock($ID);
- }
-
-
- //display some infos
- if($ACT == 'check'){
- check();
- $ACT = 'show';
- }
-
- //check if searchword was given - else just show
- if($ACT == 'search' && empty($QUERY)){
- $ACT = 'show';
- }
-
- //check which permission is needed
- if(in_array($ACT,array('preview','wordblock','conflict','lockedby'))){
- if($INFO['exists']){
- $permneed = AUTH_EDIT;
- }else{
- $permneed = AUTH_CREATE;
- }
- }elseif(in_array($ACT,array('login','register','search','recent'))){
- $permneed = AUTH_NONE;
- }else{
- $permneed = AUTH_READ;
- }
-
- //start output
- header('Content-Type: text/html; charset='.$lang['encoding']);
- if(substr($ACT,0,6) != 'export') html_header();
- if(html_acl($permneed)){
- if($ACT == 'edit'){
- html_edit();
- }elseif($ACT == $lang['btn_preview']){
- html_edit($TEXT);
- html_show($TEXT);
- }elseif($ACT == 'wordblock'){
- html_edit($TEXT,'wordblock');
- }elseif($ACT == 'search'){
- html_search();
- }elseif($ACT == 'revisions'){
- html_revisions();
- }elseif($ACT == 'diff'){
- html_diff();
- }elseif($ACT == 'recent'){
- html_recent();
- }elseif($ACT == 'index'){
- html_index($IDX);
- }elseif($ACT == 'backlink'){
- html_backlinks();
- }elseif($ACT == 'conflict'){
- html_conflict(con($PRE,$TEXT,$SUF),$SUM);
- html_diff(con($PRE,$TEXT,$SUF),false);
- }elseif($ACT == 'locked'){
- html_locked($lockedby);
-# }elseif( ($ACT == 'acl_admin') && (auth_quickaclcheck($ID) == AUTH_GRANT)){
-# html_acl_admin();
- }elseif($ACT == 'login'){
- html_login();
- }elseif($ACT == 'register' && $conf['openregister']){
- html_register();
- }elseif($ACT == 'export_html'){
- html_head();
- print "<body>\n";
- print parsedWiki($ID,$REV,false);
- print "</body>\n</html>\n";
- }elseif($ACT == 'export_raw'){
- header("Content-Type: text/plain");
- print rawWiki($ID,$REV);
- }else{
- $ACT='show';
- html_show();
- }
- }
- if(substr($ACT,0,6) != 'export') html_footer();
-
+ act_dispatch($ACT);
//restore old umask
umask($conf['oldumask']);
diff --git a/inc/actions.php b/inc/actions.php
new file mode 100644
index 000000000..345ef8e37
--- /dev/null
+++ b/inc/actions.php
@@ -0,0 +1,192 @@
+<?php
+/**
+ * DokuWiki Actions
+ *
+ * @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__).'/../').'/');
+ require_once(DOKU_INC.'inc/template.php');
+
+/**
+ * Call the needed action handlers
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function act_dispatch(){
+ global $INFO;
+ global $ACT;
+ global $ID;
+ global $QUERY;
+ global $lang;
+ global $conf;
+
+ //check permissions
+ $ACT = act_permcheck($ACT);
+
+ //login stuff
+ if(in_array($ACT,array('login','logout','register')))
+ $ACT = act_login($ACT);
+
+ //save
+ if($ACT == 'save')
+ $ACT = act_save($ACT);
+
+ //edit
+ if(($ACT == 'edit' || $ACT == $lang['btn_preview']) && $INFO['editable']){
+ $ACT = act_save($ACT);
+ }else{
+ unlock($ID); //try to unlock
+ }
+
+ //handle export
+ if(substr($ACT,0,6) == 'export')
+ $ACT = act_export($ACT);
+
+ //display some infos
+ if($ACT == 'check'){
+ check();
+ $ACT = 'show';
+ }
+
+ //check if searchword was given - else just show
+ if($ACT == 'search' && empty($QUERY)){
+ $ACT = 'show';
+ }
+
+ //fixme sanitize $ACT
+
+ //call template FIXME: all needed vars available?
+ header('Content-Type: text/html; charset=utf-8');
+ include(DOKU_INC.'tpl/'.$conf['template'].'/main.php');
+}
+
+/**
+ * Run permissionchecks
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function act_permcheck($act){
+ if(in_array($act,array('save','preview','edit'))){
+ if($INFO['exists']){
+ $permneed = AUTH_EDIT;
+ }else{
+ $permneed = AUTH_CREATE;
+ }
+ }elseif(in_array($act,array('login','register','search','recent'))){
+ $permneed = AUTH_NONE;
+ }else{
+ $permneed = AUTH_READ;
+ }
+ if(! auth_quickaclcheck($ID) >= $permneed){
+ return 'denied';
+ }
+
+ return $act;
+}
+
+/**
+ * Handle 'save'
+ *
+ * Checks for spam and conflicts and saves the page.
+ * Does a redirect to show the page afterwards or
+ * returns a new action.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function act_save($act){
+ global $ID;
+ global $DATE;
+ global $PRE;
+ global $TEXT;
+ global $SUF;
+ global $SUM;
+
+ //spam check
+ if(checkwordblock())
+ return 'wordblock';
+ //conflict check //FIXME use INFO
+ if($DATE != 0 && @filemtime(wikiFN($ID)) > $DATE )
+ return 'conflict';
+
+ //save it
+ saveWikiText($ID,con($PRE,$TEXT,$SUF,1),$SUM); //use pretty mode for con
+ //unlock it
+ unlock($ID);
+
+ //show it
+ session_write_close();
+ header("Location: ".wl($ID,'',true));
+ exit();
+}
+
+/**
+ * Handle 'login', 'logout', 'register'
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function act_auth($act){
+ //already logged in?
+ if($_SERVER['REMOTE_USER'] && $act=='login')
+ return 'show';
+
+ //handle logout
+ if($act=='logout'){
+ auth_logoff();
+ return 'login';
+ }
+
+ //handle register
+ if($act=='register' && register()){
+ $act='login';
+ }
+
+ return $act;
+}
+
+/**
+ * Handle 'edit', 'preview'
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function act_edit($act){
+ //check if locked by anyone - if not lock for my self
+ $lockedby = checklock($ID);
+ if($lockedby) return 'locked';
+
+ lock($ID);
+ return $act;
+}
+
+/**
+ * Handle 'edit', 'preview'
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function act_export($act){
+ global $ID;
+ global $REV;
+
+ if($act == 'export_html'){
+ header('Content-Type: text/html; charset=utf-8');
+ ptln('<html>');
+ ptln('<head>');
+ tpl_metaheaders();
+ ptln('</head>');
+ ptln('<body>');
+ print parsedWiki($ID,$REV,false);
+ ptln('</body>');
+ ptln('</html>');
+ exit;
+ }
+
+ if($act == 'export_raw'){
+ header('Content-Type: text/plain; charset=utf-8');
+ print rawWiki($ID,$REV);
+ exit;
+ }
+
+ return 'show';
+}
+?>
diff --git a/inc/common.php b/inc/common.php
index b06896f4d..482bb1e2d 100644
--- a/inc/common.php
+++ b/inc/common.php
@@ -369,7 +369,6 @@ function cleanID($id){
if($conf['deaccent']) $id = utf8_deaccent($id,-1);
//remove specials
- //$id = preg_replace('#[\x00-\x20 ¡!"§$%&()\[\]{}¿\\?`\'\#~*+=,<>\|^°@µ¹²³¼½¬]#u','_',$id);
$id = utf8_stripspecials($id,'_','_:.-');
//clean up
@@ -815,6 +814,7 @@ function download($url,$file){
/**
* extracts the query from a google referer
*
+ * @todo should be more generic and support yahoo et al
* @author Andreas Gohr <andi@splitbrain.org>
*/
function getGoogleQuery(){
diff --git a/inc/html.php b/inc/html.php
index 36bd25e2f..85e3189ea 100644
--- a/inc/html.php
+++ b/inc/html.php
@@ -147,6 +147,7 @@ function html_secedit($text,$show=true){
/**
* displays the breadcrumbs trace
*
+ * @deprecated
* @author Andreas Gohr <andi@splitbrain.org>
*/
function html_breadcrumbs(){
@@ -169,6 +170,7 @@ function html_breadcrumbs(){
/**
* display the HTML head and metadata
*
+ * @deprecated -> tpl_metaheaders()
* @author Andreas Gohr <andi@splitbrain.org>
*/
function html_head(){
@@ -231,6 +233,21 @@ function html_head(){
}
/**
+ * Just the back to top button (in it's own form)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_topbtn(){
+ global $lang;
+
+ $ret = '';
+ $ret .= '<form class="button" method="get" action="#top" onsubmit="return svchk()">';
+ $ret .= '<input type="submit" value="'.htmlspecialchars($lang['btn_top']).'" class="button" ';
+ $ret .= '</form>';
+ return $ret;
+}
+
+/**
* Displays a button (using it's own form)
*
* @author Andreas Gohr <andi@splitbrain.org>
diff --git a/inc/init.php b/inc/init.php
index 46046ab29..abedbfbbf 100644
--- a/inc/init.php
+++ b/inc/init.php
@@ -20,6 +20,10 @@
// define main script
if(!defined('DOKU_SCRIPT')) define('DOKU_SCRIPT','doku.php');
+ // define Template baseURL
+ if(!defined('DOKU_TPL')) define('DOKU_TPL',
+ DOKU_BASE.'tpl/'.$conf['template'].'/');
+
// set up error reporting to sane values
error_reporting(E_ALL ^ E_NOTICE);
@@ -28,7 +32,7 @@
// init session
session_name("DokuWiki");
- session_start();
+ if (!headers_sent()) session_start();
// kill magic quotes
if (get_magic_quotes_gpc()) {
diff --git a/inc/template.php b/inc/template.php
new file mode 100644
index 000000000..00de7ad67
--- /dev/null
+++ b/inc/template.php
@@ -0,0 +1,314 @@
+<?php
+/**
+ * DokuWiki template functions
+ *
+ * @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__).'/../').'/');
+ require_once(DOKU_INC.'conf/dokuwiki.php');
+
+/**
+ * Wrapper around htmlspecialchars()
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see htmlspecialchars()
+ */
+function hsc($string){
+ return htmlspecialchars($string);
+}
+
+/**
+ * print a newline terminated string
+ *
+ * You can give an indention as optional parameter
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function ptln($string,$intend=0){
+ for($i=0; $i<$intend; $i++) print ' ';
+ print"$string\n";
+}
+
+/**
+ * Print the content
+ *
+ * This function is used for printing all the usual content
+ * (defined by the global $ACT var) by calling the appropriate
+ * outputfunction(s) from html.php
+ *
+ * Everything that doesn't use the default template isn't
+ * handled by this function. ACL stuff is not done either.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_content(){
+ global $ACT;
+ global $TEXT;
+ global $PRE;
+ global $SUF;
+ global $SUM;
+ global $IDX;
+ global $lang;
+
+ switch($ACT){
+ case 'show':
+ html_show();
+ break;
+ case $lang['btn_preview']:
+ html_edit($TEXT);
+ html_show($TEXT);
+ break;
+ case 'edit':
+ html_edit();
+ break;
+ case 'wordblock':
+ html_edit($TEXT,'wordblock');
+ break;
+ case 'search':
+ html_search();
+ break;
+ case 'revisions':
+ html_revisions();
+ break;
+ case 'diff':
+ html_diff();
+ break;
+ case 'recent':
+ html_recent();
+ break;
+ case 'index':
+ html_index($IDX); #FIXME can this be pulled from globals? is it sanitized correctly?
+ break;
+ case 'backlink':
+ html_backlinks();
+ break;
+ case 'conflict':
+ html_conflict(con($PRE,$TEXT,$SUF),$SUM);
+ html_diff(con($PRE,$TEXT,$SUF),false);
+ break;
+ case 'locked':
+ html_locked($lockedby);
+ break;
+ case 'login':
+ html_login();
+ break;
+ case 'register':
+ #FIXME check for $conf['openregister']) needs to be done first!!
+ html_register();
+ break;
+ default:
+ print "Uhm... Where am I? This shouldn't happen";
+ }
+}
+
+
+
+/**
+ * Print the correct HTML meta headers
+ *
+ * This has to go into the head section of your template.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_metaheaders(){
+ global $ID;
+ global $INFO;
+ global $ACT;
+ global $lang;
+ $it=2;
+
+ // the usual stuff
+ ptln('<meta name="generator" content="DokuWiki '.getVersion().'" />',$it);
+ ptln('<link rel="start" href="'.DOKU_BASE.'" />',$it);
+ ptln('<link rel="contents" href="'.wl($ID,'do=index').'" title="'.$lang['index'].'" />',$it);
+ ptln('<link rel="alternate" type="application/rss+xml" title="Recent Changes" href="'.DOKU_BASE.'feed.php" />',$it);
+ 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.'style.css" />',$it);
+
+ // setup robot tags apropriate for different modes
+ if( ($ACT=='show' || $ACT=='export_html') && !$REV){
+ if($INFO['exists']){
+ ptln('<meta name="date" content="'.date('Y-m-d\TH:i:sO',$INFO['lastmod']).'" />',$it);
+ //delay indexing:
+ if((time() - $INFO['lastmod']) >= $conf['indexdelay']){
+ ptln('<meta name="robots" content="index,follow" />',$it);
+ }else{
+ ptln('<meta name="robots" content="noindex,nofollow" />',$it);
+ }
+ }else{
+ ptln('<meta name="robots" content="noindex,follow" />',$it);
+ }
+ }else{
+ ptln('<meta name="robots" content="noindex,nofollow" />',$it);
+ }
+
+ // include some JavaScript language strings
+ ptln('<script language="JavaScript" type="text/javascript">',$it);
+ ptln(" var alertText = '".$lang['qb_alert']."'",$it);
+ ptln(" var notSavedYet = '".$lang['notsavedyet']."'",$it);
+ ptln(" var DOKU_BASE = '".DOKU_BASE."'",$it);
+ ptln('</script>',$it);
+
+ // load the default JavaScript file
+ ptln('<script language="JavaScript" type="text/javascript" src="'.DOKU_BASE.'script.js"></script>',$it);
+
+
+ //FIXME include some default CSS ? IE FIX?
+}
+
+/**
+ * Print a link
+ *
+ * Just builds a link but adds additional JavaScript needed for
+ * the unsaved data check needed in the edit form.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_link($url,$name,$more=''){
+ print '<a href="'.$url.'" onclick="return svchk()" onkeypress="return svchk()"';
+ if ($more) print ' '.$more;
+ print ">$name</a>";
+}
+
+/**
+ * Print one of the buttons
+ *
+ * Available Buttons are
+ *
+ * edit - edit/create/show button
+ * history - old revisions
+ * recent - recent changes
+ * login - login/logout button - if ACL enabled
+ * index - The index
+ * top - a back to top button
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_button($type){
+ global $ID;
+ global $conf;
+
+ switch($type){
+ case 'edit':
+ print html_editbutton();
+ break;
+ case 'history':
+ print html_btn(revs,$ID,'o',array('do' => 'revisions'));
+ break;
+ case 'recent':
+ print html_btn(recent,'','r',array('do' => 'recent'));
+ break;
+ case 'index':
+ print html_btn(index,$ID,'x',array('do' => 'index'));
+ break;
+ case 'top':
+ print html_topbtn();
+ break;
+ case 'login':
+ if($conf['useacl']){
+ if($_SERVER['REMOTE_USER']){
+ print html_btn('logout',$ID,'',array('do' => 'logout',));
+ }else{
+ print html_btn('login',$ID,'',array('do' => 'login'));
+ }
+ }
+ break;
+ }
+}
+
+/**
+ * Print the search form
+ *
+ * @todo svcheck missing
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_searchform(){
+ global $lang;
+ print '<form action="'.wl().'" accept-charset="utf-8" class="search">';
+ print '<input type="hidden" name="do" value="search" />';
+ print '<input type="text" accesskey="f" name="id" class="edit" />';
+ print '<input type="submit" value="'.$lang['btn_search'].'" class="button" />';
+ print '</form>';
+}
+
+/**
+ * Print the breadcrumbs trace
+ *
+ * @todo add a hierachical breadcrumb function
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_breadcrumbs(){
+ global $lang;
+ global $conf;
+
+ //check if enabled
+ if(!$conf['breadcrumbs']) return;
+
+ $crumbs = breadcrumbs(); //setup crumb trace
+ print $lang['breadcrumb'].':';
+ foreach ($crumbs as $crumb){
+ print ' &raquo; ';
+ tpl_link(wl($crumb),noNS($crumb),'class="breadcrumbs" title="'.$crumb.'"');
+ }
+}
+
+/**
+ * Print info if the user is logged in
+ *
+ * Could be enhanced with a profile link in future?
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_userinfo(){
+ global $lang;
+ if($_SERVER['REMOTE_USER'])
+ print $lang['loggedinas'].': '.$_SERVER['REMOTE_USER'];
+}
+
+/**
+ * Print some info about the current page
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_pageinfo(){
+ global $conf;
+ global $lang;
+ global $INFO;
+ global $REV;
+
+ // prepare date and path
+ $fn = $INFO['filepath'];
+ if(!$conf['fullpath']){
+ if($REV){
+ $fn = str_replace(realpath($conf['olddir']).DIRECTORY_SEPARATOR,'',$fn);
+ }else{
+ $fn = str_replace(realpath($conf['datadir']).DIRECTORY_SEPARATOR,'',$fn);
+ }
+ }
+ $date = date($conf['dformat'],$INFO['lastmod']);
+
+ // print it
+ if($INFO['exists']){
+ print $fn;
+ print ' &middot; ';
+ print $lang['lastmod'];
+ print ': ';
+ print $date;
+ if($INFO['editor']){
+ print ' '.$lang['by'].' ';
+ print $INFO['editor'];
+ }
+ if($INFO['locked']){
+ print ' &middot; ';
+ print $lang['lockedby'];
+ print ': ';
+ print $INFO['locked'];
+ }
+ }
+}
+
+?>
diff --git a/media.php b/media.php
index 7413a2b7a..7d67f971e 100644
--- a/media.php
+++ b/media.php
@@ -1,6 +1,6 @@
<?php
if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__)).'/');
- require_once(DOKU_INC.'conf/init.php');
+ require_once(DOKU_INC.'inc/init.php');
require_once(DOKU_INC.'inc/common.php');
require_once(DOKU_INC.'lang/en/lang.php');
require_once(DOKU_INC.'lang/'.$conf['lang'].'/lang.php');
diff --git a/style.css b/style.css
index 516328c50..4e19909bf 100644
--- a/style.css
+++ b/style.css
@@ -1,169 +1,5 @@
-body {
- font: 80% "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
- background-color: White;
- color: Black;
- margin: 0;
- padding: 0;
-}
-
div.clearer {clear: both; line-height: 0; height: 0;}
-table {
- font-size: 100%;
- padding:0;
- margin:0;
-}
-
-tr,td,th {padding:0; margin:0;}
-
-img {border:0}
-
-p {padding:0; margin: 0 0 1.0em 0;}
-
-hr {
- border: 0px;
- border-top: 1px solid #8cacbb;
- text-align:center;
- height: 0px;
-}
-
-form {
- border: none;
- margin: 0;
- display: inline;
-}
-
-label {
- display: block;
- text-align: right;
- font-weight: bold;
-}
-
-label.simple {
- text-align: left;
- font-weight: normal;
-}
-
-label input.edit {
- width: 50%;
-}
-
-fieldset {
- width: 300px;
- text-align: center;
- border: 1px solid #8cacbb;
- padding: 0.5em;
-}
-
-
-a {
- color:#436976;
- text-decoration:none;
-}
-a:hover {
- color:#000000;
- text-decoration:underline;
-}
-
-textarea.edit {
- font-family:monospace;
- border: 1px solid #8cacbb;
- color: Black;
- background-color: white;
- font-size:14px;
- padding: 3px;
- width:100%;
-}
-
-input.edit {
- font-size: 100%;
- border: 1px solid #8cacbb;
- height: 22px ! important;
- max-height: 22px ! important;
- min-height: 22px ! important;
- color: Black;
- background-color: white;
- vertical-align: middle;
- padding: 1px;
- display: inline;
-}
-
-input.missing {
- font-size: 100%;
- border: 1px solid #8cacbb;
- height: 22px ! important;
- max-height: 22px ! important;
- min-height: 22px ! important;
- color: Black;
- background-color: #ffcccc;
- vertical-align: middle;
- padding: 1px;
- display: inline;
-}
-
-input.button {
- border: 1px solid #8cacbb;
- color: Black;
- background-color: white;
- vertical-align: middle;
- text-decoration:none;
- font-size: 100%;
- cursor: pointer;
- height: 22px ! important;
- max-height: 22px ! important;
- min-height: 22px ! important;
- margin: 1px;
- display: inline;
-}
-
-div.secedit input.button {
- border: 1px solid #8cacbb;
- color: Black;
- background-color: white;
- vertical-align: middle;
- text-decoration:none;
- margin: 0px;
- padding: 0px;
- font-size: 10px;
- cursor: pointer;
- height: 15px;
- max-height: 15px ! important;
- min-height: 15px ! important;
- float:right;
- display: inline;
-}
-
-div.meta {
- clear: both;
- margin-top: 1em;
- color:#436976;
- font-size:70%;
- text-align:right;
-}
-
-div.user {
- float:left;
-}
-
-div.preview{
- background:#f7f9fa;
- margin-left:2em;
- padding: 4px;
- border: 1px dashed #000000;
-}
-
-div.breadcrumbs{
- background-color: #f5f5f5;
- font-size:80%;
- color: #666666;
- padding-left: 4px;
-}
-
-span.user{
- color: #cccccc;
- font-size: 90%;
-}
-
div.error{
background: #ff6666 url(images/error.png) 0.5em 0px no-repeat;
font-size: 90%;
@@ -185,497 +21,6 @@ div.success{
padding-left: 3em;
}
-/* ---------------------------- Diff rendering --------------------------*/
-table.diff { background:white; }
-td.diff-blockheader {font-weight:bold}
-td.diff-header {
- border-bottom: 1px solid #8cacbb;
- font-size:120%;
-}
-td.diff-addedline {
- background:#ddffdd;
- font-family: monospace;
- font-size: 100%;
-}
-td.diff-deletedline {
- background:#ffffbb;
- font-family: monospace;
- font-size: 100%;
-}
-td.diff-context {
- background:#f7f9fa;
- font-family: monospace;
- font-size: 100%;
-}
-span.diffchange { color: red; }
-
-
-
-/* --------------------- Text formatting -------------------------------- */
-
-/* external link */
-a.urlextern{
- background: transparent url(images/link_icon.gif) 0px 1px no-repeat;
- padding: 1px 0px 1px 16px;
- color:#436976;
- text-decoration:none;
-}
-a.urlextern:visited {
- color:Purple;
-}
-a.urlextern:hover {
- text-decoration:underline;
-}
-
-/* windows share */
-a.windows{
- background: transparent url(images/windows.gif) 0px 1px no-repeat;
- padding: 1px 0px 1px 16px;
- color:#436976;
- text-decoration:none;
-}
-a.windows:visited {
- color:Purple;
-}
-a.windows:hover {
- text-decoration:underline;
-}
-
-/* interwiki link */
-a.interwiki{
- background: transparent url(images/interwiki.png) 0px 1px no-repeat;
- padding: 1px 0px 1px 16px;
- color:#436976;
- text-decoration:none;
-}
-a.interwiki:visited {
- color:Purple;
-}
-a.interwiki:hover {
- text-decoration:underline;
-}
-
-/* link to some embedded media */
-a.media {
- color:#436976;
- text-decoration:none;
-}
-a.media:hover {
- color:#436976;
- text-decoration:underline
-}
-
-/* embedded images */
-img.media {
- margin: 3px;
-}
-
-img.medialeft {
- border: 0;
- float: left;
- margin: 0 1.5em 0 0;
-}
-
-img.mediaright {
- border: 0;
- float: right;
- margin: 0 0 0 1.5em;
-}
-
-/* email link */
-a.mail {
- background: transparent url(images/mail_icon.gif) 0px 1px no-repeat;
- padding: 1px 0px 1px 16px;
- color:#436976;
- text-decoration:none;
-}
-a.mail:hover {
- text-decoration:underline;
-}
-
-/* existing wikipage */
-a.wikilink1:link { color:#009900; text-decoration:none }
-a.wikilink1:visited { color:#009900; text-decoration:none }
-a.wikilink1:hover { color:#009900; text-decoration:underline }
-
-/* not exisitng wikipage */
-a.wikilink2:link { color:#FF3300; text-decoration:none }
-a.wikilink2:visited { color:#FF3300; text-decoration:none }
-a.wikilink2:hover { color:#FF3300; text-decoration:underline }
-
-acronym {
- cursor: help;
- border-bottom: 1px dotted #000;
-}
-
-/* the document */
-div.page {
- margin-top: 4px;
- margin-left: 1em;
- margin-right: 2em;
- text-align: justify;
-}
-
-/* general headline setup */
-h1, h2, h3, h4, h5 {
- color: Black;
- background-color: transparent;
- font-family: "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
- font-size: 100%;
- font-weight: normal;
- margin-left: 0;
- margin-right: 0;
- margin-top: 0;
- margin-bottom: 1em;
- padding-left: 0;
- padding-right: 0;
- padding-top: 0.5em;
- padding-bottom: 0;
- border-bottom: 1px solid #8cacbb;
- clear: left;
-}
-
-/* special headlines */
-h1 {font-size: 160%; margin-left: 0px; font-weight: bold;}
-h2 {font-size: 150%; margin-left: 20px;}
-h3 {font-size: 140%; margin-left: 40px; border-bottom: none; font-weight: bold;}
-h4 {font-size: 120%; margin-left: 60px; border-bottom: none; font-weight: bold;}
-h5 {font-size: 100%; margin-left: 80px; border-bottom: none; font-weight: bold;}
-
-/* indent different sections */
-div.level1 {margin-left: 3px;}
-div.level2 {margin-left: 23px;}
-div.level3 {margin-left: 43px;}
-div.level4 {margin-left: 63px;}
-div.level5 {margin-left: 83px;}
-
-/* unordered lists */
-ul {
- line-height: 1.5em;
- list-style-type: square;
- margin: 0.5em 0 0.5em 1.5em;
- padding: 0;
- list-style-image: url(images/bullet.gif);
-}
-
-/* ordered lists */
-ol {
- line-height: 1.5em;
- margin: 0.5em 0 0.5em 1.5em;
- padding: 0;
- color: #638c9c;
- font-weight: bold;
- list-style-image: none;
-}
-
-/* the list items overriding the ol definition */
-span.li {
- color: #000000;
- font-weight: normal;
-}
-
-li.open {
- list-style-image: url(images/open.gif);
-}
-
-li.closed {
- list-style-image: url(images/closed.gif);
-}
-
-.quote {
- border-left: 2px solid #8cacbb;
- padding-left: 3px;
-}
-
-/* code blocks by indention */
-pre.pre {
- font-size: 120%;
- padding: 0.5em;
- border: 1px dashed #8cacbb;
- color: Black;
- background-color: #f7f9fa;
- overflow: auto;
-}
-
-/* code blocks by code tag */
-pre.code {
- font-size: 120%;
- padding: 0.5em;
- border: 1px dashed #8cacbb;
- color: Black;
- background-color: #f7f9fa;
- overflow: auto;
-}
-
-/* code highlighting is at bottom of file */
-
-/* inline code words */
-code {
- font-size: 120%;
-}
-
-/* code blocks by file tag */
-pre.file {
- font-size: 120%;
- padding: 0.5em;
- border: 1px dashed #8cacbb;
- color: Black;
- background-color: #dee7ec;
- overflow: auto;
-}
-
-/* footnotes */
-div.footnotes{
- clear:both;
- border-top: 1px solid #8cacbb;
- padding-left: 1em;
- margin-top: 1em;
-}
-
-div.fn{
- font-size:90%;
-}
-
-a.fn_top{
- vertical-align:super;
- font-size:80%;
-}
-
-a.fn_bot{
- vertical-align:super;
- font-size:80%;
- font-weight:bold;
-}
-
-/* inline tables */
-table.inline {
- background-color: #ffffff;
- border-spacing: 0px;
- border-collapse: collapse;
-}
-
-table.inline th {
- padding: 3px;
- border: 1px solid #8cacbb;
- background-color: #dee7ec;
-}
-
-table.inline td {
- padding: 3px;
- border: 1px solid #8cacbb;
-}
-
-.leftalign{
- text-align: left;
-}
-
-.centeralign{
- text-align: center;
-}
-
-.rightalign{
- text-align: right;
-}
-
-/* ---------- table of contents ------------------- */
-
-div.toc {
- margin-left: 2em;
- margin-top: 1.2em;
- margin-bottom: 0;
- float:right;
- width: 200px;
- font-size: 80%;
- clear:both;
-}
-
-div.tocheader {
- padding: 3px;
- border: 1px solid #8cacbb;
- background-color: #dee7ec;
- text-align: left;
- font-weight:bold;
- margin-bottom: 2px;
-}
-
-#tocinside {
- border: 1px solid #8cacbb;
- background-color: #ffffff;
- text-align: left;
- padding-top: 0.5em;
- padding-bottom: 0.7em;
-}
-
-ul.toc {
- list-style-type: none;
- list-style-image: none;
- line-height: 1.2em;
- margin: 0;
- padding: 0;
- padding-left: 1em;
-}
-
-ul.toc li {
- background: transparent url(images/tocdot2.gif) 0 0.6em no-repeat;
- padding-left:0.4em;
-}
-
-ul.toc li.clear {
-/* background: transparent url(images/blank.gif) 0 0.6em no-repeat;*/
- background-image: none;
- padding-left:0.4em;
-}
-
-a.toc {
- color: #436976;
- text-decoration:none;
-}
-
-a.toc:hover {
- color: #000000;
- text-decoration:underline;
-}
-
-/* --------------- search result formating --------------- */
-.search_result{
- margin-bottom: 6px;
- padding-left: 30px;
- padding-right: 10px;
-}
-
-.search_snippet{
- color: #999999;
- font-size: 12px;
- margin-left: 20px;
-}
-
-.search_sep{
- color: #000000;
-}
-
-.search_hit{
- color: #000000;
- background: #FFFF99;
-}
-
-div.search_quickresult{
- margin-bottom: 15px;
- padding-bottom: 5px;
- border-bottom: 1px dashed #8cacbb;
- margin-left: 30px;
- padding-right: 10px;
-}
-
-div.search_quickhits {
- margin-left: 1em;
- float:left;
- background: transparent url(images/bullet.gif) 0px 1px no-repeat;
- padding: 1px 0px 1px 8px;
- width: 30%;
-}
-
-/* debug */
-pre.dbg{
- background-color:#ffffff;
- font-size: 120%;
-}
-
-/* Tableless Headers and Footers */
-/* Thanks to "moraes" <moraes@tipos.com.br> */
-
-.header {
- height:35px;
- padding:3px 0 2px 2px;
-}
-
-.pagename {
- height:25px;
- float:left;
- font-size:200%;
- font-weight:bolder;
- color:#DEE7EC;
- text-align:left;
- vertical-align:middle;
- padding:1px 0 0 1px;
-}
-
-.pagename a:link, .pagename a:visited {
- color:#436976;
- text-decoration:none;
-}
-
-.pagename a:hover, .pagename a:active {
- color:#FF9933;
-}
-
-.logo {
- float:right;
- font-size:220%;
- font-weight:bolder;
- text-align:right;
- vertical-align:middle;
-}
-
-.logo a:link, .logo a:visited, .logo a:hover, .logo a:active {
- color:#dee7ec;
- text-decoration:none;
- font-variant:small-caps;
- letter-spacing:2pt;
-}
-
-.bar {
- height:25px;
- border-top:1px solid #8CACBB;
- border-bottom:1px solid #8CACBB;
- background:#DEE7EC;
- padding:2px;
- margin:0;
-}
-
-.bar-left {
- float:left;
- width:50%;
-}
-
-.bar-right {
- float:right;
- width:50%;
- text-align:right;
-}
-
-#bar_bottom {
- margin-bottom:3px;
-}
-
-.mediaselect-left {
- float:left;
- padding: 0.5em;
- height:230px;
- overflow:auto;
-}
-
-.mediaselect-right {
- float:right;
- border-left: 1px solid #8cacbb;
- padding: 0.5em;
- width:350px;
- height:230px;
- overflow:auto;
-}
-
-div.uploadform {
- margin-top: 0.5em;
- border-top: 1px solid #8cacbb;
-}
-
-.footerinc a img {
- opacity: 0.5;
-}
-
-.footerinc a:hover img {
- opacity: 1;
-}
-
/* syntax highlighting code */
.code .br0 { color: #66cc66; }
.code .co1 { color: #808080; font-style: italic; }
@@ -697,4 +42,3 @@ div.uploadform {
.code .sc1 { color: #ddbb00; }
.code .sc2 { color: #009900; }
.code .st0 { color: #ff0000; }
-
diff --git a/tpl/default/design.css b/tpl/default/design.css
new file mode 100644
index 000000000..2a428a1e5
--- /dev/null
+++ b/tpl/default/design.css
@@ -0,0 +1,562 @@
+/**
+ * Design elements for default Template
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <henke@cosmocode.de>
+ */
+
+/* -------------- general elements --------------- */
+
+body {
+ font: 80% "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ background-color: White;
+ color: Black;
+ margin: 0;
+ padding: 0;
+}
+
+/* the document */
+div.page {
+ margin-top: 4px;
+ margin-left: 1em;
+ margin-right: 2em;
+ text-align: justify;
+}
+
+table {
+ font-size: 100%;
+ padding:0;
+ margin:0;
+}
+
+tr,td,th {padding:0; margin:0;}
+
+img {border:0}
+
+p {padding:0; margin: 0 0 1.0em 0;}
+
+hr {
+ border: 0px;
+ border-top: 1px solid #8cacbb;
+ text-align:center;
+ height: 0px;
+}
+
+/* ---------------- forms ------------------------ */
+
+form {
+ border: none;
+ margin: 0;
+ display: inline;
+}
+
+label {
+ display: block;
+ text-align: right;
+ font-weight: bold;
+}
+
+label.simple {
+ text-align: left;
+ font-weight: normal;
+}
+
+label input.edit {
+ width: 50%;
+}
+
+fieldset {
+ width: 300px;
+ text-align: center;
+ border: 1px solid #8cacbb;
+ padding: 0.5em;
+}
+
+textarea.edit {
+ font-family:monospace;
+ border: 1px solid #8cacbb;
+ color: Black;
+ background-color: white;
+ font-size:14px;
+ padding: 3px;
+ width:100%;
+}
+
+input.edit {
+ font-size: 100%;
+ border: 1px solid #8cacbb;
+ height: 22px !important;
+ max-height: 22px !important;
+ min-height: 22px !important;
+ color: Black;
+ background-color: white;
+ vertical-align: middle;
+ padding: 1px;
+ display: inline;
+}
+
+input.missing {
+ font-size: 100%;
+ border: 1px solid #8cacbb;
+ height: 22px !important;
+ max-height: 22px !important;
+ min-height: 22px !important;
+ color: Black;
+ background-color: #ffcccc;
+ vertical-align: middle;
+ padding: 1px;
+ display: inline;
+}
+
+/* --------- buttons ------------------- */
+
+
+input.button {
+ border: 1px solid #8cacbb;
+ color: Black;
+ background-color: white;
+ vertical-align: middle;
+ text-decoration:none;
+ font-size: 100%;
+ cursor: pointer;
+ height: 22px !important;
+ max-height: 22px !important;
+ min-height: 22px !important;
+ margin: 1px;
+ display: inline;
+}
+
+div.secedit input.button {
+ border: 1px solid #8cacbb;
+ color: Black;
+ background-color: white;
+ vertical-align: middle;
+ text-decoration:none;
+ margin: 0px;
+ padding: 0px;
+ font-size: 10px;
+ cursor: pointer;
+ height: 15px;
+ max-height: 15px !important;
+ min-height: 15px !important;
+ float:right;
+ display: inline;
+}
+
+/* --------------- Links ------------------ */
+
+a {
+ color:#436976;
+ text-decoration:none;
+}
+a:hover {
+ color:#000000;
+ text-decoration:underline;
+}
+
+/* external link */
+a.urlextern{
+ background: transparent url(images/link_icon.gif) 0px 1px no-repeat;
+ padding: 1px 0px 1px 16px;
+ color:#436976;
+ text-decoration:none;
+}
+a.urlextern:visited {
+ color:Purple;
+}
+a.urlextern:hover {
+ text-decoration:underline;
+}
+
+/* windows share */
+a.windows{
+ background: transparent url(images/windows.gif) 0px 1px no-repeat;
+ padding: 1px 0px 1px 16px;
+ color:#436976;
+ text-decoration:none;
+}
+a.windows:visited {
+ color:Purple;
+}
+a.windows:hover {
+ text-decoration:underline;
+}
+
+/* interwiki link */
+a.interwiki{
+ background: transparent url(images/interwiki.png) 0px 1px no-repeat;
+ padding: 1px 0px 1px 16px;
+ color:#436976;
+ text-decoration:none;
+}
+a.interwiki:visited {
+ color:Purple;
+}
+a.interwiki:hover {
+ text-decoration:underline;
+}
+
+/* link to some embedded media */
+a.media {
+ color:#436976;
+ text-decoration:none;
+}
+a.media:hover {
+ color:#436976;
+ text-decoration:underline
+}
+
+/* email link */
+a.mail {
+ background: transparent url(images/mail_icon.gif) 0px 1px no-repeat;
+ padding: 1px 0px 1px 16px;
+ color:#436976;
+ text-decoration:none;
+}
+a.mail:hover {
+ text-decoration:underline;
+}
+
+/* existing wikipage */
+a.wikilink1:link { color:#009900; text-decoration:none }
+a.wikilink1:visited { color:#009900; text-decoration:none }
+a.wikilink1:hover { color:#009900; text-decoration:underline }
+
+/* not existing wikipage */
+a.wikilink2:link { color:#FF3300; text-decoration:none }
+a.wikilink2:visited { color:#FF3300; text-decoration:none }
+a.wikilink2:hover { color:#FF3300; text-decoration:underline }
+
+
+/* ------------- Page elements ----------------- */
+
+div.preview{
+ background:#f7f9fa;
+ margin-left:2em;
+ padding: 4px;
+ border: 1px dashed #000000;
+}
+
+div.breadcrumbs{
+ background-color: #f5f5f5;
+ font-size:80%;
+ color: #666666;
+ padding-left: 4px;
+}
+
+span.user{
+ color: #cccccc;
+ font-size: 90%;
+}
+
+/* embedded images */
+img.media {
+ margin: 3px;
+}
+
+img.medialeft {
+ border: 0;
+ float: left;
+ margin: 0 1.5em 0 0;
+}
+
+img.mediaright {
+ border: 0;
+ float: right;
+ margin: 0 0 0 1.5em;
+}
+
+acronym {
+ cursor: help;
+ border-bottom: 1px dotted #000;
+}
+
+/* general headline setup */
+h1, h2, h3, h4, h5 {
+ color: Black;
+ background-color: transparent;
+ font-family: "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ font-size: 100%;
+ font-weight: normal;
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ margin-bottom: 1em;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0.5em;
+ padding-bottom: 0;
+ border-bottom: 1px solid #8cacbb;
+ clear: left;
+}
+
+/* special headlines */
+h1 {font-size: 160%; margin-left: 0px; font-weight: bold;}
+h2 {font-size: 150%; margin-left: 20px;}
+h3 {font-size: 140%; margin-left: 40px; border-bottom: none; font-weight: bold;}
+h4 {font-size: 120%; margin-left: 60px; border-bottom: none; font-weight: bold;}
+h5 {font-size: 100%; margin-left: 80px; border-bottom: none; font-weight: bold;}
+
+/* indent different sections */
+div.level1 {margin-left: 3px;}
+div.level2 {margin-left: 23px;}
+div.level3 {margin-left: 43px;}
+div.level4 {margin-left: 63px;}
+div.level5 {margin-left: 83px;}
+
+/* unordered lists */
+ul {
+ line-height: 1.5em;
+ list-style-type: square;
+ margin: 0.5em 0 0.5em 1.5em;
+ padding: 0;
+ list-style-image: url(images/bullet.gif);
+}
+
+/* ordered lists */
+ol {
+ line-height: 1.5em;
+ margin: 0.5em 0 0.5em 1.5em;
+ padding: 0;
+ color: #638c9c;
+ font-weight: bold;
+ list-style-image: none;
+}
+
+/* the list items overriding the ol definition */
+span.li {
+ color: #000000;
+ font-weight: normal;
+}
+
+li.open {
+ list-style-image: url(images/open.gif);
+}
+
+li.closed {
+ list-style-image: url(images/closed.gif);
+}
+
+.quote {
+ border-left: 2px solid #8cacbb;
+ padding-left: 3px;
+}
+
+/* code blocks by indention */
+pre.pre {
+ font-size: 120%;
+ padding: 0.5em;
+ border: 1px dashed #8cacbb;
+ color: Black;
+ background-color: #f7f9fa;
+ overflow: auto;
+}
+
+/* code blocks by code tag */
+pre.code {
+ font-size: 120%;
+ padding: 0.5em;
+ border: 1px dashed #8cacbb;
+ color: Black;
+ background-color: #f7f9fa;
+ overflow: auto;
+}
+
+/* inline code words */
+code {
+ font-size: 120%;
+}
+
+/* code blocks by file tag */
+pre.file {
+ font-size: 120%;
+ padding: 0.5em;
+ border: 1px dashed #8cacbb;
+ color: Black;
+ background-color: #dee7ec;
+ overflow: auto;
+}
+
+/* inline tables */
+table.inline {
+ background-color: #ffffff;
+ border-spacing: 0px;
+ border-collapse: collapse;
+}
+
+table.inline th {
+ padding: 3px;
+ border: 1px solid #8cacbb;
+ background-color: #dee7ec;
+}
+
+table.inline td {
+ padding: 3px;
+ border: 1px solid #8cacbb;
+}
+
+.leftalign{
+ text-align: left;
+}
+
+.centeralign{
+ text-align: center;
+}
+
+.rightalign{
+ text-align: right;
+}
+
+/* ---------- table of contents ------------------- */
+
+div.toc {
+ margin-left: 2em;
+ margin-top: 1.2em;
+ margin-bottom: 0;
+ float:right;
+ width: 200px;
+ font-size: 80%;
+ clear:both;
+}
+
+div.tocheader {
+ padding: 3px;
+ border: 1px solid #8cacbb;
+ background-color: #dee7ec;
+ text-align: left;
+ font-weight:bold;
+ margin-bottom: 2px;
+}
+
+#tocinside {
+ border: 1px solid #8cacbb;
+ background-color: #ffffff;
+ text-align: left;
+ padding-top: 0.5em;
+ padding-bottom: 0.7em;
+}
+
+ul.toc {
+ list-style-type: none;
+ list-style-image: none;
+ line-height: 1.2em;
+ margin: 0;
+ padding: 0;
+ padding-left: 1em;
+}
+
+ul.toc li {
+ background: transparent url(images/tocdot2.gif) 0 0.6em no-repeat;
+ padding-left:0.4em;
+}
+
+ul.toc li.clear {
+ background-image: none;
+ padding-left:0.4em;
+}
+
+a.toc {
+ color: #436976;
+ text-decoration:none;
+}
+
+a.toc:hover {
+ color: #000000;
+ text-decoration:underline;
+}
+
+/* ---------------------------- Diff rendering --------------------------*/
+table.diff { background:white; }
+td.diff-blockheader {font-weight:bold}
+td.diff-header {
+ border-bottom: 1px solid #8cacbb;
+ font-size:120%;
+}
+td.diff-addedline {
+ background:#ddffdd;
+ font-family: monospace;
+ font-size: 100%;
+}
+td.diff-deletedline {
+ background:#ffffbb;
+ font-family: monospace;
+ font-size: 100%;
+}
+td.diff-context {
+ background:#f7f9fa;
+ font-family: monospace;
+ font-size: 100%;
+}
+span.diffchange { color: red; }
+
+/* --------------------- footnotes -------------------------------- */
+
+div.footnotes{
+ clear:both;
+ border-top: 1px solid #8cacbb;
+ padding-left: 1em;
+ margin-top: 1em;
+}
+
+div.fn{
+ font-size:90%;
+}
+
+a.fn_top{
+ vertical-align:super;
+ font-size:80%;
+}
+
+a.fn_bot{
+ vertical-align:super;
+ font-size:80%;
+ font-weight:bold;
+}
+
+
+/* --------------- search result formating --------------- */
+.search_result{
+ margin-bottom: 6px;
+ padding-left: 30px;
+ padding-right: 10px;
+}
+
+.search_snippet{
+ color: #999999;
+ font-size: 12px;
+ margin-left: 20px;
+}
+
+.search_sep{
+ color: #000000;
+}
+
+.search_hit{
+ color: #000000;
+ background: #FFFF99;
+}
+
+div.search_quickresult{
+ margin-bottom: 15px;
+ padding-bottom: 5px;
+ border-bottom: 1px dashed #8cacbb;
+ margin-left: 30px;
+ padding-right: 10px;
+}
+
+div.search_quickhits {
+ margin-left: 1em;
+ float:left;
+ background: transparent url(images/bullet.gif) 0px 1px no-repeat;
+ padding: 1px 0px 1px 8px;
+ width: 30%;
+}
+
+/* ------------------ Additional ---------------------- */
+.footerinc a img {
+ opacity: 0.5;
+}
+
+.footerinc a:hover img {
+ opacity: 1;
+}
diff --git a/images/bullet.gif b/tpl/default/images/bullet.gif
index b43de48a4..b43de48a4 100644
--- a/images/bullet.gif
+++ b/tpl/default/images/bullet.gif
Binary files differ
diff --git a/images/button-cc.gif b/tpl/default/images/button-cc.gif
index 5861d637f..5861d637f 100644
--- a/images/button-cc.gif
+++ b/tpl/default/images/button-cc.gif
Binary files differ
diff --git a/images/button-css.png b/tpl/default/images/button-css.png
index 706325e1c..706325e1c 100644
--- a/images/button-css.png
+++ b/tpl/default/images/button-css.png
Binary files differ
diff --git a/images/button-donate.gif b/tpl/default/images/button-donate.gif
index ec682c6b1..ec682c6b1 100644
--- a/images/button-donate.gif
+++ b/tpl/default/images/button-donate.gif
Binary files differ
diff --git a/images/button-dw.png b/tpl/default/images/button-dw.png
index 2a71bd04c..2a71bd04c 100644
--- a/images/button-dw.png
+++ b/tpl/default/images/button-dw.png
Binary files differ
diff --git a/images/button-php.gif b/tpl/default/images/button-php.gif
index 28f329aaa..28f329aaa 100644
--- a/images/button-php.gif
+++ b/tpl/default/images/button-php.gif
Binary files differ
diff --git a/images/button-rss.png b/tpl/default/images/button-rss.png
index b036f7152..b036f7152 100644
--- a/images/button-rss.png
+++ b/tpl/default/images/button-rss.png
Binary files differ
diff --git a/images/button-xhtml.png b/tpl/default/images/button-xhtml.png
index ec686442c..ec686442c 100644
--- a/images/button-xhtml.png
+++ b/tpl/default/images/button-xhtml.png
Binary files differ
diff --git a/images/closed.gif b/tpl/default/images/closed.gif
index 8414d4d69..8414d4d69 100644
--- a/images/closed.gif
+++ b/tpl/default/images/closed.gif
Binary files differ
diff --git a/images/link_icon.gif b/tpl/default/images/link_icon.gif
index 815ccb1b1..815ccb1b1 100644
--- a/images/link_icon.gif
+++ b/tpl/default/images/link_icon.gif
Binary files differ
diff --git a/images/mail_icon.gif b/tpl/default/images/mail_icon.gif
index 50a87a9a0..50a87a9a0 100644
--- a/images/mail_icon.gif
+++ b/tpl/default/images/mail_icon.gif
Binary files differ
diff --git a/images/open.gif b/tpl/default/images/open.gif
index f5d5c7e56..f5d5c7e56 100644
--- a/images/open.gif
+++ b/tpl/default/images/open.gif
Binary files differ
diff --git a/images/tocdot2.gif b/tpl/default/images/tocdot2.gif
index 3d39c2e73..3d39c2e73 100644
--- a/images/tocdot2.gif
+++ b/tpl/default/images/tocdot2.gif
Binary files differ
diff --git a/images/windows.gif b/tpl/default/images/windows.gif
index 4f12acce1..4f12acce1 100644
--- a/images/windows.gif
+++ b/tpl/default/images/windows.gif
Binary files differ
diff --git a/tpl/default/layout.css b/tpl/default/layout.css
new file mode 100644
index 000000000..c4208c2c6
--- /dev/null
+++ b/tpl/default/layout.css
@@ -0,0 +1,113 @@
+/**
+ * Tableless Layout for default template
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author moraes <moraes@tipos.com.br>
+ */
+
+
+/* -------------- top row --------------- */
+.header {
+ height:35px;
+ padding:3px 0 2px 2px;
+}
+
+.pagename {
+ height:25px;
+ float:left;
+ font-size:200%;
+ font-weight:bolder;
+ color:#DEE7EC;
+ text-align:left;
+ vertical-align:middle;
+ padding:1px 0 0 1px;
+}
+
+.pagename a:link, .pagename a:visited {
+ color:#436976;
+ text-decoration:none;
+}
+
+.pagename a:hover, .pagename a:active {
+ color:#FF9933;
+}
+
+.logo {
+ float:right;
+ font-size:220%;
+ font-weight:bolder;
+ text-align:right;
+ vertical-align:middle;
+}
+
+.logo a:link, .logo a:visited, .logo a:hover, .logo a:active {
+ color:#dee7ec;
+ text-decoration:none;
+ font-variant:small-caps;
+ letter-spacing:2pt;
+}
+
+/* --------------- top and bottom bar ---------------- */
+.bar {
+ height:25px;
+ border-top:1px solid #8CACBB;
+ border-bottom:1px solid #8CACBB;
+ background:#DEE7EC;
+ padding:2px;
+ margin:0;
+}
+
+.bar-left {
+ float:left;
+ width:50%;
+}
+
+.bar-right {
+ float:right;
+ width:50%;
+ text-align:right;
+}
+
+#bar_bottom {
+ margin-bottom:3px;
+}
+
+/* ------------- File Metadata ----------------------- */
+
+div.meta {
+ clear: both;
+ margin-top: 1em;
+ color:#436976;
+ font-size:70%;
+}
+
+div.meta div.user {
+ float:left;
+}
+
+div.meta div.doc{
+ text-align:right;
+}
+
+/* --------------- Media Selection ----------------- */
+
+div.uploadform {
+ margin-top: 0.5em;
+ border-top: 1px solid #8cacbb;
+}
+
+.mediaselect-left {
+ float:left;
+ padding: 0.5em;
+ height:230px;
+ overflow:auto;
+}
+
+.mediaselect-right {
+ float:right;
+ border-left: 1px solid #8cacbb;
+ padding: 0.5em;
+ width:350px;
+ height:230px;
+ overflow:auto;
+}
diff --git a/tpl/default/main.php b/tpl/default/main.php
new file mode 100644
index 000000000..a19ee3217
--- /dev/null
+++ b/tpl/default/main.php
@@ -0,0 +1,110 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<?
+/**
+ * DokuWiki Default Template
+ *
+ * This is the template you need to change for the overall look
+ * of DokuWiki.
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @todo read the include hooks, add the CSS!
+ * @link http://wiki.splitbrain.org/wiki:tpl:templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?=$conf['lang']?>" lang="<?=$conf['lang']?>" dir="ltr">
+<head>
+ <title><?=$ID?> [<?=hsc($conf['title'])?>]</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+ <?tpl_metaheaders()?>
+
+ <link rel="shortcut icon" href="<?=DOKU_BASE?>images/favicon.ico" />
+ <link rel="stylesheet" media="screen" type="text/css" href="<?=DOKU_TPL?>layout.css" />
+ <link rel="stylesheet" media="screen" type="text/css" href="<?=DOKU_TPL?>design.css" />
+ <link rel="stylesheet" media="print" type="text/css" href="<?=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 */
+ img { behavior: url("<?=DOKU_BASE?>/pngbehavior.htc"); }
+ </style>
+ <![endif]-->
+</head>
+
+<body>
+<div class="dokuwiki">
+ <?html_msgarea()?>
+
+ <div class="stylehead">
+
+ <div class="header">
+ <div class="pagename">
+ [[<?tpl_link(wl($ID,'do=backlink'),$ID)?>]]
+ </div>
+ <div class="logo">
+ <?tpl_link(wl(),$conf['title'],'name="top" accesskey="h" title="[ALT+H]"')?>
+ </div>
+ </div>
+
+ <div class="bar" id="bar_top">
+ <div class="bar-left" id="bar_topleft">
+ <?tpl_button('edit')?>
+ <?tpl_button('history')?>
+ </div>
+
+ <div class="bar-right" id="bar_topright">
+ <?tpl_button('recent')?>
+ <?tpl_searchform()?>&nbsp;
+ </div>
+ </div>
+
+ <?if($conf['breadcrumbs']){?>
+ <div class="breadcrumbs">
+ <?tpl_breadcrumbs()?>
+ </div>
+ <?}?>
+
+ </div>
+ <?flush()?>
+
+ <div class="page">
+ <!-- wikipage start -->
+ <?tpl_content()?>
+ <!-- wikipage stop -->
+ </div>
+
+ <div class="clearer">&nbsp;</div>
+
+ <?flush()?>
+
+ <div class="stylefoot">
+
+ <div class="meta">
+ <div class="user">
+ <?tpl_userinfo()?>
+ </div>
+ <div class="doc">
+ <?tpl_pageinfo()?>
+ </div>
+ </div>
+
+ <div class="bar" id="bar_bottom">
+ <div class="bar-left" id="bar_bottomleft">
+ <?tpl_button('edit')?>
+ <?tpl_button('history')?>
+ </div>
+ <div class="bar-right" id="bar_bottomright">
+ <?tpl_button('login')?>
+ <?tpl_button('index')?>
+ <?tpl_button('top')?>&nbsp;
+ </div>
+ </div>
+
+ </div>
+
+</div>
+</body>
diff --git a/print.css b/tpl/default/print.css
index 77c82a580..77c82a580 100644
--- a/print.css
+++ b/tpl/default/print.css