Benutzer:Rene/SGHtml: Unterschied zwischen den Versionen
Rene (Diskussion | Beiträge) →Programmcode: Neuer Code |
PyBot (Diskussion | Beiträge) K Bot: Automatisierte Textersetzung (-{{Benutzer:Rene/sig}} +Rene <sup>Admin - Rückmeldung</sup>) |
||
| Zeile 13: | Zeile 13: | ||
Trotz der Versionsnummer unter 1.00 läuft die Erweiterung auf Stargate-Wiki bisher ohne 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. -- | Wer einen Fehler findet bitte hier melden Danke. -- [[Benutzer:Rene|Rene]] <sup>[[StargateWiki:Administratoren|Admin]] - [[Benutzer Diskussion:Rene|Rückmeldung]]</sup> 23:16, 16. Sep. 2007 (CEST) | ||
==Installation== | ==Installation== | ||
Version vom 29. Juli 2009, 07:04 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 ~ 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. -- Rene Admin - Rückmeldung 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;
}
?>