Menü aufrufen
Toggle preferences menu
Persönliches Menü aufrufen
Nicht angemeldet
Ihre IP-Adresse wird öffentlich sichtbar sein, wenn Sie Änderungen vornehmen.

MediaWiki:Common.js: Unterschied zwischen den Versionen

MediaWiki-Schnittstellenseite
CF (Diskussion | Beiträge)
Version 1.8, verschiedenes
K Fixes
 
(65 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
/* Jedes JavaScript hier wird für alle Benutzer für jede Seite geladen. */
/* Jedes JavaScript hier wird für alle Benutzer für jede Seite geladen. */
//================================================================================
var loadedScripts = {}; // included-scripts tracker
//*** force the loading of another JavaScript file (Kopie von [[Commons:Common.js]])
// Local Maintainer: [[Commons:User:Dschwen]]
function includePage(name) {
    document.write('<script type="text/javascript" src="' + wgScript + '?title='
        + name
        + '&action=raw&ctype=text/javascript"><\/script>');
}


// Externe Links in neuem Fenster öffnen, Pfeil für Sprung nach oben
//===========================================================================
jQuery( document ).ready(function() {
// Externe Links in neuem Fenster öffnen, sofern sie nicht in dieses Wiki mit unterbundener Weiterleitung ([[Vorlage:KeinRedirect]]) führen
   $j(".external").attr("target","_blank");
//---------------------------------------------------------------------------
/*
$(function() {
  $j("h2 span.mw-headline").html(function(index,old) {
   $(".external").each(function( i ) {
     return old + '<a href="javascript:window.scrollTo(0,0); void 0;" class="toparrow noprint">&nbsp;</a>';
    var url = $(this).attr("href");
   }); */
    if ((url.indexOf("stargate-wiki.de/")!=-1)&&((url.indexOf("redirect=no")!=-1)||(url.indexOf("unhide=1")!=-1)))
      $(this).attr("target","_self");
     else
      $(this).attr("target","_blank");
   });
});
});
//===========================================================================


//*** Fügt eine Betreffzeile auf leeren Diskussionsseiten ein


jQuery( document ).ready(function() {
//===========================================================================
         if(wgNamespaceNumber != 0 && wgNamespaceNumber != 1) return;
// Fügt eine Betreffzeile auf leeren Diskussionsseiten ein
var tab = document.getElementById( 'ca-talk' );
//---------------------------------------------------------------------------
if( !tab || tab.className != 'new' ) return;
$(function() {
var link = tab.getElementsByTagName( 'a' )[0];
         if(mw.config.get( 'wgNamespaceNumber' ) != 0 && mw.config.get( 'wgNamespaceNumber' )!= 1) return;
if( !link ) return;
        var tab = document.getElementById( 'ca-talk' );
link.href += '&section=new';
        if( !tab || tab.className != 'new' ) return;
        var link = tab.getElementsByTagName( 'a' )[0];
        if( !link ) return;
        link.href += '&section=new';
});
});
//===========================================================================


//================================================================================
//===========================================================================
//*** import Onlyifuploading-functions
// import Onlyifuploading-functions
// SEE ALSO [[MediaWiki:Onlyifuploading.js]]
// SEE ALSO [[MediaWiki:Onlyifuploading.js]]
 
//---------------------------------------------------------------------------
if (wgCanonicalSpecialPageName == "Upload") {
if (mw.config.get( 'wgCanonicalSpecialPageName' ) == "Upload") {
     importScript("MediaWiki:Onlyifuploading.js");
     importScript("MediaWiki:Onlyifuploading.js");
}
}
//===========================================================================
//===========================================================================
// Einbinden von [[Vorlage:Mentorenliste]]
//---------------------------------------------------------------------------
importScript('Vorlage:Mentorenliste');
importScript('Vorlage:Mentorenliste');
jQuery( document ).ready(function() {
//===========================================================================
   if (wgPageName != "Kategorie:Stargate_Kommando_SG-1_Wichtige_Episode") return;
 
   $j("div#mw-pages h3").html(function(i, text)
 
//===========================================================================
// Darstellung der Abschnitte in der Kategorie für wichtige SG1-Episoden
// nach einzelnen Staffeln
//---------------------------------------------------------------------------
$(function() {
   if (mw.config.get( 'wgCanonicalSpecialPageName' )!= "Kategorie:Stargate_Kommando_SG-1_Wichtige_Episode") return;
   $("div#mw-pages h3").html(function(i, text)
   {
   {
     return (text.substr(0, 1) == "@")?"10"+text.substr(1):text;
     return (text.substr(0, 1) == "@")?"10"+text.substr(1):text;
   });
   });
});
});
//===========================================================================


//
// Collapsible tables
//
importScript('MediaWiki:CollapsibleTables.js');
importScript('MediaWiki:CollapsibleTemplates.js');


//================================================================================
//===========================================================================
//*** Dynamic Navigation Bars
// Zeilen der Infoboxen abwechselnd einfärben
//---------------------------------------------------------------------------
$(function() {
  $("tr[class*='blauzebra']:not(.spoiler):even").addClass("zebrablau");
  $("tr[class*='blauzebra']:not(.spoiler):odd").removeClass("zebrablau");
  $("tr[class*='grünzebra']:not(.spoiler):even").addClass("zebragrün");
  $("tr[class*='grünzebra']:not(.spoiler):odd").removeClass("zebragrün");
});
//===========================================================================


// set up the words in your language
var NavigationBarHide = 'Einklappen';
var NavigationBarShow = 'Ausklappen';
var NavigationBarToggleAll = 'Alle umklappen';


