Benutzer:GeriDev/monobook.js

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
/* Function formatChemicalFormula()
 *
 * This function formats a chemical formula and links the elements to the appropriate article.
 *
 * It relies on a template with the following slogger:
 *
 * <includeonly>
 * <span class="summenformel">{{{1|}}}</span>
 * {{ #if: {{{2|}}} | <span id="exception_source" style="color:red;"></span>&nbsp;<span id="exception"></span> }}  ... to display JS exceptions
 * {{ #if: {{{3|}}} | <div id="debug"></div> }}  ... to display debug infos
 * </includeonly>
 *
 * History:
 *   v1.0: Initial version
 *   v2.0: Class ChemicalFormulaFormatter created
 */
addOnloadHook( // DON'T FORGET TO UN-COMMENT THIS LINE IN WIKI's *.js, AND TO COMMENT IT WHEN TESTING LOCALLY
function formatChemicalFormula()
  {
  try
    {
    //var debug = document.getElementById( "debug" );  debug.innerHTML += "&rarr; formatChemicalFormula";
    var allSpans = document.getElementsByTagName( "span" );  //debug.innerHTML += "<br />\nallSpans.len: " + allSpans.length;

    for ( var spanIdx = 0; spanIdx < allSpans.length; spanIdx++ )
      {
      var span = allSpans[spanIdx];
      if ( span.className == "summenformel" )
        {  //debug.innerHTML += ( "<br />\nspan: " + span.innerHTML );
        var chemicalFormula = new ChemicalFormula( span.innerHTML );
        span.innerHTML = new ChemicalFormulaFormatter( chemicalFormula, wgArticlePath ).getHTML();
        } // if ( summenformel )
      } // for ( span )
    }
  catch ( exception )
    {
    document.getElementById( 'exception_source' ).innerHTML += "monobook.js: formatChemicalFormula() - ";
    document.getElementById( 'exception' ).innerHTML += exception + " - ";
    //alert( "Exception in monobook.js: formatChemicalFormula():\n\n" +  exception );
    }
  } // formatChemicalFormula()

) // addOnloadHook();  // DON'T FORGET TO UN-COMMENT THIS LINE IN WIKI's *.js, AND TO COMMENT IT WHEN TESTING LOCALLY

// Class ChemicalFormulaFormatter
function ChemicalFormulaFormatter( chemicalFormula, articlePath )
  {
  try
    {
    var html = "";

    var tokens = chemicalFormula.getTokens();  //debug.innerHTML += "<br />\ntokens(" + tokens.length  + "): " + tokens;

    for ( var tokenIdx = 0; tokenIdx < tokens.length ; tokenIdx++ )
      {
      with ( tokens[tokenIdx] )
        {  //debug.innerHTML += "<br />\ntoken[n]: " + getSymbol() + ", " + getName() + ", " + getLemma();
        if ( getSymbol().match( /[0-9]/ ) )  // numbers
          {
          html += getSymbol().sub();
          }
        else
          {
          if ( getSymbol() == "(" || getSymbol() == ")" )  // parenthesis
            {
            html += getSymbol();
            }
          else
            {
            if ( getLemma() == "" )  // unknown element
              {
              html += "<span title=\"" + getName() + "\">" + getSymbol() + "</span>";
              }
            else
              {
              html += "<a href=\"" + articlePath.replace( "$1", getLemma() ) + "\" title=\"" + getName() + "\">" + getSymbol() + "</a>";
              }
            } // if ( parenthesis )
          } // if ( number )
        } // with ( token )
      } // for ( token )

    function getHTML()
      {
      return html;
      }

    //public methods
    this.getHTML = getHTML;
    }
  catch ( exception )
    {
    document.getElementById( 'exception_source' ).innerHTML += "monobook.js: ChemicalFormulaFormatter - ";
    document.getElementById( 'exception' ).innerHTML += exception + " - ";
    //alert( "Exception in monobook.js: ChemicalFormulaFormatter:\n\n" +  exception );
    }

  } // ChemicalFormulaFormatter()



// Class ChemicalFormula
function ChemicalFormula( formula )
  {
  try
    {
    //var debug = document.getElementById( "debug" );  debug.innerHTML += "<br />\n&rarr; ChemicalFormula(" + formula + ")";

    var formula = formula;
    var tokens = new Array();

    var previousCharacter = "";
    var character = "";
    var subString = "";

    // split the formula into tokens
    for ( var charIdx = 0; charIdx < formula.length; charIdx++ )
      {
      character = formula.substr( charIdx, 1);

      // A token is found if...
      if ( ( previousCharacter.match( /[a-zA-Z]/ ) && character.match( /[0-9]/ ) ) ||  // ...digit after letter
           ( previousCharacter.match( /[0-9]/ ) && character.match( /[A-Z]/ ) ) ||  // ...letter after digit
           ( previousCharacter.match( /[a-z]/ ) && character.match( /[A-Z]/ ) ) ||  // ...uppercase after lowercase
           ( previousCharacter.match( /[A-Z]/ ) && character.match( /[A-Z]/ ) ) ||  // ...uppercase after uppercase
           previousCharacter == "(" || previousCharacter == ")" || character == "(" || character == ")" )
        {
        tokens.push( new ChemicalElement( subString ) );
        subString = character;  //debug.innerHTML += "<br />\ntrue.char: " + character + " ... true.subString: " + subString;
        }
      else
        {
        subString += character;  //debug.innerHTML += "<br />\nfalse.char: " + character + " ... false.subString: " + subString;
        }
      previousCharacter = character;
      } // for ( char )
      tokens.push( new ChemicalElement( subString ) );  // add last token
      //debug.innerHTML += "<br />\ntokens.len: " + tokens.length;

    function getTokens()
      {
      return tokens;
      }

    //public methods
    this.getTokens = getTokens;
    }
  catch( exception )
    {
    document.getElementById( "exception_source" ).innerHTML += "monobook.js: ChemicalFormula - ";
    document.getElementById( "exception" ).innerHTML += exception + " - ";
    //alert( "Exception in monobook.js: ChemicalFormula:\n\n" + exception );
    }
  } // ChemicalFormula

