Benutzer:Rene/SGHtml: Unterschied zwischen den Versionen

aus Stargate Wiki, dem deutschsprachigen Stargate-Lexikon
Zur Navigation springen Zur Suche springen
Hinweis auf Installation
Programmcode: Neuer Code
Zeile 23: Zeile 23:
   
   
==Programmcode==
==Programmcode==
Aktuell läuft auf Stargate-Wiki der folgende Programmcode. Die Erweiterung benutzt den MediaWiki Hook '''OutputPageBeforeHTML'''.
Aktuell läuft auf Stargate-Wiki der folgende Programmcode. Die Erweiterung benutzt die MediaWiki Hooks '''OutputPageBeforeHTML''', '''PersonalUrls''' und '''BeforePageDisplay'''.


<pre>
<pre>
Zeile 45: Zeile 45:
$wgExtensionCredits['other'][] = array(
$wgExtensionCredits['other'][] = array(
   'name' => 'SGHtml',
   'name' => 'SGHtml',
   'version' => '0.65',
   'version' => '0.75',
   'author' => '[http://www.stargate-wiki.de/index.php/User:Admin Rene Raule]',
   'author' => '[http://www.stargate-wiki.de/index.php/User:Admin Rene Raule]',
   'url' => 'http://www.stargate-wiki.de/index.php/Rene/SGHtml',
   'url' => 'http://www.stargate-wiki.de/index.php/Rene/SGHtml',
Zeile 53: Zeile 53:


$wgHooks['OutputPageBeforeHTML'][] = 'SGHtml';
$wgHooks['OutputPageBeforeHTML'][] = 'SGHtml';
$wgHooks['BeforePageDisplay'][] = 'fnSGHtmlBPD';
$wgHooks['PersonalUrls'][] = 'ShowSpoiler';
$isSpoiler = false;
// Letzte Änderungen direkt vor der Ausgabe
function fnSGHtmlBPD(&$out) {
  global $isSpoiler;
 
  $keywords = array('Stargate','Stargate SG-1','Stargate Atlantis','Stargate Universe','Stargate Lexikon');
 
  if($isSpoiler) {
    $SpoilerScript = '<script type="text/javascript">
function switchSpoiler() {
  var rows = document.getElementsByTagName("div");
  var btext = document.getElementById("bt-Spoiler");
  for(var i=0; i<rows.length; i++) {
    if(rows[i].className=="spoiler") {
      rows[i].className="spoilerOK";
      btext.innerHTML=btext.innerHTML.replace(/aufdecken/,"verdecken");
    } else {
      if(rows[i].className=="spoilerOK") {
        rows[i].className="spoiler";
        btext.innerHTML=btext.innerHTML.replace(/verdecken/,"aufdecken");
      }
    }
  }
}
</script>';
    $out->addScript($SpoilerScript);
  }
  // Weitere Meta Begriffe
  foreach($keywords as $word) {
    $out->addKeyword($word);
  }
  return true;
}
function ShowSpoiler(&$personal_urls,&$wgTitle) {
  global $isSpoiler;
 
  if($isSpoiler) {
    $ref = "javascript:switchSpoiler()";
    $text = 'Spoiler aufdecken';
    $class = 'new';
    $active = true;
    $personal_urls['Spoiler'] = array( 'text' => $text,'href' => $ref,'class' => $class, 'active' => $active );
  }
  return true;
}


function SGHtml( &$out, &$text ) {
function SGHtml( &$out, &$text ) {
    global $isSpoiler;
   
     $mTable = array(
     $mTable = array(
/* Externe Seiten in eigenem Fenster */
/* Externe Seiten in eigenem Fenster */
Zeile 82: Zeile 136:
     $text = stripslashes(preg_replace($suchen,$ersatz,$text));
     $text = stripslashes(preg_replace($suchen,$ersatz,$text));


     /* Spoiler aufdecken einbinden (geht nur im Text) */
     /* prüfen ob Spoiler vorhanden */
     if (strpos($text,'id="show_spoiler"') == true) {
     if (strpos($text,'id="show_spoiler"') == true) {
      $jscript = '<script type="text/javascript">
        $isSpoiler = true;
        function cssClassChange(welchertag,class1,class2,linkgeklickt,linknormal,thus) {
/* Button */
          var rows = document.getElementsByTagName(welchertag);
         $btext  = $jscript.'<button id="bt-Spoiler" ';
          for(var i=0; i<rows.length; i++) {
        $btext .= 'style="position:fixed; right: 15px; top: 0px; z-index:50;';
            if(rows[i].className==class1) {
$btext .= ' background-color:#fffafa; color:#4169e1;';
              rows[i].className=class2;
$btext .= ' padding: 0px 10px; font-size:x-small;"';
      thus.innerHTML=linkgeklickt;
$btext .= ' onclick="switchSpoiler()"';
            } else {
              if(rows[i].className==class2) {
        rows[i].className=class1;
        thus.innerHTML=linknormal;
      }
            }
          }
        }
        </script>';
 
         $btext  = $jscript.'<button ';
$btext .= 'style="position:fixed; left: 155px; top: 0px; z-index:50;';
$btext .= ' border: solid 1px black;';
$btext .= ' background-image:url(/skins/common/images/slice_button.gif); background-repeat: repeat-x;';
$btext .= ' padding: 0x 4x; font-size:x-small;"';
$btext .= ' onclick="cssClassChange(\'span\',\'spoiler\',\'spoilerOK\',\'Spoiler verdecken\',\'Spoiler aufdecken\',this)"';
$btext .= ' type="button"';
$btext .= ' type="button"';
$btext .= '>Spoiler aufdecken</button>';
$btext .= '>Spoiler aufdecken</button>';
$text = $btext.$text;
$text = $btext.$text;
     }
     }
   
    /* Anpassung der Seiten Parameter */
   
    // Weitere Meta Begriffe
    $out->mKeywords[] = 'Stargate';
    $out->mKeywords[] = 'Stargate SG-1';
    $out->mKeywords[] = 'Stargate Atlantis';
    $out->mKeywords[] = 'Stargate Universe';
    $out->mKeywords[] = 'Stargate Lexikon';
    $out->mKeywords[] = 'Stargate Wikipedia';
       
     return true;
     return true;
}
}

Version vom 22. März 2009, 22:07 Uhr

Mediawiki-Erweiterung um den HTML-Code vor der Auslieferung durch den Server noch zu verändern.

^Funktion

Die Erweiterung verändert der HTML Code der von MediaWiki erzeugt wird. Dabei werden die folgenden Anpassungen gemacht:

  • Externe Seiten werden in einem eigenen Fenster aufgerufen
  • Alle Überschriften der Stufe 2 (==) erhalten am rechten Rand einen ~^ als Link auf den Seitenanfang.
  • Bild Datei:Bearbeiten.png statt Text Bearbeiten um einen Abschnitt zu bearbeiten
  • Werkzeug Spoiler aufdecken als Javascript-Button einbinden wenn auf der Seite ein Spoiler benutzt wird.
  • Pfeile <~, ~>,~^ und ~V im Artikel durch Bilder (<~,~>,~^,~V) ersetzen.
Hinweis: Die Erweiterung ersetzt die Pfeile auch im Bereich <pre> und <nowiki>. Die einzige Möglichkeit dies zu verhindern besteht darin statt dem Zeichen ~ im Text den Code &#126; zu schreiben.

^Probleme

Trotz der Versionsnummer unter 1.00 läuft die Erweiterung auf Stargate-Wiki bisher ohne Probleme.

Wer einen Fehler findet bitte hier melden Danke. -- Benutzer:Rene/sig 23:16, 16. Sep. 2007 (CEST)

^Installation

Um die Erweiterung zu installieren muss der unten angegebene Code im Verzeichnis extensions/SGHtml in der Datei SGHtml.php gespeichert werden. Zusätzlich müssen die Bilder für die Pfeile in das Verzeichnis skins/common/images/16x16 gespeichert werden. Am einfachsten ist es dazu die Bilder auf dieser Seite mit dem Browser zu speichern und sie dann auf den Server zu laden.

Um die Erweiterung zu aktivieren muss dann noch die Datei LocalSetting.php um die Zeile

 require_once ( 'extensions/SGHtml/SGHtml.php' );

ergänzt werden.

^Programmcode

Aktuell läuft auf Stargate-Wiki der folgende Programmcode. Die Erweiterung benutzt die MediaWiki Hooks OutputPageBeforeHTML, PersonalUrls und BeforePageDisplay.

<?php
# Original MediaWiki HTML Code umwandeln und an StargateWiki anpassen
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or 
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.

if ( !defined( 'MEDIAWIKI' ) ) {
  die( 'This file is a MediaWiki extension, it is not a valid entry point' );
}
 
$wgExtensionCredits['other'][] = array(
  'name' => 'SGHtml',
  'version' => '0.75',
  'author' => '[http://www.stargate-wiki.de/index.php/User:Admin Rene Raule]',
  'url' => 'http://www.stargate-wiki.de/index.php/Rene/SGHtml',
  'description' => 'MediaWiki Html veräendern um Stargate-Wiki Besonderheiten einzufügen<br />1. Externe Seiten in eigenem Fenster<br />2. Bild als 
bearbeiten-Link<br />3. Link zum Seitenanfang<br />4. Spoiler aufdecken<br />5. Zusätzliche meta-Keywords'
);

$wgHooks['OutputPageBeforeHTML'][] = 'SGHtml';
$wgHooks['BeforePageDisplay'][] = 'fnSGHtmlBPD';
$wgHooks['PersonalUrls'][] = 'ShowSpoiler';

$isSpoiler = false;

// Letzte Änderungen direkt vor der Ausgabe
function fnSGHtmlBPD(&$out) {
  global $isSpoiler;
  
  $keywords = array('Stargate','Stargate SG-1','Stargate Atlantis','Stargate Universe','Stargate Lexikon');
  
  if($isSpoiler) {
    $SpoilerScript = '<script type="text/javascript">
function switchSpoiler() {
  var rows = document.getElementsByTagName("div");
  var btext = document.getElementById("bt-Spoiler");
  for(var i=0; i<rows.length; i++) {
    if(rows[i].className=="spoiler") {
      rows[i].className="spoilerOK";
      btext.innerHTML=btext.innerHTML.replace(/aufdecken/,"verdecken");
    } else {
      if(rows[i].className=="spoilerOK") {
        rows[i].className="spoiler";
        btext.innerHTML=btext.innerHTML.replace(/verdecken/,"aufdecken");
      }
    }
  }
}
</script>';

    $out->addScript($SpoilerScript);
  }
  // Weitere Meta Begriffe
  foreach($keywords as $word) {
    $out->addKeyword($word);
  }

  return true;
}

function ShowSpoiler(&$personal_urls,&$wgTitle) {
  global $isSpoiler;
  
  if($isSpoiler) {
    $ref = "javascript:switchSpoiler()";
    $text = 'Spoiler aufdecken';
    $class = 'new';
    $active = true;
    $personal_urls['Spoiler'] = array( 'text' => $text,'href' => $ref,'class' => $class, 'active' => $active );
  }
  return true;
}

function SGHtml( &$out, &$text ) {
    global $isSpoiler;
    
    $mTable = array(
	/* Externe Seiten in eigenem Fenster */
        'class="external text"' => 'class="external text" target="_blank"',
        'class="external autonumber"' => 'class="external autonumber" target="_blank"',
	'<~' => '<img src="/skins/common/images/16x16/blue_left.gif" alt="<-" />',
	'~>' => '<img src="/skins/common/images/16x16/blue_right.gif" alt="->" />',
	'~^' => '<img src="/skins/common/images/16x16/blue_up.gif" alt="^" />',
	'~V' => '<img src="/skins/common/images/16x16/blue_down.gif" alt="V" />'
    );
	
    foreach( $mTable as $from => $to ) {
      $text = str_replace( $from, $to, $text );
    }

    // Ueberschrift finden
    $suchen = '#<h(\d)><span class="editsection">\[<a href="(.*?)"\s+title="(.*?)">Bearbeiten<\/a>\]<\/span>\s*<span class="mw-headline">(.*?)<\/span>#e';
    // Neue Ueberschrift mit Bildern
    // Test ob H2 Ueberschrift, nur dann wird der Link an den Seitenanfang eingefuegt.
    $ersatz = '"<h$1>".($1==2?"';
    $ersatz .= '<a href=\"#top\" title=\"Seiten Anfang\" style=\"vertical-align: top; float: right;\"><img 
src=\"/skins/common/images/16x16/blue_up.gif\" alt=\"^\" /></a>';
    $ersatz .= '":"").';
    $ersatz .= '"<span class=\"mw-headline\">$4</span> <a href=\"$2\" title=\"$3\">';
    $ersatz .= '<img src=\"/skins/common/images/16x16/edit.png\" alt=\"[bearbeiten]\" style=\"vertical-align:top; margin-top:-3px;\" /></a>"';
    
    $text = stripslashes(preg_replace($suchen,$ersatz,$text));

    /* prüfen ob Spoiler vorhanden */
    if (strpos($text,'id="show_spoiler"') == true) {
        $isSpoiler = true;
	/* Button */
        $btext  = $jscript.'<button id="bt-Spoiler" ';
        $btext .= 'style="position:fixed; right: 15px; top: 0px; z-index:50;';
	$btext .= ' background-color:#fffafa; color:#4169e1;';
	$btext .= ' padding: 0px 10px; font-size:x-small;"';
	$btext .= ' onclick="switchSpoiler()"';
	$btext .= ' type="button"';
	$btext .= '>Spoiler aufdecken</button>';
	$text = $btext.$text;
    }
    return true;
}

?>