// set up max count of Navigation Bars on page,
//===========================================================================
// if there are more, all will be hidden
// Wenige (<6) Einzelnachweise in nur einer Spalte darstellen
// NavigationBarShowDefault = 0; // all bars will be hidden
//---------------------------------------------------------------------------
// NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden
$('ol.references').each(function(){
if (typeof NavigationBarShowDefault == 'undefined' ) {
    if($(this).children('li').length<6){
    var NavigationBarShowDefault = 0;
        $(this).css({ 'column-count': '1', '-moz-column-count': '1', '-webkit-column-count': '1' });
}
    }
 
// adds show/hide-button to navigation bars
jQuery( document ).ready(function() {
// shows and hides content and picture (if available) of navigation bars
// Parameters:
//    indexNavigationBar: the index of navigation bar to be toggled
function toggleNavigationBar(NavToggle, NavFrame)
{
  if (!NavFrame || !NavToggle) {
  return false;
  }
 
  // if shown now
  if (NavToggle.firstChild.data == NavigationBarHide) {
  for (
  var NavChild = NavFrame.firstChild;
  NavChild != null;
  NavChild = NavChild.nextSibling
  ) {
  if (NavChild.className == 'NavPic') {
  NavChild.style.display = 'none';
  }
  if (NavChild.className == 'NavContent') {
  NavChild.style.display = 'none';
  }
  if (NavChild.className == 'NavToggle') {
  NavChild.firstChild.data = NavigationBarShow;
  }
  }
 
  // if hidden now
  } else if (NavToggle.firstChild.data == NavigationBarShow) {
  for (
  var NavChild = NavFrame.firstChild;
  NavChild != null;
  NavChild = NavChild.nextSibling
  ) {
  if (NavChild.className == 'NavPic') {
  NavChild.style.display = 'block';
  }
  if (NavChild.className == 'NavContent') {
  NavChild.style.display = 'block';
  }
  if (NavChild.className == 'NavToggle') {
  NavChild.firstChild.data = NavigationBarHide;
  }
  }
  }
}
function toggleNavigationBarFunction(NavToggle, NavFrame) {
return function() {
toggleNavigationBar(NavToggle, NavFrame);
return false;
};
}
// Shows/hides all navigation bars at once
function toggleNavigationBars() {
var NavFrames = getElementsByClassName(document.getElementById("content"), "div", "NavFrame");
for (var i=0; i<NavFrames.length; i++)
toggleNavigationBar(getElementsByClassName(NavFrames[i], "a", "NavToggle")[0], NavFrames[i]);
}
function toggleNavigationBarsFunction() {
return function() {
toggleNavigationBars();
return false;
};
}
// iterate over all NavFrames
var content = document.getElementById("content");
var NavFrames = getElementsByClassName(content, "div", "NavFrame");
// if more Navigation Bars found and not template namespace than Default: hide all
var initiallyToggle = NavigationBarShowDefault < NavFrames.length && wgNamespaceNumber != 10;
for (var i=0;  i<NavFrames.length; i++) {
var NavFrame = NavFrames[i];
var NavToggle = document.createElement("a");
NavToggle.className = 'NavToggle';
NavToggle.setAttribute('href', '#');
var NavToggleText = document.createTextNode(NavigationBarHide);
NavToggle.appendChild(NavToggleText);
// add NavToggle-Button as first div-element
// in < div class="NavFrame" >
NavFrame.insertBefore(NavToggle, NavFrame.firstChild);
NavToggle.onclick = toggleNavigationBarFunction(NavToggle, NavFrame);
if (initiallyToggle) {
toggleNavigationBar(NavToggle, NavFrame);
}
}
var NavFrameToggleAlls = getElementsByClassName(content, "div", "NavFrameToggleAll");
for (var i=0;  i<NavFrameToggleAlls.length; i++) {
var NavFrameToggleAll = NavFrameToggleAlls[i];
var NavToggleAll = document.createElement("a");
NavToggleAll.className = 'NavToggleAll';
NavToggleAll.setAttribute('href', '#');
var NavToggleAllText = document.createTextNode(NavigationBarToggleAll);
NavToggleAll.appendChild(NavToggleAllText);
// add NavToggleAll-Button as first div-element
// in < div class="NavFrameToggleAll" >
NavFrameToggleAll.insertBefore(NavToggleAll, NavFrameToggleAll.firstChild);
NavToggleAll.onclick = toggleNavigationBarsFunction();
}
});
});
//===========================================================================