// Class ChemicalElement
function ChemicalElement( symbol )
  {
  try
    {
    //var debug = document.getElementById( "debug" );  debug.innerHTML += "<br />\n&rarr; Element";

    var symbol = symbol;
    var name = "";
    var lemma = "";

    var symbols = new Array(
      "H","He","Li","Be","B","C","N","O","F","Ne", // 10
      "Na","Mg","Al","Si","P","S","Cl","Ar","K","Ca", // 20
      "Sc","Ti","V","Cr","Mn","Fe","Co","Ni","Cu","Zn", // 30
      "Ga","Ge","As","Se","Br","Kr","Rb","Sr","Y","Zr", // 40
      "Nb","Mo","Tc","Ru","Rh","Pd","Ag","Cd","In","Sn", // 50
      "Sb","Te","I","Xe","Cs","Ba","La","Ce","Pr","Nd", // 60
      "Pm","Sm","Eu","Gd","Tb","Dy","Ho","Er","Tm","Yb", // 70
      "Lu","Hf","Ta","W","Re","Os","Ir","Pt","Au","Hg", // 80
      "Tl","Pb","Bi","Po","At","Rn","Fr","Ra","Ac","Th", // 90
      "Pa","U","Np","Pu","Am","Cm","Bk","Cf","Es","Fm", // 100
      "Md","No","Lr","Rf","Db","Sg","Bh","Hs","Mt","Ds", // 110
      "Rg","Uub","Uut","Uuq","Uup","Uuh","Uus","Uuo","Uue","Ubn", // 120
      "Ubu","Ubb","Ubt","Ubq","Ubp","Ubh"); // 126

    var names = new Array(
      "Wasserstoff","Helium","Lithium","Beryllium","Bor","Kohlenstoff","Stickstoff","Sauerstoff","Fluor","Neon", // 10
      "Natrium","Magnesium","Aluminium","Silizium","Phosphor","Schwefel","Chlor","Argon","Kalium","Calcium", // 20
      "Scandium","Titan","Vanadium","Chrom","Mangan","Eisen","Cobalt","Nickel","Kupfer","Zink", // 30
      "Gallium","Germanium","Arsen","Selen","Brom","Krypton","Rubidium","Strontium","Yttrium","Zirkonium", // 40
      "Niob","Molybdän","Technetium","Ruthenium","Rhodium","Palladium","Silber","Cadmium","Indium","Zinn", // 50
      "Antimon","Tellur","Iod","Xenon","Caesium","Barium","Lanthan","Cer","Praseodym","Neodym", // 60
      "Promethium","Samarium","Europium","Gadolinium","Terbium","Dysprosium","Holmium","Erbium","Thulium","Ytterbium", // 70
      "Lutetium","Hafnium","Tantal","Wolfram","Rhenium","Osmium","Iridium","Platin","Gold","Quecksilber", // 80
      "Thallium","Blei","Bismut","Polonium","Astat","Radon","Francium","Radium","Actinium","Thorium", // 90
      "Protactinium","Uran","Neptunium","Plutonium","Americium","Curium","Berkelium","Californium","Einsteinium","Fermium", // 100
      "Mendelevium","Nobelium","Lawrencium","Rutherfordium","Dubnium","Seaborgium","Bohrium","Hassium","Meitnerium","Darmstadtium", // 110
      "Roentgenium","Ununbium","Ununtrium","Ununquadium","Ununpentium","Ununhexium","Ununseptium","Ununoctium","Ununennium","Unbinilium", // 120
      "Unbiunium","Unbibium","Unbitrium","Unbiquadium","Unbipentium","Unbihexium"); // 126

    var lemmas = new Array(
      "","","","","","","","","","", // 10
      "","","","Silicium","","","","","","", // 20
      "","Titan (Element)","","","","","","","","", // 30
      "","","","","","","","","","Zirconium", // 40
      "","","","","","","","","","", // 50
      "","","","","","","","","","", // 60
      "","","","","","","","","","", // 70
      "","","","","","","","","","", // 80
      "","","","","","","","","","", // 90
      "","","","","","","","","","", // 100
      "","","","","","","","","","", // 110
      "","","","","","","","","","", // 120
      "","","","","","",""); // 126

    var symbolIdx = 0;
    do
      {}
    while ( symbols[symbolIdx] != symbol && symbolIdx++ < symbols.length);

    if ( symbolIdx <= symbols.length )
      {
      name = names[symbolIdx];
      lemma = ( lemmas[symbolIdx] == "" ) ? name : lemmas[symbolIdx];
      }
    else
      {
      name = "Element mit Symbol '" + symbol + "' nicht definiert!";
      }
    //debug.innerHTML += "<br />\nChemicalElement: " + symbol + ", " + name + ", " + lemma;

    function getSymbol()
      {
      return symbol;
      }

    function getName()
      {
      return name;
      }

    function getLemma()
      {
      return lemma;
      }

    // public methods
    this.getSymbol = getSymbol;
    this.getName = getName;
    this.getLemma = getLemma;
    }
  catch( exception )
    {
    document.getElementById( "exception_source" ).innerHTML += "monobook.js: ChemicalElement - ";
    document.getElementById( "exception" ).innerHTML += exception + " - ";
    //alert( "Exception in monobook.js: ChemicalElement:\n\n" + exception );
    }
  } // ChemicalElement

