From 1c2d1019f48fa6b2dbc154f7534341ad0869a5d7 Mon Sep 17 00:00:00 2001
From: Andreas Gohr <andi@splitbrain.org>
Date: Sun, 30 Oct 2005 16:28:28 +0100
Subject: [PATCH] Interwiki icons are set through CSS classes now

darcs-hash:20051030152828-7ad00-58a99ca20a1d6ec62612a6281034c1dd669be44d.gz
---
 inc/parser/xhtml.php                       |  19 +++-------
 lib/exe/css.php                            |  41 ++++++++++++++++++++-
 lib/exe/js.php                             |   2 +-
 lib/{tpl/default => }/images/interwiki.png | Bin
 lib/tpl/default/design.css                 |   4 +-
 5 files changed, 47 insertions(+), 19 deletions(-)
 rename lib/{tpl/default => }/images/interwiki.png (100%)

diff --git a/inc/parser/xhtml.php b/inc/parser/xhtml.php
index d0f24d26f..d62fdfff6 100644
--- a/inc/parser/xhtml.php
+++ b/inc/parser/xhtml.php
@@ -568,12 +568,6 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
         $link['more']   = '';
         $link['name']   = $this->_getLinkTitle($name, $wikiUri, $isImage);
 
-        if ( !$isImage ) {
-            $link['class'] = 'interwiki';
-        } else {
-            $link['class'] = 'media';
-        }
-
         //get interwiki URL
         if ( isset($this->interwiki[$wikiName]) ) {
             $url = $this->interwiki[$wikiName];
@@ -582,14 +576,11 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
             $url = 'http://www.google.com/search?q={URL}&amp;btnI=lucky';
             $wikiName = 'go';
         }
-       
-        if(!$isImage){
-            //if ico exists set additional style
-            if(@file_exists(DOKU_INC.'lib/images/interwiki/'.$wikiName.'.png')){
-                $link['style']='background-image: url('.DOKU_BASE.'lib/images/interwiki/'.$wikiName.'.png)';
-            }elseif(@file_exists(DOKU_INC.'lib/images/interwiki/'.$wikiName.'.gif')){
-                $link['style']='background-image: url('.DOKU_BASE.'lib/images/interwiki/'.$wikiName.'.gif)';
-            }
+
+        if ( !$isImage ) {
+            $link['class'] = "interwiki iw_$wikiName";
+        } else {
+            $link['class'] = 'media';
         }
 
         //do we stay at the same server? Use local target
diff --git a/lib/exe/css.php b/lib/exe/css.php
index 7b6523b41..a9e0efab5 100644
--- a/lib/exe/css.php
+++ b/lib/exe/css.php
@@ -7,10 +7,11 @@
  */
 
 if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
-define('NOSESSION',true); // we do not use a session or authentication here (better caching)
+if(!defined('NOSESSION')) 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');
+require_once(DOKU_INC.'inc/confutils.php');
 
 // Main (don't run when UNIT test)
 if(!defined('SIMPLE_TEST')){
@@ -64,6 +65,9 @@ function css_out(){
     // start output buffering and build the stylesheet
     ob_start();
 
+    // print the default classes for Interwikilinks
+    css_interwiki();
+
     // load files
     foreach($files as $file => $location){
         print css_loadfile($file, $location);
@@ -108,6 +112,41 @@ function css_cacheok($cache,$files){
     return true;
 }
 
+/**
+ * Prints classes for interwikilinks
+ *
+ * Interwiki links have two classes: 'interwiki' and 'iw_$name>' where
+ * $name is the identifier given in the config. All Interwiki links get
+ * an default style with a default icon. If a special icon is available
+ * for an interwiki URL it is set in it's own class. Both classes can be
+ * overwritten in the template or userstyles.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function css_interwiki(){
+
+    // default style
+    echo 'a.interwiki {';
+    echo ' background: transparent url('.DOKU_BASE.'lib/images/interwiki.png) 0px 1px no-repeat;';
+    echo ' padding-left: 16px;';
+    echo '}';
+
+    // additional styles when icon available
+    $iwlinks = getInterwiki();
+    foreach(array_keys($iwlinks) as $iw){
+        if(@file_exists(DOKU_INC.'lib/images/interwiki/'.$iw.'.png')){
+            echo "a.iw_$iw {";
+            echo '  background-image: url('.DOKU_BASE.'lib/images/interwiki/'.$iw.'.png)';
+            echo '}';
+        }elseif(@file_exists(DOKU_INC.'lib/images/interwiki/'.$iw.'.gif')){
+            echo "a.iw_$iw {";
+            echo '  background-image: url('.DOKU_BASE.'lib/images/interwiki/'.$iw.'.gif)';
+            echo '}';
+        }
+    }
+
+}
+
 /**
  * Loads a given file and fixes relative URLs with the
  * given location prefix
diff --git a/lib/exe/js.php b/lib/exe/js.php
index 9708dbc0d..b8b8c6401 100644
--- a/lib/exe/js.php
+++ b/lib/exe/js.php
@@ -7,7 +7,7 @@
  */
 
 if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
-define('NOSESSION',true); // we do not use a session or authentication here (better caching)
+if(!defined('NOSESSION')) 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');
diff --git a/lib/tpl/default/images/interwiki.png b/lib/images/interwiki.png
similarity index 100%
rename from lib/tpl/default/images/interwiki.png
rename to lib/images/interwiki.png
diff --git a/lib/tpl/default/design.css b/lib/tpl/default/design.css
index 7b84ea614..f68043fa9 100644
--- a/lib/tpl/default/design.css
+++ b/lib/tpl/default/design.css
@@ -214,10 +214,8 @@ a.windows:hover {
   text-decoration:underline;
 }
 
-/* interwiki link */
+/* interwiki link (icon are set by dokuwiki) */
 a.interwiki{
-    background: transparent url(images/interwiki.png) 0px 1px no-repeat;
-		padding-left: 16px;
     color:#436976;
     text-decoration:none;
 }
-- 
GitLab