/* tooltips and access keys */
ta = new Object();
ta['pt-userpage'] = new Array('.','Meine persönliche Seite');
ta['pt-anonuserpage'] = new Array('.','Benutzerseite der IP-Adresse von der aus Sie Änderungen durchführen');
ta['pt-mytalk'] = new Array('n','Meine Diskussionsseite');
ta['pt-anontalk'] = new Array('n','Diskussion über Änderungen von dieser IP-Adresse');
ta['pt-preferences'] = new Array('','Meine Einstellungen');
ta['pt-watchlist'] = new Array('l','Liste von Seiten die Sie auf Änderungen überwachen.');
ta['pt-mycontris'] = new Array('y','Liste meiner Beiträge');
ta['pt-login'] = new Array('o','Hier kann sich wer mächte anmelden, es ist aber keine Pflicht.');
ta['pt-anonlogin'] = new Array('o','Hier kann sich wer möchte anmelden, es ist aber keine Pflicht.');
ta['pt-logout'] = new Array('o','Abmelden');
ta['ca-talk'] = new Array('t','Diskussion(en) zum Artikel');
ta['ca-edit'] = new Array('e','Artikel bearbeiten. Bitte nutzen Sie vor dem Speichern die Vorschaufunktion.');
ta['ca-addsection'] = new Array('+','Einen Kommentar zu dieser Diskussion hinzufügen.');
ta['ca-viewsource'] = new Array('e','Diese Seite ist geschützt. Sie können sich den Quelltext ansehen.');
ta['ca-history'] = new Array('h','Vorherige Versionen dieser Seite');
ta['ca-protect'] = new Array('=','Diese Seite schützen');
ta['ca-delete'] = new Array('d','Diese Seite löschen');
ta['ca-undelete'] = new Array('d','Einträge wiederherstellen, bevor diese Seite gelöscht wurde');
ta['ca-move'] = new Array('m','Diese Seite verschieben');
ta['ca-watch'] = new Array('w','Diese Seite zu Ihrer Beobachtungsliste hinzufügen');
ta['ca-unwatch'] = new Array('w','Diese Seite von Ihrer Beobachtungsliste entfernen');
ta['search'] = new Array('f','In Stargate Wiki suchen');
ta['p-logo'] = new Array('','Hauptseite');
ta['n-mainpage'] = new Array('z','Hauptseite anzeigen');
ta['n-portal'] = new Array('','Überblick über StargateWiki, was sie machen könne, wo man etwas findet');
ta['n-currentevents'] = new Array('','Hintergrundinformationen zur aktuellen Season');
ta['n-recentchanges'] = new Array('r','Liste der letzten Änderungen in Stargate Wiki.');
ta['n-randompage'] = new Array('x','Zufälligen Artikel anzeigen');
ta['n-help'] = new Array('','Hilfe zu Stargate Wiki.');
ta['n-sitesupport'] = new Array('','Wie kann man Stargate Wiki unterstüzungen?');
ta['t-whatlinkshere'] = new Array('j','Liste aller Seiten die auf diesen Artikel verweisen');
ta['t-recentchangeslinked'] = new Array('k','Letzte Änderungen an Seiten, die von hier verlinkt sind');
ta['feed-rss'] = new Array('','RSS-Feed für diese Seite');
ta['feed-atom'] = new Array('','Atom-Feed für diese Seite');
ta['t-contributions'] = new Array('','Liste der Beiträge dieses Benutzers ansehen');
ta['t-emailuser'] = new Array('','Eine Mail an den Benutzer senden');
ta['t-upload'] = new Array('u','Bild- oder Media-File hochladen');
ta['t-specialpages'] = new Array('q','Liste aller Spezialseiten');
ta['ca-nstab-main'] = new Array('c','Artikel anzeigen');
ta['ca-nstab-user'] = new Array('c','Benutzerseite anzeigen');
ta['ca-nstab-media'] = new Array('c','Mediendateienseite anzeigen');
ta['ca-nstab-special'] = new Array('','Dies ist eine Spezialseite. Sie können diese nicht ändern.');
ta['ca-nstab-wp'] = new Array('a','Projektseite anzeigen');
ta['ca-nstab-image'] = new Array('c','Bilderseite anzeigen');
ta['ca-nstab-mediawiki'] = new Array('c','Systemmeldungen anzeigen');
ta['ca-nstab-template'] = new Array('c','Vorlage anzeigen');
ta['ca-nstab-help'] = new Array('c','Hilfeseite anzeigen');
ta['ca-nstab-category'] = new Array('c','Kategorieseite anzeigen');