/*
addOnloadHook(
  function Summenformel() {
    var elements = ('H=Wasserstoff,He=Helium,'+
      'Li=Lithium,Be=Beryllium,B=Bor,C=Kohlenstoff,N=Stickstoff,O=Sauerstoff,F=Fluor,Ne=Neon,'+
      'Na=Natrium,Mg=Magnesium,Al=Aluminium,Si=Silicium,P=Phosphor,S=Schwefel,Cl=Chlor,Ar=Argon,'+
      'K=Kalium,Ca=Calcium,Sc=Scandium,'+
        'Ti=Titan (Element),V=Vanadium,Cr=Chrom,Mn=Mangan,Fe=Eisen,Co=Cobalt,Ni=Nickel,Cu=Kupfer,Zn=Zink,Ga=Gallium,Ge=Germanium,As=Arsen,Se=Selen,Br=Brom,Kr=Krypton,'+
      'Rb=Rubidium,Sr=Strontium,Y=Yttrium,'+
        'Zr=Zirconium,Nb=Niob,Mo=Molybdän,Tc=Technetium,Ru=Ruthenium,Rh=Rhodium,Pd=Palladium,Ag=Silber,Cd=Cadmium,In=Indium,Sn=Zinn,Sb=Antimon,Te=Tellur,I=Iod,Xe=Xenon,'+
      'Cs=Caesium,Ba=Barium,'+
        'La=Lanthan,Ce=Cer,Pr=Praseodym,Nd=Neodym,Pm=Promethium,Sm=Samarium,Eu=Europium,Gd=Gadolinium,Tb=Terbium,Dy=Dysprosium,Ho=Holmium,Er=Erbium,Tm=Thulium,Yb=Ytterbium,Lu=Lutetium,'+
        'Hf=Hafnium,Ta=Tantal,W=Wolfram,Re=Rhenium,Os=Osmium,Ir=Iridium,Pt=Platin,Au=Gold,Hg=Quecksilber,Tl=Thallium,Pb=Blei,Bi=Bismut,Po=Polonium,At=Astat,Rn=Radon,'+
      'Fr=Francium,Ra=Radium,'+
        'Ac=Actinium,Th=Thorium,Pa=Protactinium,U=Uran,Np=Neptunium,Pu=Plutonium,Am=Americium,Cm=Curium,Bk=Berkelium,Cf=Californium,Es=Einsteinium,Fm=Fermium,Md=Mendelevium,No=Nobelium,Lr=Lawrencium,'+
        'Rf=Rutherfordium,Db=Dubnium,Sg=Seaborgium,Bh=Bohrium,Hs=Hassium,Mt=Meitnerium,Ds=Darmstadtium,Rg=Roentgenium,Uub=Ununbium,Uut=Ununtrium,Uuq=Ununquadium,Uup=Ununpentium,Uuh=Ununhexium,Uus=Ununseptium,Uuo=Ununoctium').
      split(',');
    var names = new Array();
    for (var number = 0; number<elements.length; number++) {
      var parts = elements[number].split('=');
      names[parts[0]] = parts[1];
      }
    var spans = document.getElementsByTagName('span');
    for (var number = 0; number<spans.length; number++) {
      var span = spans[number];
      if (span.className=='summenformel') {
        var content = span.innerHTML;
        content = content.replace(/(\d+)/g, '<sub>$1</sub>');
        while (matches = content.match(/^(.*?)((?:[A-Z]|Uu)[a-z]?)(?!(?:[a-z]|<\/))(.*?)$/))
          content = matches[1]+
            '<a href="'+wgArticlePath.replace('$1', names[matches[2]])+'" title="'+names[matches[2]]+'">'+matches[2]+'</a>'+
            matches[3];
        span.innerHTML = content;
        }
      }
    }
  )
*/