jQuery( document ).ready(function() {
//===========================================================================
  $j("tr[class*='blauzebra']:not(.spoiler):even").addClass("zebrablau");
// Sortierung von Datum und Zeit der Form „11:58, 21. Jul. 2012“ in Tabellen
  $j("tr[class*='blauzebra']:not(.spoiler):odd").removeClass("zebrablau");
//---------------------------------------------------------------------------
  $j("tr[class*='grünzebra']:not(.spoiler):even").addClass("zebragrün");
if ($("table.sortable").length) {
  $j("tr[class*='grünzebra']:not(.spoiler):odd").removeClass("zebragrün");
  mw.loader.using("jquery.tablesorter", function() {
  $j("tr[class*='zeigen']").hover(function(){$j(this).toggleClass("zeileaktiv");},function(){$j(this).toggleClass("zeileaktiv");});
    if ($ && $.tablesorter) {
}
      $.tablesorter.addParser({
 
        id: "sgwDateTime",
 
        is: function(s) {
jQuery( document ).ready(function() {
          return /(\d\d):(\d\d), (\d\d)\. (...)\. (\d{4})/.test(s);
  if ($('.references li').size() < 6)
        },
    $('.references').css({ 'column-count': '1', '-moz-column-count': '1', '-webkit-column-count': '1' });
        format: function(s) {
          s = $.trim(s.toLowerCase());
          for (var i=0; i<12; ++i)
            s = s.replace($.tablesorter.monthNames[1][i+1], i);
          var x = /(\d\d):(\d\d), (\d\d)\. (\d?)\. (\d{4})/.exec(s);
          return !x?0:$.tablesorter.formatFloat(new Date(x[5], x[4], x[3], x[1], x[2], 0).getTime());
        },
        type: "numeric"
      });
    }
  });
}
}
 
//===========================================================================
// Erlaubt nur Sichtern und Admins die Benutzung von HotCat
if (wgUserGroups) {
execute_hotcat=false;
for (i=0; i<wgUserGroups.length; i++) {
if (wgUserGroups[i]=="editor" || wgUserGroups[i]=="sysop") {execute_hotcat=true;break;}
}
if(execute_hotcat==true) importScript('MediaWiki:HotCat.js');
}
 
 
//================================================================================
// Überschreiben der Tabellensortierung, damit leere Einträge immer unten stehen 
//================================================================================
function ts_resortTable( lnk ) {
// get the span
var span = lnk.getElementsByTagName('span')[0];
 
var td = lnk.parentNode;
var tr = td.parentNode;
var column = td.cellIndex;
 
var table = tr.parentNode;
while ( table && !( table.tagName && table.tagName.toLowerCase() == 'table' ) ) {
table = table.parentNode;
}
if ( !table ) {
return;
}
 
if ( table.rows.length <= 1 ) {
return;
}
 
// Generate the number transform table if it's not done already
if ( ts_number_transform_table === null ) {
ts_initTransformTable();
}
 
// Work out a type for the column
// Skip the first row if that's where the headings are
var rowStart = ( table.tHead && table.tHead.rows.length > 0 ? 0 : 1 );
 
var itm = '';
for ( var i = rowStart; i < table.rows.length; i++ ) {
if ( table.rows[i].cells.length > column ) {
itm = ts_getInnerText(table.rows[i].cells[column]);
itm = itm.replace(/^[\s\xa0]+/, '').replace(/[\s\xa0]+$/, '');
if ( itm != '' ) {
break;
}
}
}
 
// TODO: bug 8226, localised date formats
var sortfn = ts_sort_generic;
var preprocessor = ts_toLowerCase;
if ( /^\d\d[\/. -][a-zA-Z]{3}[\/. -]\d\d\d\d$/.test( itm ) ) {
preprocessor = ts_dateToSortKey;
} else if ( /^\d\d[\/.-]\d\d[\/.-]\d\d\d\d$/.test( itm ) ) {
preprocessor = ts_dateToSortKey;
} else if ( /^\d\d[\/.-]\d\d[\/.-]\d\d$/.test( itm ) ) {
preprocessor = ts_dateToSortKey;
// (minus sign)([pound dollar euro yen currency]|cents)
} else if ( /(^([-\u2212] *)?[\u00a3$\u20ac\u00a4\u00a5]|\u00a2$)/.test( itm ) ) {
preprocessor = ts_currencyToSortKey;
} else if ( ts_number_regex.test( itm ) ) {
preprocessor = ts_parseFloat;
}
 
var reverse = ( span.getAttribute( 'sortdir' ) == 'down' );
 
var newRows = new Array();
var staticRows = new Array();
for ( var j = rowStart; j < table.rows.length; j++ ) {
var row = table.rows[j];
if( (' ' + row.className + ' ').indexOf(' unsortable ') < 0 ) {
var keyText = ts_getInnerText( row.cells[column] );
if( keyText === undefined ) {
keyText = '';
}
var oldIndex = ( reverse ? -j : j );
var preprocessed = preprocessor( keyText.replace(/^[\s\xa0]+/, '').replace(/[\s\xa0]+$/, '') );
 
newRows[newRows.length] = new Array( row, preprocessed, oldIndex );
} else {
staticRows[staticRows.length] = new Array( row, false, j-rowStart );
}
}
 
newRows.sort( sortfn );
 
var arrowHTML;
if ( reverse ) {
arrowHTML = '<img src="' + ts_image_path + ts_image_down + '" alt="&darr;"/>';
newRows.reverse();
span.setAttribute( 'sortdir', 'up' );
} else {
arrowHTML = '<img src="' + ts_image_path + ts_image_up + '" alt="&uarr;"/>';
span.setAttribute( 'sortdir', 'down' );
}
 
for ( var i = 0; i < staticRows.length; i++ ) {
var row = staticRows[i];
newRows.splice( row[2], 0, row );
}
 
// We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
// don't do sortbottom rows
for ( var i = 0; i < newRows.length; i++ ) {
if ( ( ' ' + newRows[i][0].className + ' ').indexOf(' sortbottom ') == -1 && ( ' ' + newRows[i][0].cells[column].className + ' ').indexOf(' sortbottom ') == -1 ) {
table.tBodies[0].appendChild( newRows[i][0] );
}
}
// do sortbottom rows only
for ( var i = 0; i < newRows.length; i++ ) {
if ( ( ' ' + newRows[i][0].className + ' ').indexOf(' sortbottom ') != -1 || ( ' ' + newRows[i][0].cells[column].className + ' ').indexOf(' sortbottom ') != -1 ) {
table.tBodies[0].appendChild( newRows[i][0] );
}
}
 
// Delete any other arrows there may be showing
var spans = getElementsByClassName( tr, 'span', 'sortarrow' );
for ( var i = 0; i < spans.length; i++ ) {
spans[i].innerHTML = '<img src="' + ts_image_path + ts_image_none + '" alt="&darr;"/>';
}
span.innerHTML = arrowHTML;
 
if ( ts_alternate_row_colors ) {
ts_alternate( table );
}
}
//================================================================================




Zeile 382: Zeile 115:
// Siehe auch [[Benutzer:CF/revisionMainspaceCounter.js]]
// Siehe auch [[Benutzer:CF/revisionMainspaceCounter.js]]
// Bearbeitung von [[MediaWiki:Gadget-revisionCounter.js]]
// Bearbeitung von [[MediaWiki:Gadget-revisionCounter.js]]
//===========================================================================
//---------------------------------------------------------------------------
 
var revisionMainspaceCounter =
var revisionMainspaceCounter =  
{
{
   queryUrl : function(i) { return (i < revisionMainspaceCounter.queries.length && i >= 0 && revisionMainspaceCounter.queries[i] !== null) ? (wgScriptPath + '/api.php?action=query&list=usercontribs&ucuser=' + encodeURIComponent(revisionMainspaceCounter.queries[i].User) + '&ucnamespace=' + revisionMainspaceCounter.queries[i].Namespaces + '&ucprop=ids&format=json&uclimit=max&callback=revisionMainspaceCounter.queryResult&requestid=' + i) : null; },
   queryUrl : function(i) {
    if (revisionMainspaceCounter.queries[i] == null)
      return null;
    if (revisionMainspaceCounter.queries[i].Namespaces == '-100')
      return mw.config.get( 'wgScriptPath' )+ '/api.php?action=query&list=logevents&leuser=' + encodeURIComponent(revisionMainspaceCounter.queries[i].User) + '&letype=upload&leprop=userid&format=json&lelimit=max&callback=revisionMainspaceCounter.queryResult&requestid=' + i;
    else
      return mw.config.get( 'wgScriptPath' )+ '/api.php?action=query&list=usercontribs&ucuser=' + encodeURIComponent(revisionMainspaceCounter.queries[i].User) + '&ucnamespace=' + revisionMainspaceCounter.queries[i].Namespaces + '&ucprop=&format=json&uclimit=max&callback=revisionMainspaceCounter.queryResult&requestid=' + i;
      //Bei leerer ucprop-Angabe werden nur noch userid und user angegeben - sollte MW das mal ändern, muss hier wieder etwas übergeben werden (vorzugsweise ids)
  },
   queries : [
   queries : [
   /*{
   /*{
       revisionCountUser  : 0,
       revisionCountUser  : 0,
       User : wgUserName,
       User : mw.user.getName(),
       Namespaces : '0',
       Namespaces : '0',
       OutputId : 'revisionMainspaceCounter',
      InputId : 'revisionMainspaceCounter',
       OutputId : 'revisionMainspaceCounterTarget',
       ReplaceFirstChild : false
       ReplaceFirstChild : false
     }*/
     }*/
   ],
   ],
 
   execute : function()  
   execute : function()
   {
   {
     for (var i=0; i<revisionMainspaceCounter.queries.length; ++i)
     for (var i=0; i<revisionMainspaceCounter.queries.length; ++i)
Zeile 403: Zeile 144:
         importScriptURI(revisionMainspaceCounter.queryUrl(i));
         importScriptURI(revisionMainspaceCounter.queryUrl(i));
   },
   },
 
   queryResult : function(res)
   queryResult : function(res)
   {
   {
     if (!res['query'] || !res['query']['usercontribs'] || !res['requestid'] || res.requestid >= revisionMainspaceCounter.queries.length || res.requestid < 0 || revisionMainspaceCounter.queries[res.requestid] === null) return;
     if (!res.query || !res.requestid || res.requestid >= revisionMainspaceCounter.queries.length || res.requestid < 0 || revisionMainspaceCounter.queries[res.requestid] === null) return;
 
     var revs = res['query']['usercontribs'];
     var continu = false;
     var i = res.requestid;
     var i = res.requestid;
     revisionMainspaceCounter.queries[i].revisionCountUser += revs.length;
     if (revisionMainspaceCounter.queries[res.requestid].Namespaces == '-100') {
      if (!res.query.logevents)
    if (res && res['query-continue'])
        return;
    {
      var revs = res.query.logevents;
      importScriptURI(revisionMainspaceCounter.queryUrl(i) + '&ucstart=' + encodeURIComponent(res['query-continue'].usercontribs.ucstart));
      revisionMainspaceCounter.queries[i].revisionCountUser += revs.length;
 
      if (res && res['query-continue'])
      {
        var lequerycont=res['query-continue'].logevents.lecontinue;
        importScriptURI(revisionMainspaceCounter.queryUrl(i) + '&lestart=' + encodeURIComponent(lequerycont.substring(0,lequerycont.indexOf("|"))));
        continu = true;
      }
    } else {
      if (!res.query.usercontribs)
        return;
      var revs = res.query.usercontribs;
      revisionMainspaceCounter.queries[i].revisionCountUser += revs.length;
 
      if (res && res['query-continue'])
      {
        var ucquerycont=res['query-continue'].usercontribs.uccontinue;
        importScriptURI(revisionMainspaceCounter.queryUrl(i) + '&ucstart=' + encodeURIComponent(ucquerycont.substring(0,ucquerycont.indexOf("|"))));
        continu = true;
      }
     }
     }
     else if (document.getElementById(revisionMainspaceCounter.queries[i].OutputId))
 
     if (!continu && document.getElementById(revisionMainspaceCounter.queries[i].OutputId))
     {
     {
       var info = document.createElement("span");
       var info = document.createElement("span");
       info.appendChild(document.createTextNode(revisionMainspaceCounter.queries[i].revisionCountUser));
       info.appendChild(document.createTextNode(revisionMainspaceCounter.queries[i].revisionCountUser));
       var infoTitle = document.createAttribute("title");
       var infoTitle = document.createAttribute("title");
       infoTitle.nodeValue = revisionMainspaceCounter.queries[i].User + " hat " + revisionMainspaceCounter.queries[i].revisionCountUser + " Bearbeitungen i" + (revisionMainspaceCounter.queries[i].Namespaces==="0" ? "m Hauptnamensraum." : ((revisionMainspaceCounter.queries[i].Namespaces.indexOf("|")>-1 ? "n den Namensräumen ": "m Namensraum ") + revisionMainspaceCounter.queries[i].Namespaces));
       infoTitle.nodeValue = revisionMainspaceCounter.queries[i].User + " hat " + revisionMainspaceCounter.queries[i].revisionCountUser + " Bearbeitungen i" + (revisionMainspaceCounter.queries[i].Namespaces==="0" ? "m Hauptnamensraum." : ((revisionMainspaceCounter.queries[i].Namespaces.indexOf("|")>-1 ? "n den Namensräumen ": "m Namensraum ") + revisionMainspaceCounter.queries[i].Namespaces + "."));
       info.setAttributeNode(infoTitle);
       info.setAttributeNode(infoTitle);
       var e = document.getElementById(revisionMainspaceCounter.queries[i].OutputId);
       var e = document.getElementById(revisionMainspaceCounter.queries[i].OutputId);
       if (revisionMainspaceCounter.queries[i].ReplaceFirstChild) e.replaceChild(info, e.firstChild);
       if (revisionMainspaceCounter.queries[i].ReplaceFirstChild) e.replaceChild(info, e.firstChild);
       else e.appendChild(info);
       else e.appendChild(info);
      var input = document.getElementById(revisionMainspaceCounter.queries[i].InputId);
      var header = $(input).parents("table.sortable")[0];
      if (input && input.parentNode)
      {
          input.parentNode.removeChild(input);
          if (header && $(header).find("span.revisionMainspaceCounter").length === 0)
          {
            $(header).find(".headerSort").unbind("click");
            $(header).tablesorter();
          }
      }
       revisionMainspaceCounter.queries[i] = null;
       revisionMainspaceCounter.queries[i] = null;
     }
     }
Zeile 432: Zeile 206:
   {
   {
     var found = 0;
     var found = 0;
     $j('span.revisionMainspaceCounter').each(function()
     $("span.revisionMainspaceCounter").each(function()
     {
     {
       var i = this.innerHTML.split("#");
       var i = this.innerHTML.split("#");
Zeile 440: Zeile 214:
           User : i[0],
           User : i[0],
           Namespaces : i[1].replace(/ /g,"").split(",").join("|"),
           Namespaces : i[1].replace(/ /g,"").split(",").join("|"),
          InputId : this.id,
           OutputId : i[2],
           OutputId : i[2],
           ReplaceFirstChild : i[3]==="j"
           ReplaceFirstChild : i[3]==="j"
Zeile 448: Zeile 223:
};
};


jQuery( document ).ready(revisionMainspaceCounter.findCounter);
$(revisionMainspaceCounter.findCounter);
//===========================================================================
 
 
//===========================================================================
// Versteckt Inhalte
// [[Vorlage:Spoiler]]
//---------------------------------------------------------------------------
mw.SGWSpoiler = {
  showAll: false,
  init: function() {
    if ($(".spoiler").length>0) {
    var vector = $("body.skin-vector").size()>0;
    var node = mw.util.addPortletLink(vector ? "p-views" : "p-cactions", "#", "Spoiler aufdecken", "ca-spoiler", "Vorhandene Spoiler auf- und zudecken", "s", $("#ca-watch")[0] || $("#ca-unwatch")[0]);
    if (node) {
      node.onclick = mw.SGWSpoiler.toggleAll;
      if (vector)
        $("#ca-spoiler a").html('<img width="24" height="24" alt="Spoiler auf- oder zudecken" src="http://www.stargate-wiki.de/images/thumb/1/17/System-search.svg/24px-System-search.svg.png" style="position:relative; top: -5px;" />');
    }
  }
  },
 
  toggleNext: function(obj) {
    if (mw.SGWSpoiler.showAll) return;
    $(obj).next(".spoiler").toggleClass("spoilerShow");
    var headings = $(obj).next(".spoiler").find(':header > span');
    if(headings.length){
        headings.each(function(i, e){
                spoilerHeadings.toggle(e.id);
                });
    }
  },
 
  toggleNextRow: function(obj) {
    if (mw.SGWSpoiler.showAll) return;
    $(obj).parent().parent().next("tr.spoiler").toggleClass("spoilerShow");
    var headings = $(obj).parent().parent().next("tr.spoiler").find(':header > span');
    if(headings.length){
        headings.each(function(i, e){
                spoilerHeadings.toggle(e.id);
                });
    }
  },
 
  toggleAll: function(obj) {
    mw.SGWSpoiler.showAll ^= true;
    if (mw.SGWSpoiler.showAll) {
      $(".spoiler").addClass("spoilerShowAll");
      $("#ca-spoiler").addClass("selected");
      if (obj){
        $(obj).parent().parent().next("tr.spoiler").removeClass("spoilerShow");
        $(obj).next(".spoiler").removeClass("spoilerShow");
      }
      spoilerHeadings.showAll();
    }
    else {
      $(".spoiler").removeClass("spoilerShowAll");
      $("#ca-spoiler").removeClass("selected");
      spoilerHeadings.hideAll();
    }
    return false;
  }
};
 
$( mw.SGWSpoiler.init );
//===========================================================================
 
 
//===========================================================================
// automatisiertes Einbinden vom virtuellen Schneefall im Dezember und Januar
//---------------------------------------------------------------------------
var curmonth=new Date().getMonth();
if(curmonth===11 || curmonth===0) importScript('Benutzer:CF/Schnee.js');
//===========================================================================
 
 
//===========================================================================
// Toggles the display of elements on a page
// Author/contact: Austin Che http://openwetware.org/wiki/User:Austin
//---------------------------------------------------------------------------
 
// indexed array of toggler ids to array of associated toggle operations
// each operation is a two element array, the first being the type, the second a class name or array of elements
// operation types are strings like "_reset" or "" for the default toggle operation
var togglers = [];
var allClasses = {}; // associative map of class names to page elements
 
function toggler(id)
{
    var toBeToggled = togglers[id];
    if (!toBeToggled)
        return;
 
    // if some element is in list more than once, it will be toggled multiple times
    for (var i = 0; i < toBeToggled.length; i++)
    {
        // get array of elements to operate on
        var toggles = toBeToggled[i][1];
        if (typeof(toggles) == "string")
        {
            if (toggles.charAt(0) == '-')
            {
                // treat as an element ID, not as class
                toggles = document.getElementById(toggles.substring(1));
                if (toggles)
                    toggles = new Array(toggles);
            }
            else
                toggles = allClasses[toggles];
        }
        if (!toggles || !toggles.length)
            continue;
 
        var op = toBeToggled[i][0]; // what the operation will be
 
        switch (op)
        {
            case "_reset":
                for (var j in toggles)
                    toggles[j].style.display = toggles[j]._toggle_original_display;
                break;
            case "_show":
                for (var j in toggles)
                    toggles[j].style.display = '';
                break;
            case "_hide":
                for (var j in toggles)
                    toggles[j].style.display = 'none';
                break;
            case "":
            default:
                // Toggle
                for (var j in toggles)
                    toggles[j].style.display = ((toggles[j].style.display == 'none') ? '' : 'none');
                break;
        }
    }
}
 
function createTogglerLink(toggler, id)
{
    var toggle = document.createElement("a");
    toggle.className = 'toggler-link';
    toggle.setAttribute('id', 'toggler' + id);
    toggle.setAttribute('href', 'javascript:toggler("' + id + '");');
    var child = toggler.firstChild;
    toggler.removeChild(child);
    toggle.appendChild(child);
    toggler.insertBefore(toggle, toggler.firstChild);
}
 
function toggleInit()
{
    var togglerElems = [];
    var toggleGroup = [];
 
    // make list of all document classes
    var elems = document.getElementsByTagName("*");
    var numelems = elems.length;
    for (var i = 0; i < elems.length; i++)
    {
        var elem = elems[i];
        if (!elem.className)
            continue;
 
        elem._toggle_original_display = elem.style.display;
        var togglerID = -1;
        if( typeof elem.className == "string" ) {
                var elemClasses = elem.className.split(' '); // get list of classes
                for (var j = 0; j < elemClasses.length; j++)
                {
                var elemClass = elemClasses[j];
                if (! allClasses[elemClass])
                        allClasses[elemClass] = [];
                allClasses[elemClass].push(elem);
 
                // all the special classes begin with _toggle
                if (elemClass.substring(0, 7) != "_toggle")
                        continue;
 
                if (elemClass == "_togglegroup")
                        toggleGroup = [];
                else if (elemClass == "_toggle")
                        toggleGroup.push(elem);
                else if (elemClass.substring(0, 12) == "_toggle_init")
                {
                        // set initial value for display (ignore the original CSS set value)
                        // understands _toggle_initshow and _toggle_inithide
                        var disp = elemClass.substring(12);
                        if (disp == "show")
                        elem.style.display = '';
                        else if (disp == "hide")
                        elem.style.display = 'none';
                        elem._toggle_original_display = disp;
                }
                else if (elemClass.substring(0, 8) == "_toggler")
                {
                        if (togglerID == -1)
                        {
                        togglerID = togglers.length;
                        togglers[togglerID] = [];
                        togglerElems[togglerID] = elem;
                        }
 
                        // all classes are of form _toggler_op-CLASS
                        // figure out what class we're toggling
                        // if none is specified, then we use the current toggle group
                        var toBeToggled;
                        var hyphen = elemClass.indexOf('-');
                        if (hyphen != -1)
                        toBeToggled = elemClass.substring(hyphen+1);
                        else
                        {
                        toBeToggled = toggleGroup;
                        hyphen = elemClass.length;
                        }
 
                        var op = elemClass.substring(8, hyphen);
                        togglers[togglerID].push(new Array(op, toBeToggled));
                }
                }
        }
    }
 
    // add javascript links to all toggler elements
    for (var i = 0; i < togglerElems.length; i++)
        createTogglerLink(togglerElems[i], i);
}
 
$(toggleInit);
 
function unToggle()
{
  var path=window.location.href;
  var parts=path.split("#");
  if(parts.length > 1)
  {
      path=parts[parts.length-1];
      parts=path.split(".23");
 
      var untogglerGroup = [];
      var untogglerClass = [];
 
      // make list of all document classes
      var elems = document.getElementsByTagName("*");
      var numelems = elems.length;
      for (var c=0; c < parts.length; c++)
      {
        for (var i = 0; i < elems.length; i++)
        {
            var elem = elems[i];
            if (!elem.className)
                continue;
 
            var elemClasses = elem.className.split(' '); // get list of classes
 
            for (var j = 0; j < elemClasses.length; j++)
            {
              var elemClass=elemClasses[j];
              if (elemClass != parts[c])
                  continue;
              else
              {
                  untogglerGroup.push(elem);
                  untogglerClass.push(elemClass);
              }
            }
        }
      }
 
      // add javascript links to all toggler elements
      for (var i = 0; i < untogglerGroup.length; i++)
      {
          untogglerGroup[i].style.display = '';
      }
  }
}
//===========================================================================
 
 
//===========================================================================
// Import-Skript zum Auslagern großer Scripte
//---------------------------------------------------------------------------
 
function importScript(page) {
        // TODO: might want to introduce a utility function to match wfUrlencode() in PHP
        var uri = mw.config.get( 'wgScript' )+ '?title=' +
                encodeURIComponent(page.replace(/ /g,'_')).replace(/%2F/ig,'/').replace(/%3A/ig,':') +
                '&action=raw&ctype=text/javascript';
        return importScriptURI(uri);
}
 
function importScriptURI(url) {
        if (loadedScripts[url]) {
                return null;
        }
        loadedScripts[url] = true;
        var s = document.createElement('script');
        s.setAttribute('src',url);
        s.setAttribute('type','text/javascript');
        document.getElementsByTagName('head')[0].appendChild(s);
        return s;
}
//===========================================================================
 
//===========================================================================
// bessere Linktitel für Wikipedia-Links
//---------------------------------------------------------------------------
$("a[href^='http://de.wikipedia.org']").each(function(){
        $(this).attr('title',$(this).text()+' in der deutschen Wikipedia');
});
$("a[href^='http://en.wikipedia.org']").each(function(){
        $(this).attr('title',$(this).text()+' in der englischen Wikipedia');
});
//===========================================================================
 
 
//===========================================================================
// behebt Anzeigefehler bei unmarkierten Änderungen: Wenn eine Box vor der Infobox steht und maximale Breite füllt, überlappte sich deren Inhalt bei Sichtern teils mit der Infobox.
//---------------------------------------------------------------------------
$("#mw-fr-revisiontag").after("<div style='height: 10px;'></div>");
//===========================================================================
 
 
//===========================================================================
// verbirgt das Betreff-Eingabefeld bei Löschanträgen, da die Überschrift schon im Editor hinzugefügt wird
//---------------------------------------------------------------------------
if($('.noSummary').length){
        $('#editform #wpSummary').hide();
        $('#editform #wpSummaryLabel').hide();
}
//===========================================================================
 
 
//===========================================================================
// behebt einen Fehler mit den slideshows, damit sie nicht teilweise mitten im Text hängen
//---------------------------------------------------------------------------
$('.slideshow').each(function(){
        $(this).css('clear',($(this).css('float')=='left')?'left':'right');
});
//===========================================================================
 
 
//===========================================================================
// Lade die verlinkten anderen TV-Planer auf der Hauptseite direkt anstatt des normal angezeigten, ohne die Seite verlassen zu müssen
//---------------------------------------------------------------------------
if(mw.config.get('wgPageName')==="Hauptseite"){
        var TVPlanerActive=0;
        $('#TVPlaner + table td:first-child a, #TVPlaner-thisWeek a, #TVPlaner + table td:nth-child(3) a').each(function(){
                $(this).click(function(e){
                        var url=$(this).attr('href');
                        var title=$(this).attr('title');
                        var num=url.split('/')[4];
                        num=num.substr(0,num.indexOf('.'));
                        if(TVPlanerActive!=num){ //wenn eine Woche gerade angezeigt wird, muss sie nicht neu geladen werden
                                e.preventDefault ? e.preventDefault() : (e.returnValue = false); //wahrt Kompatibilität zu IE8 und älter
                                $('#TVPlaner-loading').show('fast');
                                $('#TVPlaner').slideUp();
                                if($('#TVPlaner-thisWeek').is(':hidden')) $('#TVPlaner-thisWeek').show(); //beim ersten "Umschalten" muss der Link zur aktuellen Woche sichtbar gemacht werden
                                $('#TVPlaner').load(url+'#mw-content-text table', function(){
                                        $('#TVPlaner').slideDown();
                                        $('#TVPlaner-loading').hide('fast');
                                });
                                if($('#Diese_Woche_im_TV small a').length) $('#Diese_Woche_im_TV small a').attr('href', url).attr('title', title);
                                TVPlanerActive=num;
                        }
                });
        });
}
//===========================================================================
 
 
//===========================================================================
// Fix für das inputbox-Problem: Ignoriere alle inputboxen innerhalb der vector-Vorschau, sonst wird evtl. auf der falschen Seite gespeichert
//---------------------------------------------------------------------------
if(mw.config.get('wgAction')==="edit"){
        window.onload = function () {
                var observer=new MutationObserver(function(mutations){
                        mutations.forEach(function(m){
                                if(m.addedNodes.length){
                                          $('.wikiEditor-preview-contents').promise().done(function() {
                                            $('.wikiEditor-preview-contents input').prop('disabled', true);
                                          });
                                }
                        });
                });
                observer.observe(document.querySelector('.wikiEditor-preview-contents'),{childList: true});
        };
}
//===========================================================================
 
 
//===========================================================================
// ergänze Facebook-Link links oben, Einblendung erfogt animiert (Button wird ohnehin erst einige Momente nach dem Seitenaufbau ergänzt)
//---------------------------------------------------------------------------
$('#mw-head').prepend("<div id='FBButton'>"
                                        +"<div class='floatleft'>"
                                        +"<a href='https://www.facebook.com/stargatewikide' title='Folge uns auf Facebook!' rel='nofollow'>"
                                        +"<img alt='' src='/images/thumb/c/c2/F_icon.svg/11px-F_icon.svg.png' srcset='/images/thumb/c/c2/F_icon.svg/17px-F_icon.svg.png 1.5x, /images/thumb/c/c2/F_icon.svg/22px-F_icon.svg.png 2x' data-file-width='267' data-file-height='267' height='11' width='11'>"
                                        +" Folge uns auf Facebook"
                                        +"</a></div></div>");
$('#FBButton').css('visibility', 'visible').animate({opacity: 1.0}, 400);
//===========================================================================
 
//===========================================================================
// Versteckt Spoiler-Abschnitte im Inhaltsverzeichnis
//---------------------------------------------------------------------------
spoilerHeadings = {
        headings: [],
        init: function(){
                $('.spoiler :header > span').each(function(i, e){
                        spoilerHeadings.headings.push(e.id);
                });
                spoilerHeadings.hideAll();
        },
        hideAll: function(){
                spoilerHeadings.headings.forEach(function(val){
                        spoilerHeadings.hide(val);
                });
        },
        showAll: function(){
                spoilerHeadings.headings.forEach(function(val){
                        spoilerHeadings.show(val);
                });
        },
        hide: function(id){
                $("#toc li > a[href='#"+id+"']").parent('li').hide();
        },
        show: function(id){
                $("#toc li > a[href='#"+id+"']").parent('li').show();
        },
        toggle: function(id){
                $("#toc li > a[href='#"+id+"']").parent('li').toggle();
        }
};
 
$( spoilerHeadings.init );
//===========================================================================
 
//===========================================================================
// Gleicht die Abstände zwischen den Boxen in den Spalten der Hauptseite aus, sodass am Ende keine große Lücke in einer Spalte entsteht
//---------------------------------------------------------------------------
if(mw.config.get('wgPageName')=='Hauptseite' && mw.config.get('wgAction')=='view'){
        var balanceHeights={
                diff: 0,
                surplusRight: undefined,
                relevantBuffers: undefined,
                leftBuffers: undefined,
                rightBuffers: undefined,
                getHeightDiff: function(){
                        return $('#leftcol').height() - $('#rightcol').height();
                },
                checkBalance: function(){
                        balanceHeights.diff = balanceHeights.getHeightDiff();
                        if(balanceHeights.diff === 0) return;
 
                        if(balanceHeights.diff<0){
                                balanceHeights.diff *= -1;
                                balanceHeights.surplusRight = true;
                                balanceHeights.relevantBuffers = balanceHeights.leftBuffers;
                        }else{
                                balanceHeights.surplusRight = false;
                                balanceHeights.relevantBuffers = balanceHeights.rightBuffers;
                        }
                },
                init: function(){
                        $('#leftcol .vertbuffer, #rightcol .vertbuffer').css('transition', 'height .3s');
                        balanceHeights.leftBuffers = $('#leftcol .vertbuffer');
                        balanceHeights.rightBuffers = $('#rightcol .vertbuffer');
 
                        balanceHeights.checkBalance();
                        balanceHeights.relevantBuffers.each(function(i, e){
                                e.style.height = Math.round(balanceHeights.diff / balanceHeights.relevantBuffers.length)+"px";
                        });
 
                        balanceHeights.checkBalance();
                        balanceHeights.relevantBuffers.last().get(0).style.height = balanceHeights.relevantBuffers.last().height()+balanceHeights.diff+"px";
                }
        };
        $(balanceHeights.init);
}
//===========================================================================
 
//===========================================================================
// Passt Links, die mit der [[Vorlage:Gelöschte Seite]] erzeugt werden, farblich vollständig (samt Unterstrich) an echte Redlinks an.
//---------------------------------------------------------------------------
$(function() {
        $('.geloeschteSeite').parent().css('color','#ba0000');
});
//===========================================================================
 
 
//===========================================================================
// Import-Skript für CSS-Styles analog zu importScript
//---------------------------------------------------------------------------
function importStyle(page) {
        var uri = mw.config.get('wgScript') + '?title=' +
                encodeURIComponent(page.replace(/ /g,'_')).replace(/%2F/ig,'/').replace(/%3A/ig,':') +
                '&action=raw&ctype=text/css';
        return importStyleURI(uri);
}
 
var loadedStyles = {}; // included-styles tracker
function importStyleURI(url) {
        if (loadedStyles[url]) {
                return null;
        }
        loadedStyles[url] = true;
        var e = document.createElement('link');
        e.setAttribute('href',url);
        e.setAttribute('rel','stylesheet');
        document.getElementsByTagName('head')[0].appendChild(e);
        return e;
}
//===========================================================================